ASP. NET Core 3.1, i18n - Локализация пользовательского контента - PullRequest
2 голосов
/ 09 мая 2020

У меня нет абсолютно никакого опыта в разработке многоязычных приложений, и я решил начать учебный проект. Я ищу лучшие практики того, как правильно его реализовать. Конечно, у меня есть идея, как бы я это сделал.

Давайте представим очень простую систему 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 является приоритетным списком, я бы взял пересечение двух наборов (список заголовков и языки, поддерживаемые моей системой) , и возьмем из него язык с наивысшим приоритетом - при условии, что у нас всегда есть непустое пересечение. Но здесь становится действительно сложно (по крайней мере, для меня).

  1. Что мне делать, если Accept-Language - «ху, эн»? В этом случае у меня не будет точного совпадения в базе данных (поскольку у меня есть «hu-HU» и «en-US»). Или, что еще хуже, заголовок «en», но в базе данных у меня есть «en-US» и «en-GB»?

  2. Должна ли конфигурация приложения иметь настройку для поддерживаемые языки? Я думаю, это было бы хорошей идеей, поскольку приложение может заставить пользователя создавать контент для каждого языка, но добавить новый язык в систему может быть довольно сложно. Но если он не сохранен в конфигурации, возможно, что пользователь создает контент для hu-HU, но не для en-US.

  3. Что мне делать, если клиент запрашивает контент на языке, который не поддерживается системой? Я считаю, что для таких случаев в конфигурации приложения должен быть установлен "язык по умолчанию".

  4. Есть ли какая-либо поддержка в ASP. NET Core 3.1, которая может мне помочь ?

  5. Эмм ... так ли это обычно реализуется, или я ошибаюсь?

...