That's an interesting problem. Because although it's language oriented, it's not actually I18N related - you're talking about deny access to content based on a language preference, not displaying localized content.
Here's one idea: use a permission model
- Create two permissions such as "read-enUS-content" and "read-enGB-content"
- Based on the user's selection, grant them the correct permission for the length of their session (which you can persist if you wish via cookies or user prefs)
- It would then be the responsibility of the application to allow/deny the content based on their permissions.
Then the question becomes, how do you connect content to permissions? There are a multitude of ways, but one approach is a bitmask column.
00
||
|+--- Read enUS bit
+---- Read enGB bit
Which might look like this when implemented
Articles
+----+---------+-----------------+
| id | content | read_perm_level |
+----+---------+-----------------+
| 1 | foo | 1 |
| 2 | bar | 2 |
| 3 | baz | 3 |
+----+---------+-----------------+
This means that 'foo' is only readable by enUS, 'bar' is only readable by enGB, and 'baz' is readable by all.
But you could also do a full permission's table and connect the content to it that way.