angular 国际化实战

超详细的 Angular 国际化方案 肝很久,分享第一次在 Angular 框架上落地国际化方案,希望能帮到你~ 阅读详情

今天和大家分享的内容目录:

  1. 使用angular-translate 模块的前期准备工作

  2. 创建过滤器做html页面内容的国际化

  3. 创建服务做javascript 脚本里的内容国际化

  1. 使用 angular-translate 模块的前期准备工作

使用 bower 管理工具下载 angular 及 angular-translate 模块

bower install angular
bower install angular-translate
bower install angular-translate-loader-static-files
//然后在页面引用进去
<script src="/vender/angular-1.3.8.js"></script>
<script src="/vender/bower-angular-translate-2.4.2/angular-translate.min.js"></script>
<script src="/bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js"></script>

第一个文件 angular-1.3.8.js 就不用多说了.你懂的.

第二个文件 angular-translate.min.js 是angular官方提供的国际化模块

第三个文件 angular-translate-loader-static-files.min.js 模块是用来读取本地文件的模块,因为我们的翻译内容都是独立的 json 文件.

我们找一个独立的文件夹 i18n 用来放json 文件,目录及文件如下层级关系:

/i18n/

        en.json

        cn.json

en.json 文件内容如下:

{"100001":"Login","100002":"Register"}

cn.json 文件内容如下:

{"100001":"登录","100002":"注册"}

上面2个json文件对应相同的键 ,我们称之为 翻译键.  不同的语言文件中,相同的翻译键对应相应的翻译值即可.如 "Login" 对应 "登录"

接下来我们需要在注入依赖:

var app = angular.module('myApp', ['pascalprecht.translate'])
.config(['$translateProvider',function($translateProvider){
        var lang = window.localStorage.lang||'cn';
    $translateProvider.preferredLanguage(lang);
    $translateProvider.useStaticFilesLoader({
        prefix: '/i18n/',
        suffix: '.json'
    });
}]);

分解的看下上面的代码:

var app = angular.module('myApp', ['pascalprecht.translate']);

这一句就是告诉我们已经把 angular-translate 模块以一个依赖项加载进来.

.config(['$translateProvider',function($translateProvider)

config 函数用 $translateProvider 服务配置 $translate 服务实现.

我们上面使用了 localStorage.lang  来存储用户上一次选择的语言,如果用户是第一次范围,默认显示中文(及 加载 cn.json 文件来翻译)

$translateProvider.preferredLanguage(lang)

这一句告诉 angular.js 哪种语言是默认已注册的语言.

$translateProvider.useStaticFilesLoader({
        prefix: '/i18n/',
        suffix: '.json'
    });

上面的语句告诉我们 angular.js 应该加载本地那些国际化语言配置文件.

prefix : 指定文件前缀.

suffix: 指定文件后缀.


这时你可能会想,只有前缀和后缀那 它到底该加载那个文件呢.如果 i18n 里面有几十种语言翻译文件,是不是要全部加载?

不是这样的.它会按照默认注册的语言去加载.默认注册的语言就是下面这一句得到的.

var lang = window.localStorage.lang||'cn';

如果用户上次访问了英文站, window.localStorage.lang=en; 那么对于会加载 /i18n/en.json  文件

如果用户第一次访问, window.localStorage.lang=undefined ,那么默认我们会加载 /i18n/cn.json 文件

然后我们决定在页脚的位置放一个选择语言的下拉列表框

    <select class="language-switching" ng-controller="LanguageSwitchingCtrl" ng-model="cur_lang"  ng-change="switching(cur_lang)">
    <option value="en">English</option>
    <option value="cn">简体中文</option>
    </select>

上面的语言选择器提供了2种语言 ,en ,cn ,当我们选择项变化时会触发 ng-change 函数,空间还绑定了模型 ng-model="cur_lang"

然后我们看下 controller 里面的内容:

angular.module('myApp').controller('LanguageSwitchingCtrl', ['$scope', '$translate', function (scope, $translate) {
    scope.switching = function(lang){
        $translate.use(lang);
        window.localStorage.lang = lang;
        window.location.reload();
    };
    scope.cur_lang = $translate.use();
}]);

ng-change 事件触发时会执行 控制器的 switching 方法. 此方法会接受下拉列表 option 传过来的参数值 (en 或者 cn ),然后执行 $translate.use(lang) 方法.此方法实现了在运行时切换语言的功能.

那 ng-model 到底实现了什么功能呢?这里的作用就是页面加载时下拉列表显示出当前默认使用的是哪种语言,就是定位select 默认项.

我们所有的准备环境都配置好了,下面开始介绍应用:

2.创建过滤器做Html 页面内容的国际化

2.1 方法1:我们在html页面中就可以这样调用国际化东西了。

<p>{{ '100001' | translate }}</p>
2.2 方法2( 过滤器):

我们先得额外准备一些东西:

在html页面里做国际化,首先想到做一个过滤器,在html页面使用起来是最方便的. /filters/ 目录下创建 T.js 过滤器

angular.module("myApp").filter("T", ['$translate', function($translate) {
    return function(key) {
        if(key){
            return $translate.instant(key);
        }
    };
}]);

过滤器使用起来非常简单方便,加入我们要在一个登录页面里,登录和注册链接需要我们做国际化.

<div ng-controller="LoginCtrl" >    
  

         <a ui-sref="app.login({})">{{'100001'|T}}          <a ui-sref="app.register({})">{{'100002'|T}}          

这样在不同的语言环境, angular.js 会加载不同的语言配置文件,根据翻译ID展示出来翻译值.

2.3 方法3(服务方式)

我们在javascript 脚本中使用国际化,当然有人说直接用过滤器来做,也是可以的,但是个人更喜欢创建一个服务,感觉使用起来简单方法。

我们在 /services/ 目录里创建 T.js 服务,内容如下:

angular.module('myApp').factory('T', ['$translate', function($translate) {
    var T = {
        T:function(key) {
            if(key){
                return $translate.instant(key);
            }
            return key;
        }
    }
    return T;
}]);

 服务T 返回了一个方法 T.下面我们样式一下如何在controller 里使用国际化.

假如登录的控制器 LoginCtrl.js 有一个登录标签需要做国际化:

angular.module('myApp').controller('LgoinCtrl', ['$scope','T',
    function($scope,T) {
        $scope.login_title=T.T(100001);
    }
]);

首先需要把 T 服务依赖注入到控制器,然后在需要国际化的地方直接调用 T 服务的 T 方法,传入翻译ID 返回 翻译值。

http://yijiebuyi.com/blog/3b55056c87b73ba606c19e9338dca679.html

http://www.cnblogs.com/bonelee/p/6874803.html

前端开发必备日期控件实战项目 在现代Web开发中,日期控件是用户界面中不可或缺的一部分,广泛应用于表单输入、数据筛选、日程管理等场景。它不仅提升了用户的操作体验,还有效减少了手动输入错误。早期的日期选择依赖于文本输入框,用户需手动输入格式,容易出错且不够友好。随着前端技术的发展,各种基于JavaScript的日期控件逐渐兴起,如jQuery UI Datepicker、Bootstrap Datetimepicker、Angular Material Datepicker等,它们提供了丰富的功能与良好的交互体验。 阅读详情

相关推荐

Angular4项目中添加i18n国际化插件ngx-translate的步骤详解

主要跟大家介绍了关于Angular4项目中添加i18n国际化插件ngx-translate的步骤,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。

angular-translate 的总结

angularJS 国际化模板 angular-translate简单方便翻译中英文等多语言环境

sinat_34798463的博客 1万+

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第一篇)安装调试

基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼调试 本文内容大部分来自Kris,我们的K大,在VTOL领域的大牛,在此,非常感谢K大。能引用K大的成果也是自己的荣幸,不便之处还请K大多多包涵,在此引用只是为方便自己日常学习,部分参数表里根据自身情况,增加了相应参数。 1.安装及下载Ardupilot官方固件: VTOL固件的来源可分为Ardupilot官方固...

u011322358的博客 3万+

国际化模块 angular-translate 简单方便快捷翻译中英文等多语言环境

  很多web服务面对的不仅仅是当地用户,多语言环境不仅能提升逼格,更重要是一种用户体验. angular.js 作为前后端拆分的解决方案之一,当然离不开前端框架处理国际化的问题,angular.js 官方出了一个模块 angular-translate 来解决多语言国际化问题. 我们前端采用 bower 包管理工具来管理依赖,点击链接查看bower 使用方法,这里不再详细说明. 今天和大家...

weixin_33717298的博客 537

从零开始:ENSP与VirtualBox的兼容性迷宫与突围指南

本文深入解析eNSP与VirtualBox的兼容性问题,特别是报错40的解决方案。从诊断根源、彻底卸载残留到推荐黄金版本组合,提供了一套完整的实战指南,帮助网络工程师和技术学习者快速解决AR_Base等设备的启动故障,优化虚拟化环境性能。

weixin_29284885的博客 476

从CPU视角看PCIe:深入理解x86/ARM平台上BAR、MMIO和PIO的地址翻译与访问机制

本文深入探讨了CPU如何通过BAR、MMIO和PIO机制访问PCIe设备的配置空间,详细解析了x86和ARM平台在地址翻译与访问路径上的差异。重点分析了PCIe配置空间中BAR寄存器的作用与探测机制,以及操作系统如何管理PCIe资源,为开发者提供了性能优化与调试的实用技巧。

weixin_30175731的博客 323

Angular 集成 translate (多语言国际化)

也可在此处, 获取网页默认语言, 将语言设置为当前网页语言, 还可以在登录后向后端索要用户储存的语言配置信息, 进而切换语言.

qq_45366359的博客 857

避开PFC设计大坑:从环路分析到参数整定的5个常见误区与解决方案

本文深入解析PFC电路设计中从环路分析到参数整定的5个常见误区,包括电感参数设计、小信号模型适用边界、电压环与电流环耦合效应等。通过实际案例和PSIM仿真数据,提供工程落地的解决方案,帮助工程师避开设计陷阱,提升电路性能与可靠性。

weixin_30666401的博客 325

使用AngularJS轻松实现多语言 - angular-translate

使用AngularJS轻松实现多语言 - angular-translate Angular-translate是一个专为AngularJS 1.x应用程序设计的JavaScript翻译库,它使得在你的应用中添加和管理多种语言变得极其简单。 项目介绍 这个项目由一个活跃的开发团队维护,并且拥有强大的社区支持。它旨在提供一种优雅的方式来处理多语言内容,无需复杂的后端或前端结构。无论你是新手还是经验...

gitblog_00076的博客 527

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 882

MT9V034摄像头学习笔记(一)_mt9v034摄像头循迹代码(1)

函数名称:uint8_t SCB_RegRead(uint8_t Device,uint8_t Address,uint16_t *Data)* 函数名称:uint8_t SCB_RegWrite(uint8 Device,uint8 Address,uint16 Data)* 函数名称:uint8 SCCB_SendByte(uint8 Data)* 函数名称:uint8 SCCB_ReadByte(void)* 修改时间:2018年3月4日。* 修改时间:2018年3月4日。

2401_87555661的博客 907

Angular国际化与本地化实战指南:利用 angular-localization

Angular国际化与本地化实战指南:利用 angular-localization 本指南旨在详尽地引导您了解并使用从 https://github.com/doshprompt/angular-localization.git 获取的开源项目,该库专注于实现Angular应用的多语言支持。接下来,我们将依次解析项目的关键组成部分:目录结构、启动文件以及配置文件。 1. 目录结构及介绍 Angu...

gitblog_00838的博客 398

【HAL库】STM32CubeMX开发----STM32F407----ETH+LAN8720A+LWIP----ping通

本次实验以芯片为MCU,使用25MHz外部时钟源。以太网PHY层芯片为LAN8720A,由MCU引脚PA8提供时钟。

MQ0522的博客 4843

Angular Timer国际化实战:支持16种语言的计时器实现

Angular Timer是一个可复用、可互操作的AngularJS计时器指令,通过简单的配置即可实现多语言支持,让你的应用轻松面向全球用户。本文将详细介绍如何利用Angular Timer的国际化功能,实现支持16种语言的计时器应用。 ## 为什么选择Angular Timer实现国际化 在全球化应用开发中,计时器作为常见组件需要适配不同语言环境。Angular Timer通过内置的国际化服

gitblog_01114的博客 878

基于自抗扰控制的虚拟同步发电机二次调频控制研究

摘要:本文针对高比例可再生能源并网导致的电力系统频率稳定性问题,提出基于自抗扰控制(ADRC)的虚拟同步发电机(VSG)二次调频控制策略。通过分析VSG工作原理和传统调频方法的不足,设计了非线性ADRC和线性ADRC两种控制器,详细阐述了参数整定方法。仿真结果表明,该策略能有效消除频率稳态偏差,提升系统抗扰能力,为分布式电源参与电网调频提供了新思路。 关键词:虚拟同步发电机;自抗扰控制;二次调频;频率调节;抗扰能力

huanghm88的专栏 243

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

攻克多语言难题:Angular国际化(i18n)实战指南

Angular是由Google开发和维护的现代前端JavaScript框架,其国际化(i18n)功能能够帮助开发者轻松构建支持多语言的企业级应用。本文将带您全面掌握Angular国际化的核心技术和最佳实践,从环境配置到高级应用,让您的应用轻松走向全球。 ## 为什么选择Angular国际化? 在全球化时代,为应用提供多语言支持已成为刚需。Angular的国际化解决方案基于`@angular/l

gitblog_00288的博客 397

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Angular-seed 国际化方案:i18n 配置与多语言支持实战指南 [特殊字符]

**Angular-seed** 是一个功能强大的 Angular 项目种子模板,它为开发者提供了完整的国际化(i18n)解决方案。无论你是要开发面向全球用户的应用程序,还是需要为不同地区的用户提供本地化体验,这个种子项目都能帮助你快速实现多语言支持!✨ ## 为什么选择 Angular-seed 进行国际化开发? Angular-seed 内置了官方的 Angular i18n 支持,这意味

gitblog_00624的博客 480

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Rust RFC 的 Prior art 章节:如何借助其他语言的经验与教训提升提案质量

> 本文以 rust-lang/rfcs 仓库中的 [text/2333-prior-art.md](https://link.gitcode.com/i/8209a7d5e915cdc95cb906cfdb1f3d72)(RFC 2333,Feature Name 为 `prior_art`,2018-02-12 提出)为骨架,完整还原这一 Meta-RFC 的设计动机、模板变更内容、权衡与备选

gitblog_00071的博客 834

NiceFish实战经验:10个常见Angular开发问题与解决方案

NiceFish(美人鱼)作为一款优秀的前后端分离Angular实战项目,为开发者提供了宝贵的学习资源。在前100个字的介绍中,我们首先要明确NiceFish项目的核心价值:这是一个基于Angular 16的完整前后端分离开发示范项目,涵盖了浏览器环境、移动端环境和Electron环境,后端支持SpringBoot和SpringCloud版本。对于Angular开发者来说,这个项目不仅展示了最佳实

gitblog_00378的博客 750

Angular-Samples完全指南:从入门到精通的15个核心组件实战

Angular-Samples 是一个专为Angular开发者设计的示例组件库,提供了15个精心设计的核心组件实战案例,帮助开发者快速掌握Angular开发技巧。无论您是Angular新手还是经验丰富的开发者,这个项目都能为您提供宝贵的实践参考和学习资源。 ## 🚀 为什么选择Angular-Samples? Angular作为目前最流行的前端框架之一,拥有强大的功能和丰富的生态系统。然而,

gitblog_00617的博客 436

前端国际化提速90%:fe-js-utils工具实战指南

前端国际化是现代化Web开发的必备能力,其核心在于将硬编码文案转化为可配置的多语言资源。通过AST语法树分析技术,fe-js-utils工具实现了中文文案的智能提取与自动化替换,大幅提升改造效率。该工具特别适合Vue、React等技术栈的历史项目改造,支持模块化语言包生成和公共文案去重等高级功能。在实际工程实践中,与i18n等国际化方案配合使用,可帮助团队将原本需要数周的工作压缩到1天内完成,同时保证98%以上的替换准确率。对于中大型前端项目而言,这种自动化解决方案能有效降低国际化改造成本。

weixin_34072296的博客 292

【AngularJS】第17节 Angular 国际化(i18n)

Angular 国际化(i18n)摘要 Angular国际化(i18n)是为应用提供多语言支持的关键功能。主要内容包括: 标记翻译内容:使用i18n属性标记模板中需要翻译的文本 生成翻译文件:通过CLI命令ng extract-i18n提取XLIFF格式的翻译文件 多语言配置:在angular.json中配置不同语言版本,构建独立的应用包 本地化处理: 使用DatePipe和CurrencyPipe格式化日期/货币 通过registerLocaleData设置区域信息 工作流程:标记→提取→翻译→配置→构建

silverclayz的技术分享 1485

angular i18n_如何在Angular中使用国际化(i18n)

angular i18nThe consumption of modern web and mobile experiences is a worldwide thing. It isn’t just related to the locals around you and the surrounding culture. Therefore, just as you’d ensure that ...

2053

Angular Calendar 国际化最佳实践:多语言日期格式与本地化支持指南

Angular Calendar 是一款灵活的日历组件,支持 Angular 20.2+ 版本,可在月、周或日视图中显示事件。本文将详细介绍如何实现 Angular Calendar 的国际化配置,包括多语言日期格式设置、本地化支持以及区域设置切换等核心功能,帮助开发者轻松构建支持全球用户的日历应用。 ## 国际化核心组件与接口 Angular Calendar 的国际化功能主要依赖于日期格式

gitblog_00688的博客 804

angular做语言切换_angular多语言配置详解

angular的国际化方案,采用ngx-translate来实现。安装模块:npm install @ngx-translate/core --save在根模块中导入:// other moduleimport {TranslateModule} from '@ngx-translate/core';@NgModule({declarations: [AppComponent,],imports:...

weixin_33365844的博客 787

Angular2中使用ngx-translate进行国际化

Angular2中使用ngx-translate进行国际化 https://blog.youkuaiyun.com/u014291497/article/details/61233033

神zhi殇的博客 386
上一篇: angularjs --图形验证码 刷新的 解决
下一篇: Spring MVC和Struts2的比较的优点
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值