Skip to content

Instantly share code, notes, and snippets.

@kishikawakatsumi
Last active January 16, 2025 12:40
Show Gist options
  • Save kishikawakatsumi/079f800561869c386e7702048b7580e1 to your computer and use it in GitHub Desktop.
Save kishikawakatsumi/079f800561869c386e7702048b7580e1 to your computer and use it in GitHub Desktop.
applelocalization.com に対するデータ追加更新の手順
** 概要
applelocalization-toolsでシステムの言語ファイルを読み取り、applelocalization-dataのデータを作る。
追加したデータを表示できるようにWebフロントエンド(エンドポイントやドロップダウンメニューを追加する)を修正する。
*** 手順 1〜11
- github.com/kishikawakatsumi/applelocalization-tools
- システムに含まれる言語ファイルを読み取りDBの1レコード単位に整形したJSONファイルを作る
- JSONファイルからDBにインポートできるデータを作る。
*** 手順 12〜20
- github.com/kishikawakatsumi/applelocalization-data
- DBの実行環境。Dockerコンテナでそのまま動く。
- SSDの空き容量がおよそ500GB必要。
*** 手順 21〜
- github.com/kishikawakatsumi/applelocalization-web
- Webフロントエンド。applelocalization-dataから取得したデータを整形して表示する。
Requirements:
- Deno
- Docker
1. https://ipsw.me/ から対象のmacOSのイメージファイル(*.ipsw)をダウンロードする。
2. 仮想化ソフトウェアで対象のmacOSを使って起動する。私が使っているのはUTM。ディスクは最低100GB程度が必要。あとはデフォルト設定で構わない。
注記: 仮想マシンを使わずに実デバイスで実行することも可能だが、目的はAppleの翻訳語を調査したい、ということなのでサードパーティのリソースが混ざることが起こらないように可能な限りプレーンな環境で実行したい。
3. 仮想マシン上でXcodeをダウンロードしてセットアップする。
4. https://github.com/kishikawakatsumi/applelocalization-tools.git をクローンする。
5. ディスク容量を節約するためにdataディレクトリを削除する。ディスク容量に余裕がある場合はこの手順は不要。
6. 4のリポジトリに含まれるXcodeプロジェクト(Mac用はmacOS/AppleLocalization/AppleLocalization.xcodeproj)を開いて実行する。コード署名などは適当に対応する。Run Locallyで問題ないはず。
7. 終了までしばらく待つ。コンソールに「finished!」が出力されれば終了。詳しくはコードを読む。コンソールに出力されたパス(<HOME>/Library/Containers/com.kishikawakatsumi.AppleLocalization/Data/Documents/<TIMESTAMP>)に実行結果が格納されているのでホストマシンにコピーする(ホストマシンをファイル共有するのが簡単)。
8. applelocalization-toolsをホストマシンにもクローンして、data/macosに6の手順で生成したデータを格納する(macOS 15.2の場合はディレクトリ名を「15.2」とする)。
9. 生成したデータは*.stringsあるいは*.loctableファイルのキーと値を展開したJSONである。この時点で生成したデータをコミットしてPushしておく。
10. export.tsを新しく追加したデータ(今回の例では「15.2」)が実行対象となるように修正する(データの更新の場合は不要。ディレクトリ名が変わる場合は同様の作業が必要。)。https://github.com/kishikawakatsumi/applelocalization-tools/commit/3e3e18a45665cee185e6bef8bac4af1c9fd807ff ← こちらのコミットを参考にコードを修正する。ここで編集している値に書かれているディレクトリが読み込み対象になる。
11. export.shを実行する。Denoが必要。終了までしばらく待つ。(厳密にはすべてのデータを再生成する必要はないが、稼働しているDBを差分更新するのは面倒なのですべてのデータを再生成する。)成功したらexport.tsをコミットしてPushする。
12. data.sqlが生成される。このファイルはDBに直接インポートされるデータファイルだがおよそ40GBあるのでこのままではGitHubにPushできないので100MB以下の複数のファイルに分割する。split.shを実行する。tempディレクトリにdata.sql.aa、data.sql.ab〜という複数のファイルが生成される。
13. https://github.com/kishikawakatsumi/applelocalization-data をクローンする。
14. tempディレクトリの中身であるdata.sql.aa、data.sql.ab〜のファイルをすべて上記のリポジトリに移動する。
15. 分割してもGitHubにこの容量のファイルを一度にPushできないので、push.shを実行して1ファイルずつコミット、Pushする。
16. applelocalization-dataでbuild.shを実行してDockerイメージをビルドする。Dockerが必要。SSDに400GB程度の空き容量が必要。
17. データをチェックするためにrun.shを実行してDockerコンテナを起動する。ここで起動されるのはDBだけ。
18. データはOSごとバージョンごとにそれぞれテーブルがあるので、追加したデータのテーブル(今回の例だとmacOS15)が追加されているかどうか。件数がおよそ合ってそうかなどを見る。
19. クエリに使用するバンドルと言語の一覧をあらかじめ抽出して静的データとする。実行時に毎回行うのは非効率だからである。
18. SELECT '"' || bundle_name || '"',' AS quoted_bundle_name FROM (SELECT DISTINCT bundle_name FROM macos15);
19. SELECT '"' || "language" || '",' AS quoted_language FROM (SELECT DISTINCT "language" FROM macos15);
20. 手順18のようなSQLでバンドルの一覧、19のSQLで言語の一覧が出せる。
21. [email protected]:kishikawakatsumi/applelocalization-web.git をクローンする。
22. https://github.com/kishikawakatsumi/applelocalization-web/pull/174/files を参考にバンドルの一覧と言語の一覧からbundles.jsonとlanguage_mappings.ts を新しく作る。
23. 手順22を参考にフロントUIに新しく追加したデータを検索するUIを追加する。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment