成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

前端國(guó)際化的另類方式

everfight / 3353人閱讀

摘要:前不久做了一個(gè)國(guó)際化的項(xiàng)目,基于和,里面用到了國(guó)際化,使用方式也很簡(jiǎn)單然后,頁(yè)面所有的官方組件都變成了中文默認(rèn)是英文。前端配置是指如何根據(jù)需要把需要展示的語(yǔ)言顯示在頁(yè)面,比如在中文環(huán)境下顯示中文,英文環(huán)境下顯示英文,用戶看得到才算數(shù)。

關(guān)于國(guó)際化

一個(gè)項(xiàng)目發(fā)展到一定的環(huán)境或者一開(kāi)始就是為多國(guó)打造的,就需要考慮國(guó)際化了。簡(jiǎn)單來(lái)說(shuō),就是一套頁(yè)面,多套語(yǔ)言。

前不久做了一個(gè)國(guó)際化的項(xiàng)目,基于reactantd,里面用到了國(guó)際化,使用方式也很簡(jiǎn)單

import zhCN from "antd/lib/locale-provider/zh_CN";

return (
  
    
  
);

然后,頁(yè)面所有的官方組件都變成了中文(默認(rèn)是英文)。

如果你使用其他工程,也有相應(yīng)的解決方案,比如

vue + vue-i18n

angular + angular-translate

react + react-intl

jquery + jquery.i18n.property

具體使用方式可以自行搜索,無(wú)非就是看各種api和配置文件。

可以說(shuō)相當(dāng)成熟了,那么,如何自己實(shí)現(xiàn)?

國(guó)際化的實(shí)現(xiàn)原理

其實(shí)原理很簡(jiǎn)單,這里只講最基本的原理,不談框架的特性。

上面列舉這里這么多js框架,有一個(gè)共同的特征,就是都有一個(gè)類似語(yǔ)言包的東西。

zh.json
en.json
jp.json
...

這個(gè)也很好理解,把各種語(yǔ)言獨(dú)立開(kāi)來(lái),便于管理和維護(hù)。

便于測(cè)試,我們把請(qǐng)求的過(guò)程去掉了,直接寫(xiě)在一個(gè)json對(duì)象里面,如下

intl.js

var intl = 
{
    "zh": {
        "title": "測(cè)試",
        "content": "這是一個(gè)測(cè)試"
    },
    "cn": {
        "title": "test",
        "content": "this is a test"
    }
}

大概會(huì)寫(xiě)一些這樣的配置語(yǔ)言,然后通過(guò)某種手段把對(duì)應(yīng)的字段設(shè)置到相應(yīng)的位置就可以了。

下面是偽代碼

測(cè)試

這是一個(gè)測(cè)試

var lang = getGlobalVar("LOCALE")||"zh";//獲取語(yǔ)言
var local = intl["lang"];

$title.innerHTML = local["title"];
$content.innerHTML = local["content"];

上面是一個(gè)簡(jiǎn)單的實(shí)現(xiàn)思路,如果是一個(gè)簡(jiǎn)單的靜態(tài)頁(yè)面,大可以用這種方式,也不需要引入一些第三方庫(kù),然后啃他的api。

當(dāng)然,國(guó)際化還遠(yuǎn)不止頁(yè)面靜態(tài)文字的簡(jiǎn)單翻譯,還包括本地化服務(wù)(時(shí)間、貨幣等等),如果涉及到這些還是使用現(xiàn)成的庫(kù)來(lái)的快。

另類的嘗試

除了以上js的思路,還有沒(méi)有其他的方法呢?這不是廢話嗎,如果沒(méi)有就不會(huì)來(lái)寫(xiě)這篇文章了。

下面重點(diǎn)來(lái)了,如何不借助js來(lái)實(shí)現(xiàn)國(guó)際化?

國(guó)際化的解決要點(diǎn)

實(shí)現(xiàn)國(guó)際化有兩個(gè)基本要素

語(yǔ)言配置

前端呈現(xiàn)

語(yǔ)言配置是指如何設(shè)置多語(yǔ)言,也就是說(shuō)如何把多種語(yǔ)言記錄下來(lái),就像前面js里面的配置文件。

前端配置是指如何根據(jù)需要把需要展示的語(yǔ)言顯示在頁(yè)面,比如在中文環(huán)境下顯示中文,英文環(huán)境下顯示英文,用戶看得到才算數(shù)。

乍一看,好像不借助js根本行不通啊,又要配置文件,又要渲染頁(yè)面內(nèi)容,簡(jiǎn)直無(wú)解啊。

content生成技術(shù)

css中有個(gè)content生成屬性,一般配合偽類:before或者:after來(lái)使用。

可能一提到content,很多人可能就明白了,沒(méi)錯(cuò),content就可以實(shí)現(xiàn)內(nèi)容生成。

那么,試一試?




  

/**ch**/
html:lang(ch) .title:after{
  content: "標(biāo)題";
}
html:lang(ch) .paragraph:after{
  content: "段落";
}
html:lang(ch) .summary:after{
  content: "描述";
}
/**en**/
html:lang(en) .title:after{
  content: "title";
}
html:lang(en) .paragraph:after{
  content: "paragraph";
}
html:lang(en) .summary:after{
  content: "summary";
}

怎么樣?是眼前一亮還是。。很銼?

好吧,我也覺(jué)得很挫,寫(xiě)起來(lái)比較麻煩,不過(guò)也是一種思路。

content+attr

上面的方式確實(shí)不怎么樣,但是思維也需要一個(gè)漸進(jìn)的過(guò)程

下面用到了使用屬性值作為content內(nèi)容,之前的用純css實(shí)現(xiàn)打星星效果(三)也使用這個(gè)特性,大家有興趣可以回過(guò)去看下,這里簡(jiǎn)單介紹一下用法


這樣就可以通過(guò)屬性值來(lái)生成內(nèi)容。

為什么要用屬性值呢?

上一種方式之前不好原因還有一點(diǎn),就是語(yǔ)義化太差,多帶帶看html文件完全不知道是什么內(nèi)容

下面我加點(diǎn)屬性

這下語(yǔ)義化應(yīng)該沒(méi)什么問(wèn)題了吧,很清楚知道每個(gè)標(biāo)簽的內(nèi)容

大家應(yīng)該知道我要做什么了吧,如下

/**ch**/
html:lang(ch) [data-lang-ch]:after{
  content: attr(data-lang-ch);
}
/**en**/
html:lang(en) [data-lang-en]:after{
    content: attr(data-lang-en);
}

很簡(jiǎn)單,各自取各自對(duì)應(yīng)的屬性即可,需要什么語(yǔ)言直接在html添加屬性即可,也不需要什么js

結(jié)合之前講過(guò)的css地址選擇器,可以很輕松的實(shí)現(xiàn)根據(jù)地址欄來(lái)適配各種語(yǔ)言

[data-lang-ch]:after,
#ch:target~[data-lang-ch]:after{
    content: attr(data-lang-ch);
}
#en:target~[data-lang-en]:after{
    content: attr(data-lang-en);
}

頁(yè)面添加一點(diǎn)元素


    

中文 英文

下面是demo

小節(jié)

以上主要探討了兩種完全不同的國(guó)際化方式,前一種主流,后一種完全屬于另類,但還是有用武之地的。如果你的頁(yè)面不太復(fù)雜,完全可以采取這種方式。

沒(méi)有了js,速度也快了,視野也開(kāi)闊了,腰也不酸了,腿也不疼了...

雖然以上跳過(guò)js實(shí)現(xiàn)了國(guó)際化需求,但是如果說(shuō)是一些動(dòng)態(tài)內(nèi)容,比如時(shí)間,就沒(méi)法放在屬性里面的,這一部分,就只能通過(guò)js來(lái)處理了,實(shí)屬無(wú)奈。。

還有一個(gè)就是,如果頁(yè)面復(fù)雜,或者需適配語(yǔ)言太多,那就意味著屬性要寫(xiě)很多

這樣就不太友好了,這種情況下就推薦主流的js解決方式


如果喜歡的文章的話,可以點(diǎn)贊并收藏,多多關(guān)注我的博客

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/53253.html

相關(guān)文章

  • 前端國(guó)際化另類方式

    摘要:前不久做了一個(gè)國(guó)際化的項(xiàng)目,基于和,里面用到了國(guó)際化,使用方式也很簡(jiǎn)單然后,頁(yè)面所有的官方組件都變成了中文默認(rèn)是英文。前端配置是指如何根據(jù)需要把需要展示的語(yǔ)言顯示在頁(yè)面,比如在中文環(huán)境下顯示中文,英文環(huán)境下顯示英文,用戶看得到才算數(shù)。 關(guān)于國(guó)際化 一個(gè)項(xiàng)目發(fā)展到一定的環(huán)境或者一開(kāi)始就是為多國(guó)打造的,就需要考慮國(guó)際化了。簡(jiǎn)單來(lái)說(shuō),就是一套頁(yè)面,多套語(yǔ)言。 前不久做了一個(gè)國(guó)際化的項(xiàng)目,基于...

    FullStackDeveloper 評(píng)論0 收藏0
  • 前端國(guó)際化另類方式

    摘要:前不久做了一個(gè)國(guó)際化的項(xiàng)目,基于和,里面用到了國(guó)際化,使用方式也很簡(jiǎn)單然后,頁(yè)面所有的官方組件都變成了中文默認(rèn)是英文。前端配置是指如何根據(jù)需要把需要展示的語(yǔ)言顯示在頁(yè)面,比如在中文環(huán)境下顯示中文,英文環(huán)境下顯示英文,用戶看得到才算數(shù)。 關(guān)于國(guó)際化 一個(gè)項(xiàng)目發(fā)展到一定的環(huán)境或者一開(kāi)始就是為多國(guó)打造的,就需要考慮國(guó)際化了。簡(jiǎn)單來(lái)說(shuō),就是一套頁(yè)面,多套語(yǔ)言。 前不久做了一個(gè)國(guó)際化的項(xiàng)目,基于...

    blastz 評(píng)論0 收藏0
  • ios設(shè)備觸發(fā)虛擬鍵盤輸入后position:fixed 無(wú)效一些簡(jiǎn)單另類解決方法。

    摘要:所以我也不用這種方式了。。監(jiān)聽(tīng)失去焦點(diǎn)事件然后把的屬性設(shè)置成。這樣就好了。。。??偨Y(jié)來(lái)說(shuō)就是觸發(fā)虛擬鍵盤的時(shí)候把屬性改成虛擬鍵盤消失的時(shí)候再把屬性改回 首先看一下我要解決的問(wèn)題,第一張圖是正常的情況下,第二張圖是點(diǎn)擊了輸入框之后的情況,就是要解決此問(wèn)題~! showImg(https://segmentfault.com/img/bV2DxT?w=699&h=453);百度了一下解決方...

    melody_lql 評(píng)論0 收藏0
  • ios設(shè)備觸發(fā)虛擬鍵盤輸入后position:fixed 無(wú)效一些簡(jiǎn)單另類解決方法。

    摘要:所以我也不用這種方式了。。監(jiān)聽(tīng)失去焦點(diǎn)事件然后把的屬性設(shè)置成。這樣就好了。。。??偨Y(jié)來(lái)說(shuō)就是觸發(fā)虛擬鍵盤的時(shí)候把屬性改成虛擬鍵盤消失的時(shí)候再把屬性改回 首先看一下我要解決的問(wèn)題,第一張圖是正常的情況下,第二張圖是點(diǎn)擊了輸入框之后的情況,就是要解決此問(wèn)題~! showImg(https://segmentfault.com/img/bV2DxT?w=699&h=453);百度了一下解決方...

    jackzou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<