Я работаю над приложением C# .NET, которое должно поддерживать перевод названий штатов, районов, подрайонов и деревень на более чем 20 языков. Учитывая, что имеется более 100 000 записей как по деревням, так и по районам, я оцениваю различные стратегии хранения и управления этими переводами.
Мне сказали найти какое-то решение, при котором длина таблицы не будет слишком большой и не потребуется создавать слишком много новых таблиц.
Вот решения, которые я рассматриваю:
VillageID Name Translations
1 Village A {"en": "Village A", "fr": "Village A - FR", "de": "Dorf A", "es": "Villa A", "hi": "गांव ए"}
VillageTranslations Table
VillageID Name
1 Village A
2 Village B
3 Village C
TranslationID VillageID LanguageCode TranslatedName
1 1 en Village A
2 1 fr Village A - FR
3 1 de Dorf A
4 1 es Villa A
5 2 en Village B
6 2 fr Village B - FR
7 3 en Village C
8 3 hi गांव सी
Создание новой таблицы транзакций потребует перезаписи всех API, а запросы займут слишком много времени.
{
"_id": 1,
"state_name": {
"en": "California",
"es": "California",
"fr": "Californie"
}
}
Я никогда не использовал такое решение. Поэтому я не знаю недостатков.
Я ищу лучший подход.
Используя таблицу Translation
с полем JSON, вы можете гибко хранить переводы для разных таблиц и столбцов. Вот схема
Translation
type: string // table name
targetId: int // id of the record to be translated
code: string // the language code
texts: json // JSON field to store translated properties of the record
Например, если у вас есть запись типа:
Event = { id: 1, name: 'Name', description: 'Description' }
Вы можете добавить переводы для любого языка, используя запись перевода, например:
Translation = {
type: 'Event',
targetId: 1,
code: 'en',
texts: {
name: 'Name (translated)',
description: 'Description (translated)
}
}
Этот подход особенно полезен, когда у вас есть несколько таблиц и столбцов, требующих перевода. Он централизует логику перевода и упрощает управление многоязычными данными во всем приложении.
Какое решение у вас есть сегодня?