摘要:在寫一個(gè)的過(guò)程中難免會(huì)遇到要做國(guó)際化的時(shí)候也就是需要根據(jù)不同的地區(qū)展示不同的文案對(duì)于簡(jiǎn)單的文本直接用一個(gè)或者或者一個(gè)變量就能搞定但是有時(shí)候需要在一句話中加入變量就比較麻煩或者說(shuō)比較惡心了比如這樣的情況有個(gè)人喜歡了你應(yīng)運(yùn)而生其作用是將模板
在寫一個(gè)APP的過(guò)程中, 難免會(huì)遇到要做國(guó)際化的時(shí)候. 也就是需要根據(jù)不同的地區(qū), 展示不同的文案. 對(duì)于簡(jiǎn)單的文本, 直接用一個(gè)xml或者json或者一個(gè)變量就能搞定, 但是有時(shí)候需要在一句話中加入變量, 就比較麻煩或者說(shuō)比較惡心了. 比如這樣的情況:
cn: 有xx個(gè)人喜歡了你. en: xx People liked you.
i18n-json-compiler應(yīng)運(yùn)而生, 其作用是將json模板編譯成TypeScript(或者JavaScript)函數(shù)或者字符串.
比如對(duì)以下json:
[ { "cn": "你好", "en": "Hello" }, { "cn": "{n}個(gè)好友", "en": "{n} friends" }, ]
可以直接編譯出ts文件, 內(nèi)容大致如下:
export const cn = { Hello: "你好", n_friends: (n: any) => n + "個(gè)好友", } export const en = { Hello: "Hello", n_friends: (n: any) => n + " friends", }
在代碼中直接調(diào)用相應(yīng)的屬性或函數(shù)即可.
安裝yarn add i18n-json-compiler # 或者使用npm/cnpm npm i -S i18n-json-compiler使用
在命令行中, 執(zhí)行./node_modules/.bin/i18n, 參數(shù)如下:
i18n [options] - Parse i18n json files to typescript files. Options: -i, --input-files The json files to parse [string] [required] -o, --output-dir The directory to emit output [string] [required] -h, --help Show help [boolean] -v, --version Show version number [boolean] --default-lang [string] [default: "cn"]JSON文檔的格式
i18n命令接受參數(shù)-i指定輸入文件列表(glob), 比如./strings/*.json, 文件格式為json, 內(nèi)容為一個(gè)數(shù)組. 每個(gè)數(shù)組元素為一組需要編譯的字符串. key為語(yǔ)言, value為值. 值中被{}包起來(lái)的地方會(huì)被轉(zhuǎn)換為函數(shù)參數(shù), 其格式為{name:type:default}, 其中:
name是必需的, 可以是字符串或數(shù)字
type為數(shù)據(jù)類型, 可以是int, double, string, boolean, any, 默認(rèn)為any, 即接受任意參數(shù)
default為參數(shù)默認(rèn)值
比如:
[ { "cn": "{n:int:1}個(gè)人喜歡了你", "en": "{n}people liked you" } ]
得出的結(jié)果為:
const n_people_liked_you = (n: int = 1) => n + "個(gè)人喜歡了你"輸出格式
i18n接受參數(shù)-o指定輸出目錄, 輸入目錄中, 包括一個(gè)index.ts文件, 以及若干語(yǔ)言文件夾, 其中index.ts為所用到的文件, 其導(dǎo)出一個(gè)變量strings, 結(jié)構(gòu)如下:
export interface I18n例子{ // 設(shè)置語(yǔ)言 set(lang: string, defaultLang?: L): void; // 獲取語(yǔ)言下的字符串對(duì)象 get(lang: string, defaultLang?: L): T; // 當(dāng)前語(yǔ)言 lang: L; // 當(dāng)前語(yǔ)言的字符串結(jié)構(gòu) value: T; }
參考https://github.com/acrazing/i..., 其中input為輸入目錄, output為輸出目錄. 在代碼中, 只需要:
import { strings } from "./output/index.ts" console.log(strings.value.world.$0_people_liked_you(1))TODO
編譯成js
不同語(yǔ)言參數(shù)位置不同
指定名稱key
更多內(nèi)容, 請(qǐng)穩(wěn)步 https://github.com/acrazing/i...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/92828.html
摘要:的網(wǎng)站仍然使用有漏洞庫(kù)上周發(fā)布了開(kāi)源社區(qū)安全現(xiàn)狀報(bào)告,發(fā)現(xiàn)隨著開(kāi)源社區(qū)的日漸活躍,開(kāi)源代碼中包含的安全漏洞以及影響的范圍也在不斷擴(kuò)大。與應(yīng)用安全是流行的服務(wù)端框架,本文即是介紹如何使用以及其他的框架來(lái)增強(qiáng)應(yīng)用的安全性。 showImg(https://segmentfault.com/img/remote/1460000012181337?w=1240&h=826); 前端每周清單專注...
摘要:附錄查看所有文檔頁(yè)面全棧開(kāi)發(fā),獲取更多信息。常用用于修改行為定義環(huán)境變量,在區(qū)分環(huán)境中有介紹。開(kāi)啟功能,在開(kāi)啟中有介紹。借鑒的思想大幅度提升構(gòu)建速度,在使用中有介紹。集成到項(xiàng)目中,在檢查代碼中有介紹。 Webpack附錄 查看所有文檔頁(yè)面:全棧開(kāi)發(fā),獲取更多信息。原文鏈接:webpack原理,原文廣告模態(tài)框遮擋,閱讀體驗(yàn)不好,所以整理成本文,方便查找。 常用 Loaders 加載文件 ...
摘要:本國(guó)際化方案僅針對(duì)技術(shù)棧,且不會(huì)涉及服務(wù)端國(guó)際化內(nèi)容。引入多語(yǔ)言環(huán)境的數(shù)據(jù)雖然我只用到了文本翻譯的功能,以為就不需要加載這些數(shù)據(jù),但后來(lái)發(fā)現(xiàn)這是必須的步驟。 前言 最近新接了一個(gè)項(xiàng)目,從0開(kāi)始做,需要做多語(yǔ)言的國(guó)際化,今天搞了一下,基本達(dá)到了想要的效果, 在這里簡(jiǎn)單分享下: showImg(https://segmentfault.com/img/bVbuiJB); 背景國(guó)際化方案國(guó)際...
摘要:本國(guó)際化方案僅針對(duì)技術(shù)棧,且不會(huì)涉及服務(wù)端國(guó)際化內(nèi)容。引入多語(yǔ)言環(huán)境的數(shù)據(jù)雖然我只用到了文本翻譯的功能,以為就不需要加載這些數(shù)據(jù),但后來(lái)發(fā)現(xiàn)這是必須的步驟。 前言 最近新接了一個(gè)項(xiàng)目,從0開(kāi)始做,需要做多語(yǔ)言的國(guó)際化,今天搞了一下,基本達(dá)到了想要的效果, 在這里簡(jiǎn)單分享下: showImg(https://segmentfault.com/img/bVbuiJB); 背景國(guó)際化方案國(guó)際...
閱讀 2900·2021-11-18 10:02
閱讀 3773·2021-11-15 17:59
閱讀 2374·2021-09-06 15:00
閱讀 3409·2019-08-29 16:58
閱讀 1130·2019-08-26 10:34
閱讀 1656·2019-08-26 10:15
閱讀 1363·2019-08-26 10:11
閱讀 2792·2019-08-23 18:33