国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解基于webpack&gettext的前端多語言方案

2024-05-06 15:42:45
字體:
來源:轉載
供稿:網友

gettext 是GNU 提供的一套 國際化與本地化 處理的相關函數庫。大多數語言都有對應的gettext實現。本文主要使用jed 來實現gettext 一系列方法對應的功能。

pot/po文件

pot文件 是po文件的模板文件,一般是通過 xgettext 程序生成出來的。 po文件 是根據pot文件通過msginit程序,設置對應的國家語言生成用于填寫實際翻譯內容的文件。

xgettext/msginit/msgmerge

xgettext 程序可以掃描指定的代碼文件,取出其中gettext部分的內容生成對應的pot文件。 msginit 根據對應的pot文件生成對應語言版本用于實際翻譯的po文件。 msgmerge 如果對應語言版本的po文件存在的話,則需要使用msgmerge方式把pot文件中新加入的一些msgid合并到po文件當中。

多語言支持流程

安裝gettext

brew install gettextbrew link gettext

langs-loader 加載語言文件

安裝
npm install git@github.com:ezbuy/langs-loader.git --save-dev
配置

需要修改webpack.config.js文件在module->rules(webpack 2.0)下面添加loader規則:

{  test: //.pot$/i,  use: [    "json",    {      loader: 'langs',      options: {isLoadAll: isDev,format:"jed1.x", "fallback-to-msgid":true, code:langCode}    }  ]}
isLoadAll

isLoadAll表示會把所有語言版本的文件通過po2json轉換成json,然后組合成一個json作為數據傳給引用的地方。

code

code選項一般需要在代碼發布時指定,不同語言版本打包時通過傳入不同的code區分不同語言版本的代碼打包。

代碼中使用gettext系列函數

各端開發時使用各自實現的gettext方法去包裝需要實現多語言的文案。使用gettext函數包裝后, langs-util 就能知道代碼中有需要多語言翻譯的地方,并可以通過 langs-util 生成相關的pot及po文件。gettext方法底層我們使用jed 來實現其對應功能。

import toi18n from "common/i18n";const _ = toi18n(require("langs/index.pot"));const hiStr = _.gettext("Hi!");const num = Math.ceil(Math.random() * 2);const numStr = _.ngettext("item", "items", num);// I like your red shirt.console.log(_.sprintf( "I like your %1$s %2$s.", 'red', 'shirt'));
gettext

一般使用 gettext 方法包裝一個需要翻譯的字符串。

ngettext

可以用于單復數處理,第一個參數傳入單數情況下的翻譯,第二個參數傳入復數情況下的翻譯,第三個傳入實際需要執行判斷的數據。

sprintf

Jed內置提供了sprintf的支持,它是使用javascript-sprintf的sprintf函數的實現。

通過gettext 一系列函數的配合,使用 langs-util 進行生成處理后就能生成對應的pot及po文件。

langs-util gen -i src/
# langs/index.potmsgid "Hi!"msgstr ""msgid "item"msgid_plural "items"msgstr[0] ""msgstr[1] ""            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 呼图壁县| 阳山县| 林芝县| 涞源县| 潞城市| 丰镇市| 石泉县| 棋牌| 大名县| 甘孜| 博乐市| 建平县| 长子县| 深水埗区| 石泉县| 临清市| 徐州市| 波密县| 泰来县| 宾阳县| 黑河市| 吴川市| 师宗县| 交城县| 正镶白旗| 南丹县| 新建县| 湘潭县| 孝昌县| 平舆县| 宿迁市| 旬阳县| 浦县| 都兰县| 石泉县| 邯郸县| 台湾省| 广东省| 休宁县| 克东县| 攀枝花市|