Это интересная проблема. Потому что, хотя он ориентирован на язык, на самом деле он не связан с I18N - вы говорите о запрете доступа к контенту на основе языковых предпочтений, а не об отображении локализованного контента.
Вот одна из идей: используйте модель разрешений
- Создание двух разрешений, таких как «read-enUS-content» и «read-enGB-content»
- Исходя из выбора пользователя, предоставьте ему правильное разрешение для продолжительности его сеанса (которое вы можете сохранить, если хотите, с помощью файлов cookie или пользовательских настроек)
- В этом случае приложение будет нести ответственность за разрешение / запрещение контента на основании их разрешений.
Тогда возникает вопрос, как вы связываете контент с разрешениями? Существует множество способов, но одним из них является столбец битовой маски.
00
||
|+--- Read enUS bit
+---- Read enGB bit
Что может выглядеть так при реализации
Articles
+----+---------+-----------------+
| id | content | read_perm_level |
+----+---------+-----------------+
| 1 | foo | 1 |
| 2 | bar | 2 |
| 3 | baz | 3 |
+----+---------+-----------------+
Это означает, что «foo» читается только enUS, «bar» читается только enGB, а «baz» читается всеми.
Но вы также можете создать таблицу с полным разрешением и таким образом подключить к ней контент.