MEP 25: mar内での国際化
- Created: 2025-06-26 14:17:00
- Updated: 2025-07-01 15:22:00
- Status: Supported(v1.0.02)
モチベーション
MEP 19: paramの国際化で、スクリプト側の国際化の仕組みは定義されているが、 このリソースを追加する仕組みが無い(内部でcppで追加する方法はある)。
marでユーザーが追加する方法を検討する。
提案
mar内にresource.jsonというファイルがあったら、それをリソースとして扱う。
mar内にstrings.jsonというファイルがあったら、それをリソースとして扱う。(Updated: 2025-06-29)
フォーマットは以下。
{
"ja": {"TITLE": "日本語タイトル", "STRENGTH_LABEL": "強さ"},
"en": {"TITLE": "English or Default Title", "STRENGTH_LABEL": "Strength"}
}
対応している言語は以下。
| キー | 説明 |
|---|---|
| zh_Hans | Chinese simplified |
| zh_Hant | Chinese traditional |
| en | 英語 |
| fr | フランス語 |
| de | ドイツ語 |
| ja | 日本語 |
| ko | 韓国語 |
| pt | ポルトガル語 |
| ru | ロシア語 |
| es | スペイン語 |
| hi | ヒンズー語 |
| bn | ベンガル語 |
| pl | ポーランド語 |
enはデフォルトとして振る舞い、他の言語に無い場合もenが使われる。enには全てのIDが存在しないといけない。 en以外は存在しないIDがあっても良く、現在の言語に対応するIDが存在しない場合はenのIDが使われる。
検討
仕様について議論が必要な事や検討すべき事柄。
その他の情報も含めたjsonにすべきでは無いか?
文字列リソースのみのjsonファイルを作る、という前提の仕様になっているが、 普通はリソースと言えば文字列リソース以外にも付加的な情報などを含める事が出来る。
例えば複数のmfgを順番にapplyするような機能が欲しいと思っているが、 この順番などの情報は外部のjsonに書く事になると思う。 また、favicon的なものはいかにも欲しくなる機能に思う。
そうした事のために最初からメタ情報を全部入れておくjsonを作る、という前提の方が良い可能性がある。
文字列リソースのみのjsonの利点
- json自体が単純になる。他の要素を入れるなら一段ネストが深くなるが、そのほかの要素が無い時にはこのネストは単に邪魔なだけである。
- あらかじめ必要になるものを想定して準備するよりも、必要になってから追加する方が無駄が無い(YAGNI的に良い)
- その前提に立つなら、現在必要なものを最も簡潔にサポートしておくのが良い
全メタ情報を含むjsonの利点
- jsonが複雑になるとはいえ、所詮1段ネストが深くなるだけである
- リリースしてから変えるにはコストが掛かるので最初に必要になりそうなものを準備しておく意味はある
- どのjsonファイルに何を書くのかがややこしくなるリスクが無い
- vcpkgなどでvcpkg-configuration.jsonとvcpkg.jsonのどちらに書くかよくわからない、という事があるが、そういう問題が起こる可能性がある
それほど面倒な訳でも無いので最初から全情報用に準備しても良い気もするが、YAGNI信徒としては文字列リソースのみのjsonにしておくかなぁ。
ファイル名はstrings.jsonでは無いのか?
resourceという名前は適切なのか?という問題。 Androidなどではstrings.xmlなのでstrings.jsonの方がいいのでは?という話もある。 Reactなどもstrings.jsが良く使われるとか。
strings.jsonの方がいい気もしてきた。
Update: 2025-06-29: strings.jsonに変更。