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);
後言:
時過境遷,遊戲再不是之前國內 “自營自銷”,如今有很多遊戲面向全世界,多語言系統也更多的成為很多遊戲開發的必備模組。
對於任何市場來說,本地化都是一個很重要的事情。所以從遊戲體驗上說,大部分遊戲都是需要多語言處理才能發揮出本來的樂趣的,而且質量越高越好。