实现网站国际化

news/2024/5/20 10:36:35/文章来源:https://blog.csdn.net/weixin_30897233/article/details/94911809

插件:i18n
项目管理工具:grunt
需安装: grunt 和properties-reader(i18n运行依赖)
  1. 在根目录下新建i18n文件夹,然后把i18n-parsers.coffee和i18n.coffee放在该文件夹(两文件在笔记最后)
  2. 在js下面放**.json(不同语言的资源文件)
  3. 新建grunt任务:
     i18n: {custom_parser: {src: ['src/**/*.html'],options: {locales: 'src/js/**/*.json',output: 'tmp/'}},options: { base: 'src' }}  
  4. 注册该任务:grunt.registerTask('dev', [ ‘i18n’])
  5. 运行: grunt dev
  6. 就会在tem目录下生成不同语言版本的文件夹
7.实现根据浏览器默认语言环境来加载不同的地址,在页面上也可以切换不同语言:解决方法,设置cookie.代码如下:
if (!getCookie('chuan')) {setCookie('chuan', 'cunzai');var type = navigator.appName,lang;if (type == "Netscape") {lang = navigator.language;} else {lang = navigator.userLanguage;}lang = lang.substr(0, 2); //取得浏览器语言的前两个字母if (lang == "en") {  // 英语window.location.href = envUrl+"en/index.html";}else if (lang == "zh") {  // 中文 - 不分繁体和简体window.location.href = envUrl+"index.html";}else { // 除上面所列的语言window.location.href = envUrl + "index.html";}}
//设置cookiefunction setCookie(c_name, value, expiredays) {var exdate = new Date();exdate.setDate(exdate.getDate() + expiredays);document.cookie = c_name + "=" + escape(value) + ((!expiredays) ? "" : ";expires=" + exdate.toGMTString());}
//获取cookiefunction getCookie(c_name) {if (document.cookie.length > 0) {var c_start = document.cookie.indexOf(c_name + "=");if (c_start != -1) {c_start = c_start + c_name.length + 1;var c_end = document.cookie.indexOf(";", c_start);if (c_end == -1)c_end = document.cookie.length;return unescape(document.cookie.substring(c_start, c_end));}}return "";} 

8.   i18n-parsers.coffee

//i18n-parsers.coffee
fs = require 'fs'
path = require 'path'
PropertiesReader = require 'properties-reader'class BaseParserconstructor: (@grunt) ->resolveLocale: (localePath) ->path.basename localePath, path.extname localePathclass JsonParser extends BaseParsername: 'json'readLocaleData: (localePath) ->@grunt.file.readJSON localePath"""
Locales from Transifex have one property to name the particular locale, with the
translations all below that. E.G. { "en": {"message": "Hello, world!"} }
"""
class TransifexParser extends JsonParsername: 'transifex'readLocaleData: (localePath) ->data = superkeys = Object.keys dataif keys.length is 1 and typeof data[keys[0]] is 'object'data[keys[0]]elsedataclass YamlParser extends BaseParsername: 'yaml'readLocaleData: (localePath) ->@grunt.file.readYAML localePathclass PropertiesParser extends BaseParsername: 'properties'resolveLocale: (localePath) ->(path.extname localePath).substring 1readLocaleData: (localePath) ->PropertiesReader(localePath).path()module.exports = (grunt) ->jsonParser = new JsonParser(grunt)transifexParser = new TransifexParser(grunt)yamlParser = new YamlParser(grunt)propertiesParser = new PropertiesParser(grunt)result = {}result[jsonParser.name] = jsonParserresult[transifexParser.name] = transifexParserresult[yamlParser.name] = yamlParserresult[propertiesParser.name] = propertiesParserresult

9.    i18n.coffee

// i18n.coffee
parsers = require './i18n-parsers'module.exports = (grunt) ->grunt.registerMultiTask 'i18n', 'Localize Grunt templates', ->options = @optionslocales: []output: '.'base: ''format: 'json'grunt.verbose.writeflags options, 'Options'parser = if options.parser then options.parser else parsers(grunt)[options.format]for templatePath in @filesSrcif grunt.file.isFile templatePathlocalePaths = grunt.file.expand options.localesfor localePath in localePathslocale = parser.resolveLocale localePathoutputPath = generateOutputPath templatePath, locale, optionslocaleData = parser.readLocaleData localePathtemplate = translateTemplate templatePath, localeData, optionsgrunt.verbose.writeln "Translating '#{templatePath}' with locale '#{localePath}' to '#{outputPath}'."grunt.file.write outputPath, templatetranslateTemplate = (templatePath, localeData, options) ->template = grunt.file.read templatePathtemplateOptions =data: localeDatatemplateOptions.delimiters = options.delimiters if options.delimitersgrunt.template.process template, templateOptionsgenerateOutputPath = (templatePath, locale, options) ->filePath = templatePath.slice options.base.length if grunt.util._.startsWith templatePath, options.basetrimmedFilePath = grunt.util._.trim filePath, '/'[options.output, locale, trimmedFilePath].join '/'return @

  

转载于:https://www.cnblogs.com/lhy-93/p/5817937.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_766999.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化网站教程:最流行的搭建工具及必学的7个功能

摘 要 记得刚进大学的时候,一位教授说大学里有十件必学的事情,其中有一件是:学会做网站。无论你是学什么的,像数据可视化,演示简历、作品或产品,都需要前端的知识。虽然目前有各种前端语言,像V…

网站变更服务器要重新备案吗,网站更换服务器要重新备案吗

网站更换服务器要重新备案吗 内容精选换一换Joomla是一套全球知名的内容管理系统,即Joomla CMS(Content Management System)。Joomla是使用PHP语言加上Mysql数据开发的软件系统,是网站的一个基础管理平台,适合从个人网站到各种企业网站、分类…

电脑配置太低?使用这几个网站,你的电脑软件要少装一半!

你还在为你的电脑配置太低导致软件过多而卡顿感到烦恼?还是电脑游戏太多,无法运行一些其他软件而不开心?其实不用难过,小编教你们使用一些在线网站,可以轻松的将你的电脑上的软件少安装一半!你们准备好了吗…

statuml怎么添加用户_网站推广好怎么样的?来看看以下指引

网站推广好怎么样的?很多人刚开始接触推广,心里会有这么一个疑问,怎么做才可以?不会做怎么办?网站推广并不是单单做了一个网站,最理想化往往跟现实差别很大,找对方法不迷路,我这边给…

php网站栏目隐藏,zblogphp代码:首页不显示指定分类ID栏目的文章(可隐藏多个分类)...

有的时候,我们并不想要某个分类栏目的文章显示在zblogphp首页的中,也就是说,我们可以让某一个或多个分类ID下的文章隐藏不显示在网站首页中,操作方法如下:第一种:判断分类方式此方法可以通过指定分类ID或分…

php301内页重定向,通过修改.htaccess批量实现网站内页301重定向跳转

本文主要介绍如何通过正则表达式实现批量内页跳转。在写之前我们先来认识几个简单的符号所代表的含义1、(.) 代表任意字符(包括汉字、英文字母等)2、(\d)代表是任意数字(仅仅是阿拉伯数字)3、$1、 $2 、$3 、$4表示的是对前面出现的变量的引用(你理解这个意思就行了)一、简单的…

linux系统服务部分,linux系统由哪几部分组成_网站服务器运行维护

笔记本如何禁用自带键盘_网站服务器运行维护笔记本禁用自带键盘的方法:1、首先右键点击【计算机】,选择【属性】;2、然后打开【设备管理器】,右键点击【PS/2标准键盘】,选择【更新驱动程序软件】;3、最后安…

Flask项目之手机端租房网站的实战开发(五)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 接着上一篇博客继续往下写 :https://blog.csdn.net/qq_41782425/article/details/85706012 目录 一丶图片验证码前端编写 二丶短信验证码…

服务器配置iis,php网站

1.在iis中选择物理路径。配置域名 2.添加php默认文档 3.修改处理程序映射 4.设置模块映射信息 转载于:https://www.cnblogs.com/zhangyouwu/p/10277174.html

linux boost内存池,Boost内存池的分类 - 开源C++函数库Boost内存池使用与测试_Linux编程_Linux公社-Linux系统门户网站...

4. Boost内存池的分类Boost内存池按照不同的理念分为四类。主要是两种理念的不同造成了这样的分类。一是Object Usage和Singleton Usage的不同。Object Usage意味着每个内存池都是一个可以创建和销毁的对象,一旦内存池被销毁则其所分配的所有内存都会被释放。Single…

黑科技网站

1:PDF派 https://www.pdfpai.com/(20个好用的PDF在线工具,完全免费!) PDF派 是一个完全免费的网站,非常良心实用。 把PDF转换成Office,iWork,图片等其他格式 把Office文件或图片…

网站加载 Waiting (TTFB) 时间过长的原因和解决办法

关注网页前端性能的朋友,在优化网页性能的时候都会遇到网站加载 Waiting(TTFB)时间过长的问题。对于没有优化过的 WordPress 站点,TTFB 时间经常超过了页面内容的下载时间,为用户带来不必要的等待时间。这个问题的主要…

linux ipv4 keepalive,性能优化策略 - RHEL 4 性能优化详述_Linux教程_Linux公社-Linux系统门户网站...

RHEL 4 性能优化详述性能优化策略[日期:2007-08-22]来源:Linux公社作者:Linuxidc[字体:大 中 小]七、性能优化策略7.1 基本优化1) 关闭后台守护进程系统安装完后,系统会默认启动一些后台守护进程,有些…

未备案服务器有影响吗,未备案的服务器对网站seo有影响吗?

原标题:未备案的服务器对网站seo有影响吗?在早期的SEO工作中,我们经常在国内选择一些特殊线路,可以有效的避免网站备案所带来的麻烦,但随着近几年,ICP备案审查越发严格,导致在中国大陆上线的网站…

php网站套模板教程,PTCMS小说网站全新版源码+内附4套精美模板+教程

源码介绍:最新PTCMS小说精美多风格四套全新版源码模板内附详细的安装教程,亲测完美搭建。安装教程安装宝塔面板一键安装环境宝塔:www.bt.cn必装环境:nginx(apache.iis也可),mysql,php5.6,memcached1.上传网站文件到网站…

worepress使用相对路径访问网站

在wp-config.php写入以下语句: define(WP_HOME, /); define(WP_SITEURL, /);这样在设置中的URL会显示空白,这就是使用了相对路径,不然的话难以兼容http和https协议。

网站空间与服务器的区别,网站空间与服务器的区别

网站空间与服务器的区别 内容精选换一换服务器迁移通常有三种手段:全新部署业务、主机迁移服务、镜像迁移,如表1所示。对于华为云上云服务器的跨帐号跨区域迁移,建议采用镜像迁移方式。跨帐号跨区域迁移云服务器的方案为:帐号A将区…

希望大家关注我的微信公众号以及个人网站

欢迎大家关注我的公众账号: 从oracle到mysql 以及个人网站: http://www.10xdba.com

bpcs uploader.php,利用百度云盘进行网站备份

最近想到一个网站备份的问题,就是如何利用百度云盘进行备份,于是百度一下,发现bpcs_uploader的一个程序可以实现这个功能github下载地址: https://github.com/oott123/bpcs_uploader①应用授权修改执行权限chmod x bpcs_uploader.php查看php安…

SpringCloud-分布式配置中心【入门介绍】,linux技术网站

二、 编写配置中心入门案例 1.编写配置中心的服务端 1.1 创建服务端项目 创建一个SpringCloud项目。 1.2 修改pom文件 我们需要添加config-server的依赖&#xff0c;具体如下 <project xmlns“http://maven.apache.org/POM/4.0.0” xmlns:xsi“http://www.w3.org/2001/XM…