使用 i18next 配合 过滤器 t 函数,实现 amis json 中的 i18n 国际化

tjjdgumg  于 22天前  发布在  其他
关注(0)|答案(7)|浏览(20)
是否关联于某个问题吗:

目前amis 页面的国际化必须要修改 amis json,无法把资源文件独立出来交给翻译人员。
https://aisuda.bce.baidu.com/amis/zh-CN/docs/extend/i18n#json-%E9%85%8D%E7%BD%AE%E4%B8%AD%E8%AE%BE%E7%BD%AE%E5%A4%9A%E8%AF%AD%E8%A8%80

预期的解决方案:
  • 提供 标准的数据映射 t 函数
  • 可以在 env 中重写 t 函数,例如使用 i18next 实现国际化
任何附加信息:

参考 i18next 官网,初始化 i18next,并注册为自定义过滤器。
https://www.i18next.com/overview/getting-started

import {registerFilter} from 'amis';
import i18next from 'i18next';

await i18next.init({
  lng: 'en', // if you're using a language detector, do not define the lng option
  debug: true,
  resources: {
    en: {
      translation: {
        "key": "hello world"
      }
    }
  }
});

registerFilter('t', (key: string) =>
  typeof input === 'string' ? i18next.t(key) : ""
);

amis json

{
    "type": "tpl",
    "tpl": "Hello ${key | t}"
}
ymzxtsji

ymzxtsji1#

需要以下组件属性支持数据映射( https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/data-mapping):
1.nav组件的links数组的label属性
2.tree组件的options数组的label属性
3.tabs组件的tabs数组的title属性
4.radios组件下的option下的label属性
5.input-text组件的placeholder属性
6.submit组件下的confirmTexts
7.form组件的messages属性
8.input-file组件的btnLabel属性
9.select组件的options属性的label属性

dw1jzc5e

dw1jzc5e3#

需要以下组件属性支持数据映射( https://aisuda.bce.baidu.com/amis/zh-CN/docs/concepts/data-mapping): 1.nav组件的links数组的label属性 2.tree组件的options数组的label属性 3.tabs组件的tabs数组的title属性 4.radios组件下的option下的label属性 5.input-text组件的placeholder属性 6.submit组件下的confirmTexts

kq4fsx7k

kq4fsx7k4#

早就可以使用全局文本替换进行国际化了

ycggw6v2

ycggw6v25#


早就可以使用全局文本替换进行国际化了

感谢回复,这个我们看过的,我们评估下来没有在表达式中实现自定义t函数方便。

qacovj5a

qacovj5a6#

需要有单独的t函数,支持从服务端获得国际化配置

yshpjwxd

yshpjwxd7#

👍 Thanks for this!
🏷 I have applied any labels matching special text in your issue.

Please review the labels and make any necessary changes.

相关问题