NestJS集成i18n异常:返回变量名而非翻译文本求助
NestJS i18n 配置异常:返回变量名而非翻译文本
我正在开发一个NestJS项目,需求是根据请求头中的语言信息,向前端返回对应语言的错误提示。调研后选用nestjs-i18n方案实现,严格按文档配置完成后,在Postman测试时发现返回的不是JSON文件中定义的翻译文本,而是变量名。比如JSON里定义test对应HelloWorld,实际返回的却是test。
我已经尝试过搜索解决方案、重新核对文档,甚至直接复制负责人已完成i18n配置项目的代码,但问题依然存在。不清楚遗漏了哪些配置,希望能得到帮助。以下是项目中的相关文件:
package.json
{ "name": "nest-experiments", "version": "0.0.1", "description": "", "author": "", "private": true, "license": "UNLICENSED", "scripts": { "build": "nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json" }, "dependencies": { "@nestjs/common": "^9.0.0", "@nestjs/core": "^9.0.0", "@nestjs/mongoose": "^9.2.2", "@nestjs/platform-express": "^9.0.0", "axios": "^1.4.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "mongodb": "^5.5.0", "mongoose": "^7.2.1", "nestjs-i18n": "^10.2.6", "reflect-metadata": "^0.1.13", "rxjs": "^7.2.0" }, "devDependencies": { "@nestjs/cli": "^9.0.0", "@nestjs/schematics": "^9.0.0", "@nestjs/testing": "^9.0.0", "@types/express": "^4.17.13", "@types/jest": "29.5.1", "@types/mongoose": "^5.11.97", "@types/node": "18.16.12", "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", "eslint": "^8.0.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "jest": "29.5.0", "prettier": "^2.3.2", "source-map-support": "^0.5.20", "supertest": "^6.1.3", "ts-jest": "29.1.0", "ts-loader": "^9.2.3", "ts-node": "^10.0.0", "tsconfig-paths": "4.2.0", "typescript": "^5.0.0" }, "jest": { "moduleFileExtensions": [ "js", "json", "ts" ], "rootDir": "src", "testRegex": ".*\\.spec\\.ts$", "transform": { "^.+\\.(t|j)s$": "ts-jest" }, "collectCoverageFrom": [ "**/*.(t|j)s" ], "coverageDirectory": "../coverage", "testEnvironment": "node" } }
nest-cli.json
{ "$schema": "https://json.schemastore.org/nest-cli", "collection": "@nestjs/schematics", "sourceRoot": "src", "compilerOptions": { "deleteOutDir": true, "assets": [ { "include": "i18n/**/*", "watchAssets": true } ] } }
app.module.ts
我知道这段代码和当前文档略有不同,但它来自负责人的项目
import { Module } from '@nestjs/common'; import { MongooseModule } from '@nestjs/mongoose'; import { AcceptLanguageResolver, CookieResolver, HeaderResolver, I18nJsonLoader, I18nModule, QueryResolver, } from 'nestjs-i18n'; import * as path from 'path'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { PointsModule } from './points/points.module'; import { SlackModule } from './slack/slack.module'; import { UsersModule } from './users/users.module'; @Module({ imports: [PointsModule, MongooseModule.forRoot('mongodb+srv://sharbelabousabha:2639Xq0y3W9ATVeO@cluster0.horwrkd.mongodb.net/?retryWrites=true&w=majority'), SlackModule, UsersModule, I18nModule.forRoot({ fallbackLanguage: 'en', loaderOptions: { path: path.join(__dirname, '/i18n/'), watch: true, }, resolvers: [ // eslint-disable-next-line sort-keys { use: QueryResolver, options: ['lang', 'locale', 'l'] }, new HeaderResolver(['x-custom-lang']), AcceptLanguageResolver, new CookieResolver(['lang', 'locale', 'l']), ], }) ], controllers: [AppController], providers: [AppService], }) export class AppModule { }
app.service.ts
import { Injectable } from '@nestjs/common'; import { I18nContext, I18nService } from 'nestjs-i18n'; @Injectable() export class AppService { constructor(private readonly i18n: I18nService) {} getHello(): string { console.log({ lang: I18nContext.current().lang }) return this.i18n.translate('Created.Success'); } }
内容的提问来源于stack exchange,提问作者Mohamed Chokor
相关产品推荐
相关产品推荐

