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
440
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
14
16k
iOSアプリ開発もLLMで自動運転する
hiragram
6
2.5k
iOSアプリの定期リリースとその自動化@potatotips#90
hiragram
1
440
Xcode Cloud事例紹介
hiragram
1
490
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
74
Other Decks in Technology
See All in Technology
AI工学特論: MLOps・継続的評価
asei
10
1.5k
会社もクラウドも違うけど 通じたコスト削減テクニック/Cost optimization strategies effective regardless of company or cloud provider
aeonpeople
2
150
低レイヤソフトウェア技術者が YouTuberとして食っていこうとした話
sat
PRO
7
5.8k
公開初日に個人環境で試した Gemini CLI 体験記など / Gemini CLI実験レポート
you
PRO
3
300
claude codeでPrompt Engineering
iori0311
0
410
ゼロから始めるSREの事業貢献 - 生成AI時代のSRE成長戦略と実践 / Starting SRE from Day One
shinyorke
PRO
0
230
機械学習を「社会実装」するということ 2025年夏版 / Social Implementation of Machine Learning July 2025 Version
moepy_stats
1
510
組織内、組織間の資産保護に必要なアイデンティティ基盤と関連技術の最新動向
fujie
0
500
OTel 公式ドキュメント翻訳 PJ から始めるコミュニティ活動/Community activities starting with the OTel official document translation project
msksgm
0
210
Building GoReleaser - from shell script to paid product
caarlos0
0
260
ecspressoの設計思想に至る道 / sekkeinight2025
fujiwara3
8
970
Shadow DOMとセキュリティ - 光と影の境界を探る / Shibuya.XSS techtalk #13
masatokinugawa
0
270
Featured
See All Featured
Side Projects
sachag
455
43k
We Have a Design System, Now What?
morganepeng
53
7.7k
A Modern Web Designer's Workflow
chriscoyier
695
190k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
For a Future-Friendly Web
brad_frost
179
9.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Become a Pro
speakerdeck
PRO
29
5.4k
Bash Introduction
62gerente
613
210k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
Faster Mobile Websites
deanohume
308
31k
Writing Fast Ruby
sferik
628
62k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
47
9.6k
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問わず。 自己紹介と宣伝 このへんの話もで きます