我的项目结构是这样的:
root
├── backend (nest cli)
├── frontend
└── shared
└── translations
├── en.json
├── no.json
└── nl.json
我正在尝试使用“nestjs-i18n”。他们在文档中的文件夹结构是:
...
src
└── i18n
├── en
│ ├── events.json
│ └── test.json
└── nl
├── events.json
└── test.json
是否可以按照我的语言文件结构来实现这个包? 如果需要遵循他们的结构和文件夹“i18n”,这实际上在他们的文档中令人困惑。
我已将模块导入到 app.module.ts 中:
@Module({
imports: [
I18nModule.forRoot({
fallbackLanguage: 'en',
loaderOptions: {
path: join(process.cwd(), '../shared/translations'),
watch: true,
},
resolvers: [TenantLanguageResolver],
}),
],
但是每当我尝试像这样访问它时:
const trans = await i18n.t('roles_help_text');
出现错误:
ERROR [I18nService] Translation "roles_help_text" in "en" does not exist.
nestjs-i18n 目前不提供自定义加载器。所以我遵循了它严格的文件和文件夹命名结构。我没有使用任何自定义解析器来解析语言。只需将语言文件添加到资产数组中,如下所示:
// nest-cli.json
assets": [
{
"include": "../../shared/translations/en.json",
"watchAssets": true,
"outDir": "dist/i18n/en"
},
{
"include": "../../shared/translations/no.json",
"watchAssets": true,
"outDir": "dist/i18n/no"
}
]
运行 Nest 应用程序后,您将在
dist
文件夹中找到语言文件,就像 Nestjs-i18n 包希望它们在它们自己的嵌套文件夹中一样:
dist
└── i18n
├── en
│ └── en.json
│── no
└── no.json