如何获取给定语言的整个名称空间,如果不存在后备名称空间,则如何获取?

时间:2019-02-26 15:35:08

标签: javascript i18next

成功加载名称空间后,我想将其作为给定语言的对象进行访问。

如果给定语言的名称空间不存在,我想获取后备语言的名称空间。

如果后备语言的命名空间都不存在,我想得到一个空对象。

我已经尝试过:

type Screen = 'screen1' | 'screen2' | 'screen3';

const transitions = [
  {name: 'from1to2', from: 'screen1', to: 'screen2'},
  {name: 'from2to3', from: 'screen2', to: 'screen3'},
  {name: 'from3to2', from: 'screen3', to: 'screen2'},
  {name: 'from2to1', from: 'screen2', to: 'screen1'},
];

// DRY here! But how?
type Transition = 'from1to2' | 'from2to3' | 'from3to2' | 'from2to1';

但是必须有一个更优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以直接使用i18nextgetResourceBundle()访问翻译器对象的资源库的内容。

来自API

  

getResourceBundle

     

i18next.getResourceBundle(lng, ns)

     

返回资源束。

要获取给定语言或备用语言的名称空间,可以使用:

var ns = "abc";
var ns_obj = i18next.getResourceBundle(i18next.language, ns)
          || i18next.getResourceBundle(i18next.options.fallbackLng[0], ns) 
          || {};

如果您使用多种后备语言,则必须迭代i18next.options.fallbackLng