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
460
iOSアプリを安全にローカライズする
potatotips #81
Yuya Hirayama
February 21, 2023
Tweet
Share
More Decks by Yuya Hirayama
See All by Yuya Hirayama
わいわいClaude Code アイスブレイクLT iOSDC2025 Day2 アンカンファレンス
hiragram
0
130
LLMエージェント時代に適応した開発フロー
hiragram
2
700
Deep Dive into ~/.claude/projects
hiragram
14
22k
iOSアプリ開発もLLMで自動運転する
hiragram
7
2.7k
iOSアプリの定期リリースとその自動化@potatotips#90
hiragram
1
470
Xcode Cloud事例紹介
hiragram
1
510
iPhoneXのTrueDepthカメラでVRMを動かす
hiragram
2
14k
生きた仕様書としてのUIカタログアプリ運用 構想編
hiragram
1
1.5k
waiwai-swiftc-lazy.pdf
hiragram
0
310
Other Decks in Technology
See All in Technology
Snowflakeとdbtで加速する 「TVCMデータで価値を生む組織」への進化論 / Evolving TVCM Data Value in TELECY with Snowflake and dbt
carta_engineering
0
160
AIの個性を理解し、指揮する
shoota
3
630
GTC 2025 : 가속되고 있는 미래
inureyes
PRO
0
150
AWSが好きすぎて、41歳でエンジニアになり、AAIを経由してAWSパートナー企業に入った話
yama3133
2
230
AI時代の発信活動 ~技術者として認知してもらうための発信法~ / 20251028 Masaki Okuda
shift_evolve
PRO
1
140
JAWS UG AI/ML #32 Amazon BedrockモデルのライフサイクルとEOL対応/How Amazon Bedrock Model Lifecycle Works
quiver
1
830
データエンジニアとして生存するために 〜界隈を盛り上げる「お祭り」が必要な理由〜 / data_summit_findy_Session_1
sansan_randd
1
960
Playwrightで始めるUI自動テスト入門
devops_vtj
0
150
触れるけど壊れないWordPressの作り方
masakawai
0
680
DMARCは導入したんだけど・・・現場のつぶやき 〜 BIMI?何それ美味しいの?
hirachan
1
160
abema-trace-sampling-observability-cost-optimization
tetsuya28
0
480
DSPy入門
tomehirata
6
900
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
640
Designing for humans not robots
tammielis
254
26k
Practical Orchestrator
shlominoach
190
11k
Testing 201, or: Great Expectations
jmmastey
46
7.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
Building an army of robots
kneath
306
46k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
The World Runs on Bad Software
bkeepers
PRO
72
11k
Building Applications with DynamoDB
mza
96
6.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
2.9k
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問わず。 自己紹介と宣伝 このへんの話もで きます