Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
iOSアプリを安全にローカライズする
Search
Yuya Hirayama
February 21, 2023
Technology
1
430
iOSアプリを安全にローカライズする
potatotips #81
Yuya Hirayama
February 21, 2023
Tweet
Share
More Decks by Yuya Hirayama
See All by Yuya Hirayama
Deep Dive into ~/.claude/projects
hiragram
8
1.5k
iOSアプリ開発もLLMで自動運転する
hiragram
6
2.4k
iOSアプリの定期リリースとその自動化@potatotips#90
hiragram
1
430
Xcode Cloud事例紹介
hiragram
1
480
iPhoneXのTrueDepthカメラでVRMを動かす
hiragram
2
14k
生きた仕様書としてのUIカタログアプリ運用 構想編
hiragram
1
1.4k
waiwai-swiftc-lazy.pdf
hiragram
0
290
Protocol Oriented WebAPI Abstraction
hiragram
0
380
Vapor cloud + Codegen
hiragram
0
70
Other Decks in Technology
See All in Technology
第9回情シス転職ミートアップ_テックタッチ株式会社
forester3003
0
240
BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説
brainpadpr
1
160
本が全く読めなかった過去の自分へ
genshun9
0
440
PHPでWebブラウザのレンダリングエンジンを実装する
dip_tech
PRO
0
200
Understanding_Thread_Tuning_for_Inference_Servers_of_Deep_Models.pdf
lycorptech_jp
PRO
0
120
Navigation3でViewModelにデータを渡す方法
mikanichinose
0
220
PostgreSQL 18 cancel request key長の変更とRailsへの関連
yahonda
0
120
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
630
Javaで作る RAGを活用した Q&Aアプリケーション
recruitengineers
PRO
1
110
_第3回__AIxIoTビジネス共創ラボ紹介資料_20250617.pdf
iotcomjpadmin
0
150
Amazon ECS & AWS Fargate 運用アーキテクチャ2025 / Amazon ECS and AWS Fargate Ops Architecture 2025
iselegant
16
5.6k
解析の定理証明実践@Lean 4
dec9ue
0
180
Featured
See All Featured
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
RailsConf 2023
tenderlove
30
1.1k
Building Adaptive Systems
keathley
43
2.6k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
What's in a price? How to price your products and services
michaelherold
246
12k
Why Our Code Smells
bkeepers
PRO
337
57k
Scaling GitHub
holman
459
140k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
VelocityConf: Rendering Performance Case Studies
addyosmani
330
24k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
Transcript
安全にローカライズする @hiragram 2023-02-21 potatotips #81
iOSアプリのローカライズは難しい
iOSアプリのローカライズは何が難しい? • Localizable.strings ってやつをメンテするのが難しい ◦ typo耐性が低い ◦ 抜け漏れ耐性が低い ◦ 目視に優しくない
縦に遠くて見 づらい typoの チェック機構がな い 抜け漏れの チェック機構がな い
iOSアプリのローカライズは何が難しい? • Localizable.strings ってやつをメンテするのが難しい ◦ typo耐性が低い ◦ 抜け漏れ耐性が低い ◦ 目視に優しくない
• 呼び出す側をいい感じにするのが難しい ◦ typo耐性が低い ◦ パラメータ渡すのが難しい
LocalizedStringKey の typo 引数の順番間違い
もっと安全にやりたい
既存のソリューション: R.swift Localizable.strings を元 にコードを生成して、静的 解析できるようにする。 Localizable.strings その ものの管理は自分でやる ことになる
🤔
課題を解決する仕組みを作りました
ローカライズ便利ツール Honya - https://github.com/nana-music/Honya - とりあえずプロダクトから切り出して置いただけなので、参考程度に - ymlでローカライズの定義をして、それを元にLocalizable.string と静的に扱える コードを生成するツール
- 人間が管理するにはだるいファイルを ymlから生成するというのは、 XcodeGenから影響をうけたア イデア
• ローカライズ対象の言語を指定する。 • ローカライズ項目を記述する。 • 上述の対象言語はすべて書かれている 必要があり、足りないとツール実行時に エラーになる。 抜け漏れ耐性が 高まった
yml enumの定義 + Localizable.strings
typo耐性が 高まった typoすると コンパイルエラー
• 外から引数として受け取れるパラメータ を定義する。型はCVarArg準拠型の み。 • 変数を埋め込むことができる 引数を渡せるようにする
引数を渡せるようにする 引数を間違え にくくなった
おさらい
iOSアプリのローカライズは何が難しい? • Localizable.strings ってやつをメンテするのが難しい ◦ typo耐性が低い ▪ Localizable.strings を人間が直接触る必要が無くなり、解決 ◦
抜け漏れ耐性が低い ▪ ymlからの生成時に、すべての言語が揃っているかチェックされるようになり、解決 ◦ 目視に優しくない ▪ 定義が1つのymlにまとまったことで、目視もレビューもしやすくなり、解決 • 呼び出す側をいい感じにするのが難しい ◦ typo耐性が低い ▪ enumとして定義することで、コンパイル時にチェックできるようになり、解決 ◦ パラメータ渡すのが難しい ▪ assoc value付きのcaseにすることで、ラベルと型がついて間違えにくくなり、解決
• @hiragram / 平山裕也 • 株式会社nana music / iOS lead
/ PdM / 色々 • 10周年を迎えた音楽SNSアプリnanaをゼロから作り直しています • 1000万ユーザーを抱えるサービスを生まれ変わらせる仕事に興味ある人いたらぜ ひ声かけてください。TwitterDMでもいいです。iOS/Android問わず。 自己紹介と宣伝 このへんの話もで きます