アプリの国際化の舞台裏
https://gyazo.com/22b0c00996573f93a5c96a6a85e3a979
niw
文字
文字とは?
ひらがな、漢字、絵文字、㍻、彁(幽霊文字)
Character Set
規格
16進数表現
JIS X 0208
Unicode
文字を使う場合
番号をバイト列にする
Encoding
<meta charset="urf-8">
Character Set と エンコードは同一のものではない
文字と国際化
65,536あれば足りるのでは?
U+0000〜U+FFFF
エンコードはUTF-16に変換
Unicode 2.0で早々に破綻
漢字の追加
ハングル大移動
絵文字は増える
元号文字
Surrogate Pair
2つを使って表現
ありえない組み合わせが可能
片割れができる
文字数を数えると2文字になる
絵文字はほとんど必要
言語を超える関心の高い問題になった
Unicodeは超複雑
全角スペース+絵文字はクラッシュする
Variation Selectoerでクラッシュ
Devanagariでクラッシュ
Swift 5より前は任意の文字列でクラッシュする
言語
文字列の翻訳
State = 都道府県 or 状態
複数の言語の表示対応
Cancel, Discard
キャンセル、取り消す
正しい翻訳が必ず正しいということではない
コンテキストが非常に大切
変数があったらどうなるか
数の問題
%dは殆どの場合で使えない
複数形の存在
数詞の存在
1 => first
1day, 2days
状況に応じた対応が要る
そのような文字列が必要ないようにする
libicuやOSのAPI
文字列を何種類も用意して可能性のあるパターン
日本語入力は最強に難しい
インクリメンタル検索の実装は難しい
知識がある程度ないと使えない
Input Methodが山程あって挙動が全部に違う
APIですらバグってる
textView(_:shouldChangeTextIn:replacementText:)
1つの入力が1文字に対応するという思い込みからこうなる
コンテンツ
言語優先度
中華フォント問題
localeの指定
言語コミュニティを指定できる
複数指定もできる
システムのデフォルト優先順位がある
CJK統合漢字
似たような漢字で同じ番号を与えてる
アプリ側から判別不能になる
文化・季節感
「あけおめツイート」が12/28に来る
新年を迎えるイベントのタイミングもも各国文化で違う
チーム
「問題に気が付かない」という問題
複数形や数詞に関心がないと気が付かない
1つの入力が1文字に対応するという思い込み
どこでも同じであるという思い込み
情報過多で判断できなくなる
思い込みは生きるために必要
でもそれがあるということは認識できる
多様性のあるチームはよりよい成果がでる
関心のない問題を解決しないといけない