1. 程式人生 > 其它 >CocosCreator使用i18n實現多語種

CocosCreator使用i18n實現多語種

CocosCreator使用i18n實現多語種

前言:

  如果要在遊戲或者APP中可以根據不同地區顯示不同語言,或者能設定切換語言,這是怎麼實現的?要如何處理應用中的圖片呢?當然方式有很多種,本文主要討論在CocosCreator中使用i18n實現多語種功能的切換。

實現:

  這是官方給出的i18n外掛下載地址:GitHub - cocos-creator-packages/i18n: i18n for Label and Sprites

  解壓後可以將一整個檔案拖到專案的assets資料夾裡,如果嫌檔案太多可以只保留i18n和runtime-scripts資料夾,如下:

 

  在目錄裡,i18n檔案裡的en和zh檔案分別是英文配置和中文配置,而在runtime-scripts夾裡的諸多檔案,我們真正需要操作也只有LanguageData.js檔案,而LocalizedLabel和LocalizedSprite則是用於掛載的元件。

en和zh

         這兩個檔案是用於配置專案中文字的顯示內容,如果還需要有其他語言,可以增加配置。在不同語種配置檔案裡用同樣的key來表明是同一欄位,在此處配置文字內容。

 

         在新增文字時按初始的格式就可以新增。

LanguageData

  LanguageData檔案需要配置en和zh的路徑,將程式碼修改成:

let polyInst = null;
if (!window.i18n) {
    window.i18n = {
        languages: {
            'zh': require('../i18n/ch'),
            
'en': require('../i18n/en') }, curLang: '' }; }

         LanguageData檔案中需要刪除這段程式碼,這是為了在專案開始時初始化,但這裡會報錯。

if (CC_EDITOR) {
    Editor.Profile.load('profile://project/i18n.json', (err, profile) => {
        window.i18n.curLang = profile.data['default_language'];
        if (polyInst) {
            let data 
= loadLanguageData(window.i18n.curLang) || {}; initPolyglot(data); } }); }

  在原來的位置加上:

window.i18n.curLang = cc.sys.language;
initPolyglot(loadLanguageData(window.i18n.curLang) || {});
 
function loadLanguageData (language) {
    return window.i18n.languages[language];
}

  這樣就能在專案執行時初始化系統語言,這裡的cc.sys.langaue是當前系統語言字串。

初始化語言

//初始化語言
let i18n = require('LanguageData');
i18n.init('en');
i18n.updateLanguageRender();

切換語言

//切換語言
let i18n = require('LanguageData');
i18n.init('en');
i18n.updateLanguageRender();

LocalizedLabel和LocalizedSprite元件

  上面部分僅僅只是切換語言,但文字或圖片物件還沒繫結,在i18n裡可以通過程式碼或外掛自帶的元件進行語言的繫結和切換。

元件繫結:

  點選需要繫結的文字節點,新增自定義元件->LocalizedLabel,將文字配置的key寫上去即可繫結。

  點選需要繫結的圖片節點,新增自定義元件->LocalizedSprite,將對應的圖片和語種名名(如en/zh)寫上去即可繫結。

程式碼繫結:

  用i18n的t函式即可獲取對應key值的文字內容如下,如果想要實現部分文字或圖片語言切換,可以在程式碼裡實現:

let i18n = require('LanguageData');
let hello= i18n.t('label_text.hello');
cc.log(hello);

後言:

  時過境遷,遊戲再不是之前國內 “自營自銷”,如今有很多遊戲面向全世界,多語言系統也更多的成為很多遊戲開發的必備模組。

  對於任何市場來說,本地化都是一個很重要的事情。所以從遊戲體驗上說,大部分遊戲都是需要多語言處理才能發揮出本來的樂趣的,而且質量越高越好。