i18next: откат к [тот же язык + другое пространство имен] вместо [другой язык + то же пространство имен]
Это касается использования i18next в бэкэнде node.js. Это инициализация:
i18next.init({
lng: 'de',
fallbackLng: ['de'],
ns: {
namespaces: ['formal', 'informal'],
defaultNs: 'formal'
},
fallbackToDefaultNS: true,
resStore: {
de: resourcesDE,
en: resourcesEN
}
});
где resourcesDE - это объект со структурой {формальная: { }, неформальная: { }} и ресурсы EN имеют ту же структуру, но только "формальную", нет "неформальной" (но у меня есть эта проблема, даже если в ресурсах EN есть "неформальная"),
Теперь, что я хочу иметь:
Если я запрашиваю перевод "Неофициальный: myKey" для английского языка, что маршрут поиска (== отступление):
(en)'фициальный:myKey' > (en)'myKey' > (de)' неофициальный:myKey' > (de)'myKey'или (en)' неофициальный:myKey' > (en)'myKey' > (de)'мой ключ'
но на самом деле происходит следующее:
(en) 'неофициальный: myKey'> (de) 'неофициальный: myKey'> (de) 'myKey'
Это означает, что язык изменяется еще до того, как он пытается получить текст того же языка из другого пространства имен (по умолчанию).
Как я могу достичь этого или что-то в этом роде. Я также пытался использовать контекст вместо пространств имен для этих альтернатив, но, похоже, он вел себя одинаково. Я рад быть доказанным неправым все же.
1 ответ
Решение, которое сработало для меня, в конце концов:
Вместо пространств имен я использую специальные языковые разновидности: de-INFORMAL и en-INFORMAL. Если в "en-INFORMAL" не найдено ни одной метки, поиск возвращается к "en", сначала и из коробки. Если fallbackLng
если установлено значение 'de', оно будет отменено, если метка не найдена в 'en'.