2016年9月27日火曜日

[iOS]How to localize app(アプリのローカライズ)

さて、Pocket Noteでは現在、日本語、英語、ロシア語、フランス語など11ヶ国語に対応しています。
今回はこの外国語対応(ローカライズ対応)を行う方法についてご紹介します。
Pocket Note supports eleven languages, English, Japanese, Russian, French etc.
I write how to localize an application to support multiple languages this time.

 環境(Environment): Xcode 8, Swift 3

まず[PROJECT]の[info]-[Localizations]を選択し、[+]を押下し追加する言語を選択します。
At first,select [info]-[Localizations] in [PROJECT] and click [+] and select languages which you want to add.

次にプロジェクトにStringsファイルを追加し、ファイル名を「Localizable.strings」とします。(必ずこのファイル名でなくてはなりません。)
Next,add Strings file to project, and name it  "Localizable.strings".(You must specify this file name.)

次にLocalizable.stringsを選択し[Localize...]をクリックします。
Next, select localizable.string and click [Localize...].

その後、ベースとなる英語以外の言語を選択します。
すると選択した言語のLocalizable.stringsができます。
And select language except base language.
And Localizable.string of selected languages is made. 

プログラム内でローカライズ対応を行うメッセージはNSLocalizedStringで定義します。
Specify localizable message using NSLocalizedString in program.

形式(Format):NSLocalizedString("Key",comment:"")

Keyは英語の文言にするといいでしょう。(Localizable.stringに設定がない言語ではKey名がそのまま表示されるため。)
commentは特に使用しません。
It is good to specify English's message to Key.(Because key is displayed when Localized.string of iOS's language is nothing.)
Comment isn't used.

let title:String = NSLocalizedString("Do you delete this document?", comment: "")

そして先ほど作成したLocalizable.stringに [Key名 = "それぞれの言語のメッセージ"; ]の形式で記載します。
And write [Key = "message of various languages";] on Localizable.string.

Localizable.strings(Japanese)
"Do you delete this document?" = "このドキュメントを削除しますか?";

ではコード全文を見てみましょう。
Let's write the full text of code.

ViewController.swift
import UIKit

class ViewController: UIViewController {
    
    let buttonDelete:UIButton = UIButton()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        buttonDelete.frame = CGRect(x:10,y:50,width:200,height:50)
        buttonDelete.setTitle(NSLocalizedString("Delete",comment:""), for: .normal)
        buttonDelete.setTitleColor(UIColor.blue, for: .normal)
        buttonDelete.layer.borderColor = UIColor.blue.cgColor
        buttonDelete.layer.borderWidth = 1
        buttonDelete.addTarget(self, action: #selector(self.touchUpButtonDelete), for: .touchUpInside)
        self.view.addSubview(buttonDelete)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    //Tap buttonDelete
    func touchUpButtonDelete(){
        let title:String = NSLocalizedString("Do you delete this document?", comment: "")
        let alert = UIAlertController(title:title,message:"",preferredStyle:.alert)
        alert.addAction(UIAlertAction(title:NSLocalizedString("OK",comment:""),style:.default,handler:nil))
        self.present(alert,animated:true,completion:nil)
    }

}

Localizable.strings(Japanese)
"Delete" = "削除";
"Do you delete this document?" = "このドキュメントを削除しますか?";
"OK" = "OK";

Localizable.strings(French)
"Delete" = "effacer";
"Do you delete this document?" = "Voulez-vous supprimer ce document ?";
"OK" = "Accepter";

実機もしくはシミュレーターの[設定]-[一般]-[言語と地域]で言語を変更すると、正しくローカライズされていることを確認できます。
If you change language in [Settings]-[General]-[Language&Region] of real machine or simulator, you can confirm that your application is localized correctly.

[関連記事(Articles)]
[iOS]How to localize App Extensions
にほんブログ村 ライフスタイルブログ クリエイティブライフへ
にほんブログ村

クリエイティブライフ ブログランキングへ

0 件のコメント:

コメントを投稿