Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

縦に遠くて見 づらい typoの チェック機構がな い 抜け漏れの チェック機構がな い

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

LocalizedStringKey の typo 引数の順番間違い

Slide 7

Slide 7 text

もっと安全にやりたい

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

yml enumの定義 + Localizable.strings

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

おさらい

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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