Swift iOS : 本地化

RecoReco發表於2019-01-30

這篇文章大概是目前你可以看到的最簡單的本地化教程。

廣告

Swift iOS開發小書 ,幫你快速上手開發 epub.ituring.com.cn/946

目標

本地化的意義,在於iOS切換不同語言時,App可以隨同改變,用指定的語言顯示應用。iOS提供了一套用來國際化的工具。本文就來解析它。

希望是程式碼傳入一個字串,在不同語言情況下,顯示不同內容。具體說:

print (NSLocalizedString("Welcome", comment: "Welcome"))複製程式碼

在語言為英語是,可以列印出:

Welcome english複製程式碼

在語言為漢語時,可以列印出:

歡迎 zh-Hans複製程式碼

準備工程和字串檔案

我們先幹起來。第一步是建立一個Single View app的工程。然後首先進入工程目錄,隨即執行如下命令,建立用於不同語言的字串檔案:

mkdir Base.lproj
touch Base.lproj/Localizable.strings
echo `"Welcome" = "welcome base";` > Base.lproj/Localizable.strings
mkdir en.lproj
touch en.lproj/Localizable.strings
echo `"Welcome" = "Welcome english";` > en.lproj/Localizable.strings
mkdir zh-Hans.lproj
touch zh-Hans.lproj/Localizable.strings
echo `"Welcome" = "歡迎 zh-Hans";` > zh-Hans.lproj/Localizable.strings複製程式碼

這樣,zh-Hans.lproj/Localizable.strings的內容,使用cat zh-Hans.lproj/Localizable.strings可以看出是:

"Welcome" = "歡迎 zh-Hans";複製程式碼

引號很重要,分號也很重要,寫錯了,就玩不出來了。.strings類的檔案目的就是為了建立字串和本地文字的關係,只是改變語言後可以變化的資料基礎。

檔案有了,下面是把它們加入工程,做法就是選擇工程,點選滑鼠右鍵,點選選單add files to,多選檔案目錄清單為:

Base.lproj
en.lproj
zh-Hans.lproj複製程式碼

終於到程式碼

隨即,貼上程式碼到

import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        print (NSLocalizedString("Welcome", comment: "Welcome"))
        return true
    }
}複製程式碼

執行,如果你此時的模擬器使用的語言為中文的話,那麼應該可以看到如下內容列印在控制檯:

歡迎 zh-Hans複製程式碼

一個本地化,不外乎是字串對應表,然後查表的操作,水果公司也能搞得這麼複雜,我也是服了。你看看如下參考,就知道我的意思了:

目標

本地化的意義,在於iOS切換不同語言時,App可以隨同改變,用指定的語言顯示應用。iOS提供了一套用來國際化的工具。本文就來解析它。

希望是程式碼傳入一個字串,在不同語言情況下,顯示不同內容。具體說:

print (NSLocalizedString("Welcome", comment: "Welcome"))複製程式碼

在語言為英語是,可以列印出:

Welcome english複製程式碼

在語言為漢語時,可以列印出:

歡迎 zh-Hans複製程式碼

準備工程和字串檔案

我們先幹起來。第一步是建立一個Single View app的工程。然後首先進入工程目錄,隨即執行如下命令,建立用於不同語言的字串檔案:

mkdir Base.lproj
touch Base.lproj/Localizable.strings
echo `"Welcome" = "welcome base";` > Base.lproj/Localizable.strings
mkdir en.lproj
touch en.lproj/Localizable.strings
echo `"Welcome" = "Welcome english";` > en.lproj/Localizable.strings
mkdir zh-Hans.lproj
touch zh-Hans.lproj/Localizable.strings
echo `"Welcome" = "歡迎 zh-Hans";` > zh-Hans.lproj/Localizable.strings複製程式碼

這樣,zh-Hans.lproj/Localizable.strings的內容,使用cat zh-Hans.lproj/Localizable.strings可以看出是:

"Welcome" = "歡迎 zh-Hans";複製程式碼

引號很重要,分號也很重要,寫錯了,就玩不出來了。.strings類的檔案目的就是為了建立字串和本地文字的關係,只是改變語言後可以變化的資料基礎。

檔案有了,下面是把它們加入工程,做法就是選擇工程,點選滑鼠右鍵,點選選單add files to,多選檔案目錄清單為:

Base.lproj
en.lproj
zh-Hans.lproj複製程式碼

終於到程式碼

隨即,貼上程式碼到

import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        print (NSLocalizedString("Welcome", comment: "Welcome"))
        return true
    }
}複製程式碼

執行,如果你此時的模擬器使用的語言為中文的話,那麼應該可以看到如下內容列印在控制檯:

歡迎 zh-Hans複製程式碼

一個本地化,不外乎是字串對應表,然後查表的操作,水果公司也能搞得這麼複雜,我也是服了。

  1. locale.strings太容易出錯並且程式碼容易亂七八糟,有人建議使用plist替代: medium.com/@dcordero/a…
  2. nshipster.com/nslocalized…
  3. www.jianshu.com/p/b13945381…

相關文章