2013年4月1日 星期一

Localization: 支援多語系(App Localization)












本篇文章分成文字、圖像,與Icon名稱三部分介紹如何讓App支援多語系

A.程式裡文字的多語系作法

a1.先建立一個叫做 translations.lua的檔案,

裡面打上要翻譯的字句,如下
(把下面的程式碼,貼到你建立的translations.lua)
local translations =
{
    ["Hello"] =
    {
        ["en"] = "Hello",
        ["fr"] = "Salut",
        ["de"] = "Hallo",
        ["es"] = "Hola",
        ["it"] = "Ciao",
        ["zh-Hant"] = "哈嚕"
    },
    ["World"] =
    {
        ["en"] = "world",
        ["fr"] = "monde",
        ["de"] = "Welt",
        ["es"] = "mundo",
        ["it"] = "mondo",
        ["zh-Hant"] = "世界"
    },
    ["Hello world"] =
    {
        ["en"] = "Hello world",
        ["fr"] = "Bonjour tout le monde",
        ["de"] = "Hallo Welt",
        ["es"] = "Hola mundo",
        ["it"] = "Ciao a tutti",
        ["zh-Hant"] = "哈嚕 世界"
    }
}

return translations
(以上是要貼的程式碼)

a2.在需要翻譯的程式碼前面,加上下面這些設定

(以下是加入的設定)
local translations = require("translations")
local language = "en"
local os=system.getInfo("platformName")
if os=="Android" then
print("Don't support Android")
else
language = userDefinedLanguage or system.getPreference("ui","language")
end
(以上是加入的設定)

a3.使用時,用下面的程式碼

local myText = display.newText(translations["Hello world"][language], 0, 0, native.systemFont, 16)
你會發現,出來的文字會是在地化的文字

B.圖片的在地化

b1.準備各種語言的圖片

比方說原本的圖是"CoverMenuCover.png",
依照各種語言,準備不同版本的圖,照下面命名
CoverMenuCover_en.png
CoverMenuCover_zh-Hant.png (這是繁體中文)
CoverMenuCover_zh-Hans.png (這是簡體中文)
(*如果有@2x的圖片的話,把@2x放在最後面)
(像 CoverMenuCover_en@2x.png...)

b2.在需要支援多語系的圖片程式碼前面,加上下面這些設定

(以下是加入的設定)
local translations = require("translations")
local language = "en"
local os=system.getInfo("platformName")
if os=="Android" then
print("Don't support Android")
else
language = userDefinedLanguage or system.getPreference("ui","language")
end
(以上是加入的設定)

b3.要加圖的時候,可以參考下面的程式碼

local coverCover = display.newImageRect("CoverMenuCover_"..language..".png",320,274)

C.程式名稱的多語系作法

c1.專案的資料夾裡,為各種語言加入不同的資料夾。

比方說加入:
en.lproj、zh-Hans、zh-Hant等資料夾




c2.在各個資料夾分別加入一個新的文字檔,都取名為InfoPlist.strings


c3.在en.lproj資料夾的InfoPlist.strings檔案裡,打入下面文字

"CFBundleDisplayName"="No Nukes";
"CFBundleName"="No Nukes";
(請把No Nukes換成你的應用程式名稱)

c4.在zh-Hant.lproj資料夾的InfoPlist.strings檔案裡,打入下面文字

"CFBundleDisplayName"="核電危機";
"CFBundleName"="核電危機";
(請把"核電危機"換成你的應用程式名稱)
(接著其他的資料夾內容,也請依序更改)

c5.在build.settings裡、iPhone設定裡、plist中,加入CFBundleLocalizations

如下
iphone = {
plist = {
        CFBundleLocalizations={
            "en",
            "zh-Hans",
            "zh-Hant",
    },
    --下面加入其他的設定
    },
}
這樣就會發現app的名稱會支援多語系








我用上面這些方法,做了一款叫做「No Nukes(核電危機)」的小遊戲,
完全免費,歡迎下載玩玩看!
下載連結:
iPhone: https://itunes.apple.com/tw/app/he-dian-wei-ji/id620244514?l=zh&mt=8
Android: https://play.google.com/store/apps/details?id=com.appsgaga.game.nonukes

回到 魏巍的CORONA SDK百科全書

沒有留言:

張貼留言