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
360
iOSアプリを安全にローカライズする
potatotips #81
Yuya Hirayama
February 21, 2023
Tweet
Share
More Decks by Yuya Hirayama
See All by Yuya Hirayama
iPhoneXのTrueDepthカメラでVRMを動かす
hiragram
2
14k
生きた仕様書としてのUIカタログアプリ運用 構想編
hiragram
1
1.3k
waiwai-swiftc-lazy.pdf
hiragram
0
190
Protocol Oriented WebAPI Abstraction
hiragram
0
290
Vapor cloud + Codegen
hiragram
0
50
VaporアプリからFCM経由でプッシュ通知を送る
hiragram
0
110
アプリ内でWebAPIを抽象化するためのフレームワークAbstractionKitの紹介
hiragram
1
3.5k
Firebase Realtime Databaseを良さげに抽象化する
hiragram
2
1.3k
AutoLayoutのデバッグをちょっとだけ楽にやる
hiragram
0
140
Other Decks in Technology
See All in Technology
MongoDB Atlas Vectorsearchではじめる生成AIアプリ開発
chie8842
3
510
プッシュ型子育てサービスを、先行プロジェクト実施自治体において開始します
govtechtokyo
0
290
オブジェクト指向CSSが叶えたかったことと、CSSのいま / The aims of Object-oriented CSS and the current state of CSS usage
shinkufencer
11
3.7k
業務で使えるかもしれない…!?GitHub Actions の Tips 集 / CI/CD Test Night #7
ponkio_o
PRO
24
7.1k
統計的学習理論読み Chapter 1
kmatsui
3
940
エンジニアブランディングチームの KPI / KPI's of engineer branding team
chaspy
1
140
オーティファイ会社紹介資料 / Autify Company Deck
autifyhq
7
100k
オブジェクト指向宗教史
tanakahisateru
14
12k
期待しすぎずに取り組む両面 TypeScript
shozawa
4
520
長文から長文を生成するLLMツールをオープンソースで作ってみた。
tomohisa
2
150
現実世界の事象から学ぶSOLID原則
h0r15h0
24
10k
家族アルバム みてねで直面してきた技術的負債 / MIXI KAG 2024
isaoshimizu
17
7.7k
Featured
See All Featured
Debugging Ruby Performance
tmm1
68
11k
Product Roadmaps are Hard
iamctodd
43
9.6k
Designing on Purpose - Digital PM Summit 2013
jponch
109
6.4k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
185
15k
The Invisible Side of Design
smashingmag
293
49k
Side Projects
sachag
451
41k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
18
1.7k
Statistics for Hackers
jakevdp
789
220k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.8k
Fireside Chat
paigeccino
19
2.6k
The Brand Is Dead. Long Live the Brand.
mthomps
48
22k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
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問わず。 自己紹介と宣伝 このへんの話もで きます