在 Angular 项目中实现国际化(i18n)和翻译 使用ngx-translate
安装核心依赖首先在项目的根目录下通过 npm 安装 ngx-translate 的核心库以及用于通过 HTTP 请求加载翻译文件的加载器npm installngx-translate/core--save npm installngx-translate/http-loader--save配置根模块AppModule在项目的根模块通常是 app.module.ts中需要引入 HttpClientModule 和 TranslateModule并配置翻译文件的加载路径import{HttpClientModule,HttpClient}fromangular/common/http;import{TranslateModule,TranslateLoader}fromngx-translate/core;import{TranslateHttpLoader}fromngx-translate/http-loader;// 定义加载器工厂函数指定翻译文件位于 ./assets/i18n/ 目录下后缀为 .jsonexportfunctionHttpLoaderFactory(http:HttpClient){returnnewTranslateHttpLoader(http,./assets/i18n/,.json);}NgModule({imports:[BrowserModule,HttpClientModule,// 必须引入TranslateModule.forRoot({defaultLanguage:zh,// 设置默认语言loader:{provide:TranslateLoader,useFactory:HttpLoaderFactory,deps:[HttpClient]}})],bootstrap:[AppComponent]})exportclassAppModule{}创建翻译资源文件zh.json中文{welcome:欢迎使用,language:语言,home:主页}en.json英文{welcome:Welcome,language:Language,home:Home}初始化与切换语言在根组件如 app.component.ts中注入 TranslateService设置默认语言并根据需求如浏览器语言或本地存储初始化当前语言。同时可以编写切换语言的方法。import{Component,OnInit}fromangular/core;import{TranslateService}fromngx-translate/core;Component({selector:app-root,templateUrl:./app.component.html})exportclassAppComponentimplementsOnInit{constructor(publictranslate:TranslateService){// 设置回退语言this.translate.setDefaultLang(en);}ngOnInit():void{// 获取浏览器语言并设置当前使用的语言constbrowserLangthis.translate.getBrowserLang();this.translate.use(browserLang?.match(/en|zh/)?browserLang:en);}// 切换语言的方法switchLanguage(lang:string){this.translate.use(lang);}}在页面中使用翻译最后在 HTML 模板中可以通过管道Pipe直接获取翻译内容或者在 TypeScript 业务逻辑中通过服务获取。!-- 插值表达式 --h1{{ welcome | translate }}/h1!-- 属性绑定 --button[title]home | translate按钮/button// 同步获取需确保翻译文件已加载完成consttextthis.translate.instant(welcome);// 异步获取推荐更安全this.translate.get(welcome).subscribe((res:string){console.log(res);});按照以上步骤你的 Angular 项目即可成功集成 ngx-translate实现流畅的运行时多语言切换功能。如果在实际配置中遇到版本兼容或懒加载模块的问题可以随时进一步提问。但是按照第5步的ts去写 每次在业务代码中都要手动处理 get 的订阅或者担心 instant 的同步加载问题不仅代码冗余还容易因为翻译文件未加载完成而导致取不到值封装 I18nService 服务(i18n.service.ts)import{Injectable}fromangular/core;import{TranslateService}fromngx-translate/core;import{BehaviorSubject,Observable}fromrxjs;Injectable({providedIn:root})exportclassI18nService{// 用于监听当前语言的变化方便组件UI更新publiccurrentLang$newBehaviorSubjectstring(en);constructor(privatetranslate:TranslateService){// 设置支持的语言列表和默认语言this.translate.addLangs([en,zh]);this.translate.setDefaultLang(en);// 初始化语言this.initLanguage();}privateinitLanguage():void{constsavedLanglocalStorage.getItem(preferred-language);constbrowserLangthis.translate.getBrowserLang();// 优先使用本地存储其次浏览器语言最后回退到 enconstlangToUsesavedLang||(browserLang?.match(/en|zh/)?browserLang:en);this.setLanguage(langToUse);}// 切换语言的核心方法setLanguage(lang:string):void{this.translate.use(lang);this.currentLang$.next(lang);localStorage.setItem(preferred-language,lang);document.documentElement.langlang;}/** * 智能获取翻译文本优先同步失败自动异步兜底 */getTranslation(key:string,params?:any):Observablestring{consttranslatedthis.translate.instant(key,params);if(translated!key){returnnewObservable(observer{observer.next(translated);observer.complete();});}returnthis.translate.get(key,params);}}第二步下拉切换组件 (lang-switcher.component.ts)import{Component,OnInit,OnDestroy}fromangular/core;import{I18nService}from../services/i18n.service;import{Subscription}fromrxjs;Component({selector:app-lang-switcher,templateUrl:./lang-switcher.component.html,styleUrls:[./lang-switcher.component.css]})exportclassLangSwitcherComponentimplementsOnInit,OnDestroy{currentLang:stringen;privatelangSub!:Subscription;// 定义支持的语言选项languages[{code:zh,label:简体中文},{code:en,label:English}];constructor(privatei18n:I18nService){}ngOnInit():void{// 订阅当前语言的变化以便UI实时更新this.langSubthis.i18n.currentLang$.subscribe(lang{this.currentLanglang;});}// 用户在下拉框中选择语言时触发onLanguageChange(event:Event):void{constselectElementevent.targetasHTMLSelectElement;this.i18n.setLanguage(selectElement.value);}ngOnDestroy():void{// 防止内存泄漏组件销毁时取消订阅if(this.langSub){this.langSub.unsubscribe();}}}第三步组件模板与样式lang-switcher.component.htmldivclasslang-switcher-wrapperlabelforlanguage-selectclasslang-label/labelselectidlanguage-select[value]currentLang(change)onLanguageChange($event)classlang-dropdownoption*ngForlet lang of languages[value]lang.code{{ lang.label }}/option/select/divlang-switcher.component.css.lang-switcher-wrapper{display:flex;align-items:center;gap:8px;}.lang-label{font-size:1.2rem;cursor:pointer;}.lang-dropdown{padding:6px 12px;border-radius:6px;border:1px solid #ddd;background-color:#fff;font-size:14px;cursor:pointer;outline:none;transition:border-color 0.3s;}.lang-dropdown:hover{border-color:#409eff;}第四步在根模块中注册别忘了在你的 app.module.ts 中声明这个组件并配置好 ngx-translate 的加载器参考之前提供的配置。NgModule({declarations:[AppComponent,LangSwitcherComponent// 声明组件],imports:[// ... 其他模块TranslateModule.forRoot({defaultLanguage:en,loader:{provide:TranslateLoader,useFactory:HttpLoaderFactory,deps:[HttpClient]}})],bootstrap:[AppComponent]})exportclassAppModule{}第五步在页面中使用!-- 导航栏 --navh1{{ app_title | translate }}/h1!-- 直接放入切换组件无需任何额外逻辑 --app-lang-switcher/app-lang-switcher/nav在业务代码中如何简便使用封装之后你在组件或业务逻辑中只需要注入 这个 I18nService 即可完全不用关心底层的异步订阅import{Component,OnInit,OnDestroy}fromangular/core;import{I18nService}from./i18n.service;// 确保路径正确import{Subscription}fromrxjs;// 引入 Subscription 用于取消订阅Component({selector:app-demo,templateUrl:./demo.component.html})exportclassDemoComponentimplementsOnInit,OnDestroy{// 定义一个变量来保存订阅privatetranslationSub!:Subscription;constructor(privatei18n:I18nService){}ngOnInit(){// 获取翻译加上类型约束 : stringthis.translationSubthis.i18n.getTranslation(welcome).subscribe((text:string){console.log(翻译结果,text);// 在这里执行业务逻辑比如赋值给变量this.welcomeText text;});}// 切换语言也只需一行代码switchToChinese(){this.i18n.setLanguage(zh);}// 组件销毁时取消订阅防止内存泄漏ngOnDestroy():void{if(this.translationSub){this.translationSub.unsubscribe();}}}

相关新闻

【无标题】 2026最新2款AI编程工具平替之选深度实测

【无标题】 2026最新2款AI编程工具平替之选深度实测

这篇文章是写给和我一样从大厂出来创业的人:创业团队选 AI 编程工具,性价比和上手速度比功能数量重要得多。我去年底接了个信创IoT设备管理平台的国产化改造项目,代号「星联2025」,当时团队3个人,独立开发者年度AI工具…

2026/7/18 18:43:54阅读更多 →
IGBT功率半导体器件:原理、特性与应用解析

IGBT功率半导体器件:原理、特性与应用解析

1. IGBT的基本概念与历史沿革 绝缘栅双极型晶体管(Insulated Gate Bipolar Transistor,简称IGBT)是一种兼具MOSFET高输入阻抗和BJT低导通压降特性的复合型功率半导体器件。作为现代电力电子系统的核心开关元件,IGBT通过独特的四层…

2026/7/18 18:43:54阅读更多 →
C盘空间严重不足怎么办?按顺序清理这5类文件更稳妥,系统盘释放空间全攻略

C盘空间严重不足怎么办?按顺序清理这5类文件更稳妥,系统盘释放空间全攻略

当系统盘亮起红色警告时,很多人第一反应是翻遍每个文件夹找大文件删除,但这样做很可能误伤系统组件。正确的做法是先评估风险等级,从最安全的临时文件开始清理,逐步深入到系统设置项,最后再用专业工具做一次深度扫描。…

2026/7/18 18:41:54阅读更多 →
Spring AI第一课-简单问答

Spring AI第一课-简单问答

Spring AI 快速入门:集成 DeepSeek 大模型实战笔记今天上手了 Spring AI 的第一课,用 Spring Boot DeepSeek API 搭了一个最简单的 AI 聊天应用。把整个过程和知识点整理一下,方便后续回顾。一、什么是 Spring AI Spring AI 是 Spring 官方推…

2026/7/18 19:43:58阅读更多 →
FIR数字滤波器设计:从原理到FPGA工程实践

FIR数字滤波器设计:从原理到FPGA工程实践

1. FIR数字滤波器设计实战开篇作为一名在数字信号处理领域摸爬滚打多年的工程师,我至今记得第一次独立完成FIR滤波器设计时的场景。当时为了滤除工业传感器信号中的50Hz工频干扰,我翻遍了各种教材和论文,却发现大多数资料要么过于理论化&…

2026/7/18 19:43:58阅读更多 →
3分钟搞定实时字幕:Windows本地语音转文字工具完整指南

3分钟搞定实时字幕:Windows本地语音转文字工具完整指南

3分钟搞定实时字幕:Windows本地语音转文字工具完整指南 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 还在为会议记录手忙脚乱?还在为视频字幕制作头疼?今天,我要向您…

2026/7/18 19:43:58阅读更多 →
中科蓝讯蓝牙芯片FLASH存储机制与SDK接口详解

中科蓝讯蓝牙芯片FLASH存储机制与SDK接口详解

1. 中科蓝讯芯片架构与FLASH存储机制解析在中科蓝讯蓝牙芯片方案中,内置FLASH存储是实现参数持久化的关键组件。根据实际项目经验,其典型架构采用SPI接口连接的NOR Flash芯片,容量通常为512KB或1MB。这种设计在TWS耳机、智能穿戴等低功耗场景…

2026/7/18 19:43:58阅读更多 →
LLM智能体技能开发:模块化扩展与实战应用

LLM智能体技能开发:模块化扩展与实战应用

1. 智能体技能革命:当LLM学会"七十二变"2014年,吴恩达团队用深度学习模型教会机械臂自主叠毛巾时,人们惊叹于AI的"动手能力"。十年后的今天,大语言模型(LLM)正在经历类似的进化——通过…

2026/7/18 19:43:58阅读更多 →
ClusterGVis技术栈:基因表达分析中的架构重构与可视化范式突破

ClusterGVis技术栈:基因表达分析中的架构重构与可视化范式突破

ClusterGVis技术栈:基因表达分析中的架构重构与可视化范式突破 【免费下载链接】ClusterGVis One-step to Cluster and Visualize Gene Expression Matrix 项目地址: https://gitcode.com/gh_mirrors/cl/ClusterGVis 在单细胞转录组学和RNA-Seq时间序列数据分…

2026/7/18 19:41:58阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/18 10:49:13阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/18 8:49:08阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/18 14:49:24阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/18 14:49:24阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/18 18:49:35阅读更多 →