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'.

Другие вопросы по тегам