$30 off During Our Annual Pro Sale. View Details »

iOSアプリを安全にローカライズする

Yuya Hirayama
February 21, 2023

 iOSアプリを安全にローカライズする

potatotips #81

Yuya Hirayama

February 21, 2023
Tweet

More Decks by Yuya Hirayama

Other Decks in Technology

Transcript

  1. 安全にローカライズする
    @hiragram
    2023-02-21 potatotips #81

    View Slide

  2. iOSアプリのローカライズは難しい

    View Slide

  3. iOSアプリのローカライズは何が難しい?
    ● Localizable.strings ってやつをメンテするのが難しい
    ○ typo耐性が低い
    ○ 抜け漏れ耐性が低い
    ○ 目視に優しくない

    View Slide

  4. 縦に遠くて見
    づらい
    typoの
    チェック機構がな

    抜け漏れの
    チェック機構がな

    View Slide

  5. iOSアプリのローカライズは何が難しい?
    ● Localizable.strings ってやつをメンテするのが難しい
    ○ typo耐性が低い
    ○ 抜け漏れ耐性が低い
    ○ 目視に優しくない
    ● 呼び出す側をいい感じにするのが難しい
    ○ typo耐性が低い
    ○ パラメータ渡すのが難しい

    View Slide

  6. LocalizedStringKey の typo
    引数の順番間違い

    View Slide

  7. もっと安全にやりたい

    View Slide

  8. 既存のソリューション: R.swift
    Localizable.strings を元
    にコードを生成して、静的
    解析できるようにする。
    Localizable.strings その
    ものの管理は自分でやる
    ことになる 🤔

    View Slide

  9. 課題を解決する仕組みを作りました

    View Slide

  10. ローカライズ便利ツール Honya
    - https://github.com/nana-music/Honya
    - とりあえずプロダクトから切り出して置いただけなので、参考程度に
    - ymlでローカライズの定義をして、それを元にLocalizable.string と静的に扱える
    コードを生成するツール
    - 人間が管理するにはだるいファイルを ymlから生成するというのは、 XcodeGenから影響をうけたア
    イデア

    View Slide

  11. ● ローカライズ対象の言語を指定する。
    ● ローカライズ項目を記述する。
    ● 上述の対象言語はすべて書かれている
    必要があり、足りないとツール実行時に
    エラーになる。
    抜け漏れ耐性が
    高まった

    View Slide

  12. yml enumの定義 + Localizable.strings

    View Slide

  13. typo耐性が
    高まった
    typoすると
    コンパイルエラー

    View Slide

  14. ● 外から引数として受け取れるパラメータ
    を定義する。型はCVarArg準拠型の
    み。
    ● 変数を埋め込むことができる
    引数を渡せるようにする

    View Slide

  15. 引数を渡せるようにする
    引数を間違え
    にくくなった

    View Slide

  16. おさらい

    View Slide

  17. iOSアプリのローカライズは何が難しい?
    ● Localizable.strings ってやつをメンテするのが難しい
    ○ typo耐性が低い
    ■ Localizable.strings を人間が直接触る必要が無くなり、解決
    ○ 抜け漏れ耐性が低い
    ■ ymlからの生成時に、すべての言語が揃っているかチェックされるようになり、解決
    ○ 目視に優しくない
    ■ 定義が1つのymlにまとまったことで、目視もレビューもしやすくなり、解決
    ● 呼び出す側をいい感じにするのが難しい
    ○ typo耐性が低い
    ■ enumとして定義することで、コンパイル時にチェックできるようになり、解決
    ○ パラメータ渡すのが難しい
    ■ assoc value付きのcaseにすることで、ラベルと型がついて間違えにくくなり、解決

    View Slide

  18. ● @hiragram / 平山裕也
    ● 株式会社nana music / iOS lead / PdM / 色々
    ● 10周年を迎えた音楽SNSアプリnanaをゼロから作り直しています
    ● 1000万ユーザーを抱えるサービスを生まれ変わらせる仕事に興味ある人いたらぜ
    ひ声かけてください。TwitterDMでもいいです。iOS/Android問わず。
    自己紹介と宣伝
    このへんの話もで
    きます

    View Slide