国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

又是一種用于JavaScript的前端國際化方案

開發 前端
然 HTML 模板里的國際化是解決了,但是整個應用中需要國際化的地方可不止 HTML 模板,同時還有 JavaScript(一些驗證的提示文本)。但是靜態的腳本文件中總不能內嵌 PHP 吧,所以我們得搞個單獨的解決方案。雖然說網上現成的 JS 國際化的庫很多,但我總覺得有些看不上眼(可能是我沒找到好的),就準備自己實現一下。

[[171767]]

現在 Blessing Skin Server 的 HTML 模板是使用 Laravel 自帶的本地化來實現多語言支持的,并且使用了 devitek/yaml-translation 這個包把 Laravel 語言文件從默認的 PHP 數組形式改為 YAML 格式的文件。

不得不說數組形式的語言文件簡直反人類好嗎,一大堆 => 看的眼暈。。YAML 大法好!(ゝ∀・)

回到正題。雖然 HTML 模板里的國際化是解決了,但是整個應用中需要國際化的地方可不止 HTML 模板,同時還有 JavaScript(一些驗證的提示文本)。但是靜態的腳本文件中總不能內嵌 PHP 吧,所以我們得搞個單獨的解決方案。

雖然說網上現成的 JS 國際化的庫很多,但我總覺得有些看不上眼(可能是我沒找到好的),就準備自己實現一下。

首先我們需要一個全局變量來保存從語言文件里讀出來的東西:

  1. // 保存所有加載的語言文件 
  2. $.locales = {}; 
  3. // 當前選擇的語言翻譯文件 
  4. var locale = {};  

這里我們把 locales 這個字典綁到了 jQuery 定義的全局變量 $ 上,這也就意味著要依賴 jQuery 了。當然你不綁在 $ 上也是一點關系也沒有的,因為我們下面并不需要用到 jQuery。

現在我們就可以在語言文件中這樣寫了:

  1. (function ($) { 
  2.     "use strict"
  3.  
  4.     $.locales['zh-CN'] = { 
  5.         auth: { 
  6.             login: '登錄'
  7.             validation: { 
  8.                 emptyPassword: '密碼要好好填哦' 
  9.             } 
  10.         }, 
  11.         user: { 
  12.             changeNickName: '確定要將昵稱設置為 :new_nickname 嗎?' 
  13.         }, 
  14.         general: { 
  15.             confirm: '確定'
  16.             cancel: '取消' 
  17.         } 
  18.     }; 
  19. })(window.jQuery);  

如果你不準備依賴于 $ 這個變量,就把閉包的作用域和里面的變量名改一下??傊褪潜WC它可以被全局地訪問到就好。

因為我們可能會加載多個含有語言文件的 locale.js 文件,所以我們需要判斷一下當前語言,然后把對應的語言字典加載到上面定義的 locale 變量中:

  1. function loadLocales() { 
  2.     for (lang in $.locales) { 
  3.         // 這里你可以進行進一步的加載判斷 
  4.         if (!isEmpty($.locales[lang])) { 
  5.             locale = $.locales[lang] || {}; 
  6.         } 
  7.     } 

 上面用到的那個 isEmpty 函數可以看這里:@Gist。然后我們就可以定義用于把 key 翻譯成具體語言的翻譯函數啦: 

  1. function trans(key, parameters) { 
  2.     if (isEmpty(locale)) { 
  3.         // 載入當前所選的語言至全局變量 
  4.         loadLocales(); 
  5.     } 
  6.  
  7.     parameters = parameters || {}; 
  8.  
  9.     var segments = key.split('.'); 
  10.     var temp = locale || {}; 
  11.  
  12.     for (i in segments) { 
  13.         if (isEmpty(temp[segments[i]])) { 
  14.             // 如果該項不存在,則原樣返回 key 
  15.             return key
  16.         } else { 
  17.             temp = temp[segments[i]]; 
  18.         } 
  19.     } 
  20.  
  21.     for (i in parameters) { 
  22.         if (!isEmpty(parameters[i])) { 
  23.             // 替換語言字符串中的占位符 
  24.             temp = temp.replace(':'+i, parameters[i]); 
  25.         } 
  26.     } 
  27.  
  28.     return temp
  29.  

這里可以看到這個函數接受兩個參數,key 和 parameters。key 就是用于翻譯的鍵值了,并且我們可以傳一個 dict 作為參數來替換語言字符串中的占位符。

而且在 key 的處理中,我們解析了類似于 auth.login 這樣的 key,并且是可以無限嵌套下去的。是不是感覺挺熟悉的?沒錯,就是 Laravel 翻譯器也在使用的「點」語法 ( ゚ 3゚) 我是覺得蠻不錯的就搬過來了(笑

現在我們在加載完語言文件后就可以使用這個函數來實現前端國際化啦: 

  1. trans('auth.validation.emptyPassword'); 
  2. // 返回 "密碼要好好填哦" 
  3. trans('user.changeNickName', { new_nickname: 'FUCK' }); 
  4. // 返回 "確定要將昵稱設置為 FUCK 嗎?" 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2019-07-29 14:03:07

JavaScriptweb網絡

2024-01-17 10:16:22

前端國際化消息鍵

2023-01-31 10:29:26

JavaScript國際化國際化庫

2015-03-13 09:50:46

2014-12-01 09:54:40

JavaScript

2024-04-03 13:27:28

Next.js擴展項目

2011-05-17 09:39:38

JavaSE

2011-08-29 09:48:30

springMVC

2023-04-07 15:12:46

ReactReact-Intl

2011-07-08 11:13:42

Cocoa Touch XCode

2010-03-02 16:44:59

CentOS Mono

2010-07-28 14:52:29

Flex國際化

2024-05-17 08:25:06

數據驅動React語言包

2022-07-13 11:49:18

接口遷移方案

2024-03-26 09:23:22

自動駕駛軌跡

2010-01-04 13:09:51

Silverlight

2011-08-19 13:13:14

struts2Java

2009-06-25 16:04:30

2022-05-12 11:08:31

PHPJava開發

2009-06-03 08:30:30

禚佳春法航華為
點贊
收藏

51CTO技術棧公眾號

一本色道久久综合狠狠躁篇怎么玩 | 免费看污污网站| 成人超碰在线| 久久精品国产福利| 免费视频一区二区三区在线观看| 亚洲一区在线观看网站| 欧美孕妇性xx| 欧美三级理论片| 国产高清日韩| 懂色av一区二区在线播放| 7777精品伊人久久久大香线蕉| 亚洲aⅴ日韩av电影在线观看| 三级黄色网址| 校花撩起jk露出白色内裤国产精品| 中文字幕av一区二区三区高| 欧美激情一级二级| 亚洲精品tv久久久久久久久| 成av人片在线观看www| 亚洲黄页一区| 亚洲精品国偷自产在线99热 | 国产成人综合亚洲| 亚洲一区二区三区精品在线观看| 丁香花在线观看完整版电影| 国产精品嫩草99av在线| 久久国产精品偷| 中日韩免费毛片| 免费黄网站欧美| 97成人超碰免| 色资源网站在线观看| 亚洲3区在线| 韩国欧美国产1区| 日韩免费av片在线观看| 碰碰在线视频| 亚洲精品免费在线播放| 欧美日韩综合精品| 99精品国产在热久久下载| 亚洲欧美日韩中文在线| 日本三级视频在线观看| 久久成人综合网| 日本视频久久久| 免费a级人成a大片在线观看| 女人喷潮完整视频| 国产精品99久久久久久董美香 | 亚洲成人影院在线观看| 久久精品亚洲国产| 少妇精品久久久| 亚洲欧美国产精品久久久久久久 | 欧美一级中文字幕| 欧美一区二区三区红桃小说| 国产精品18久久久久久麻辣| 成人精品小视频| 欧美日韩一区二区在线观看视频 | 91麻豆精品91久久久久同性| 国产青春久久久国产毛片 | 久久久女人电视剧免费播放下载| 97人人模人人爽人人喊38tv| 久久久久久久一区| 欧美激情五月| 六九午夜精品视频| 午夜啪啪福利视频| 国产一区二区在线影院| 中文字幕国产亚洲| 91老师片黄在线观看| 久久久pmvav| 亚洲宅男天堂在线观看无病毒| 少妇高清精品毛片在线视频| 91看片淫黄大片91| 国产中文字幕在线看| 国产 国语对白 露脸| 亚洲精品国产一区| 天堂av中文在线资源库| 精品国产乱码久久久久久婷婷| 久久久久久久久电影| 性综艺节目av在线播放| 中文字幕不卡在线| 国产欧美日韩中文| 在线观看爽视频| 制服.丝袜.亚洲.中文.综合| 中文字幕在线中文字幕二区| 成人蜜臀av电影| 日本一区二区三区在线播放| 中文字幕亚洲精品视频| 亚洲黄色精品| 成人性教育视频在线观看| 全国精品免费看| 国语对白做受69| 在线视频cao| 日韩免费电影一区| 国模雨婷捆绑高清在线| 5858s免费视频成人| 8888四色奇米在线观看| 夜色激情一区二区| 日韩欧美国产片| 国产精品网站导航| www.激情小说.com| 中文字幕乱码亚洲精品一区| 日韩久久一级片| 久久午夜电影网| 欧美激情精品久久久久久蜜臀| 黄网站免费在线观看| 欧美精品一区二| 唐人社导航福利精品| 日韩亚洲欧美在线观看| 日韩免费在线观看av| 一区精品久久| 中文一区二区| 日韩成人性视频| caoporn免费在线| 日韩欧美国产电影| 僵尸再翻生在线观看| 亚洲精品一区二区三区不| 毛片无码国产| 欧美激情精品久久久久久久变态| 疯狂欧洲av久久成人av电影| 日韩国产在线一| 亚洲性生活视频在线观看| 亚亚洲欧洲精品| 亚洲精品成人a在线观看| h动漫在线视频| 欧美日韩国产天堂| 亚洲精品粉嫩美女一区| 超在线视频97| 日韩a一区二区| 国内一区二区在线视频观看| 日本伊人色综合网| 欧美日韩在线免费播放| 亚洲精品美腿丝袜| 在线免费观看的av| 在线观看日韩电影| 国产盗摄一区二区| 久久精品国产综合| 国产精品99视频| 女同一区二区| 97久久超碰精品国产| 国产精品四虎| 永久免费看mv网站入口亚洲| 亚洲人成伊人成综合图片| 精品免费日产一区一区三区免费| 精品一区二区三区免费观看| 天堂av一区二区| 丝袜亚洲另类欧美| 青青草原成人| 亚洲国产精品ⅴa在线观看| 国产日本一区二区三区| 国产日韩欧美高清免费| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 51精品久久久久久久蜜臀| 黄色精品视频| 国产综合视频在线观看| 国产在线播精品第三| 国内外成人免费在线视频| 欧美一区二区三区婷婷月色| а√天堂8资源中文在线| 国产精品传媒精东影业在线| 97碰碰视频| 麻豆精品网站| 日本wwwcom| 成人精品一区二区三区中文字幕| 国产女主播自拍| 色婷婷综合久色| 亚洲国产一区二区久久| 久久久福利视频| 亚洲人成小说网站色在线 | 伦伦影院午夜日韩欧美限制| 日韩精品首页| 国产xxxxx视频| 亚洲国产精品推荐| 欧美私人啪啪vps| 四虎最新网站| 中文字幕国产亚洲2019| 亚洲欧美卡通另类91av| 五丁香在线视频| 5566成人精品视频免费| 久久精品一区二区三区不卡牛牛 | 国产欧美日韩亚洲一区二区三区| 亚洲精品一二三四五区| 亚洲国产日韩一区| 日韩中文一区二区| 91免费精品视频| 另类中文字幕网| 8×8x拔擦拔擦在线视频网站| gogogogo高清视频在线| 99精品视频一区二区| 成年人在线观看网站| 欧美成人sm免费视频| 精品一区二区在线视频| 九色视频网站在线观看| 国产麻豆日韩| 播播国产欧美激情| 成人激情文学综合网| 日韩电影大全网站| 97超碰在线人人| 日韩国产高清视频在线| 中文字幕人成不卡一区| 神马久久一区二区三区| 在线观看一级片| 福利网在线观看| 久久精品电影网站| 久久精选视频| 在线你懂的视频|