У меня нет абсолютно никакого опыта в разработке многоязычных приложений, и я решил начать учебный проект. Я ищу лучшие практики того, как правильно его реализовать. Конечно, у меня есть идея, как бы я это сделал.
Давайте представим очень простую систему CMS, где пользователь может создать веб-сайт и добавлять на него страницы. Итак, при поддержке только одного языка очень простая база данных будет выглядеть так:
- PageID (int), первичный ключ - уникальный идентификатор страницы
- Заголовок (текст) - заголовок страницы
- Контент (текст) - содержимое страницы
И если я хочу поддерживает несколько языков, я бы добавил новое поле:
- Language (текст) - язык страницы, представленный в виде языкового тега IETF (например, hu-HU, en- США)
Кроме того, я бы изменил ключ, сделав его сложным первичным ключом (PageID, Language). Пример базы данных будет выглядеть так:
| PageID | Language | Title | Content |
|--------|----------|----------|-------------------------|
| 1 | hu-HU | Cím | Ide jön a tartalom |
| 1 | en-US | Title | Here goes the content |
| 2 | hu-HU | Rólunk | A mi célunk az, hogy... |
| 2 | en-US | About us | Our goal is... |
Я хотел бы использовать заголовок Accept-Language, чтобы определить, на каком языке мне нужно отправлять контент клиенту. Это довольно просто с таким простым значением, например
Accept-Language: hu-HU
Поскольку Accept-Language является приоритетным списком, я бы взял пересечение двух наборов (список заголовков и языки, поддерживаемые моей системой) , и возьмем из него язык с наивысшим приоритетом - при условии, что у нас всегда есть непустое пересечение. Но здесь становится действительно сложно (по крайней мере, для меня).
Что мне делать, если Accept-Language - «ху, эн»? В этом случае у меня не будет точного совпадения в базе данных (поскольку у меня есть «hu-HU» и «en-US»). Или, что еще хуже, заголовок «en», но в базе данных у меня есть «en-US» и «en-GB»?
Должна ли конфигурация приложения иметь настройку для поддерживаемые языки? Я думаю, это было бы хорошей идеей, поскольку приложение может заставить пользователя создавать контент для каждого языка, но добавить новый язык в систему может быть довольно сложно. Но если он не сохранен в конфигурации, возможно, что пользователь создает контент для hu-HU, но не для en-US.
Что мне делать, если клиент запрашивает контент на языке, который не поддерживается системой? Я считаю, что для таких случаев в конфигурации приложения должен быть установлен "язык по умолчанию".
Есть ли какая-либо поддержка в ASP. NET Core 3.1, которая может мне помочь ?
Эмм ... так ли это обычно реализуется, или я ошибаюсь?