# Gopeed コントリビューターガイド まず最初に、Gopeed への貢献に興味を持っていただきありがとうございます。このガイドは、あなたが Gopeed の 開発に参加するための手助けとなるでしょう。 ## ブランチの説明 このプロジェクトのメインブランチは `main` ブランチのみです。Gopeed の開発に参加したい場合は、 まずこのプロジェクトをフォークし、フォークしたプロジェクトで開発を行ってください。開発が完了したら、 このプロジェクトに PR を提出し、`main` ブランチにマージしてください。 ## ローカル開発 開発およびデバッグはウェブ上で行うことを推奨する。まずバックエンドのサービスを起動し、 コマンドライン `go run cmd/api/main.go` で起動する。サービスのデフォルトポートは `9999` で、 次にフロントエンドの flutter プロジェクトを `debug` モードで起動して実行します。 ## 翻訳 Flutter の翻訳ファイルは `ui/flutter/lib/l10n` にあります。`app_en.arb` を原文テンプレートとして、 `app_.arb`(例: `app_de.arb`、`app_zh_TW.arb`)を編集または追加してください。すべての言語で 英語テンプレートと同じメッセージ key が必要です。 翻訳するのはメッセージ値だけです。`{count}` や `{name}` など、中括弧内の変数名は変更しないでください。 `@` で始まるメタデータ key は翻訳しません。変更した ARB ソースファイルだけをコミットし、 `app_localizations*.dart` は生成もコミットも不要です。PR の CI が全言語を検証し、国際化コードを生成して 統合結果を確認します。 以下の例では、ARB に記述する定義と、アプリが値を渡した後にユーザーが実際に見る表示を示します。 1. メッセージに変数を挿入する ARB 定義: ```json "welcomeUser": "こんにちは、{name}" ``` 最終表示:`name = 太郎` の場合は「こんにちは、太郎」と表示されます。語順は変更できますが、`{name}` は残します。 2. 数量に応じて表示を切り替える ARB 定義: ```json "fileCount": "{count, plural, =0{ファイルなし} =1{1 個のファイル} other{{count} 個のファイル}}" ``` 最終表示: - `count = 0` →「ファイルなし」 - `count = 1` →「1 個のファイル」 - `count = 3` →「3 個のファイル」 `=0`、`=1`、`other` はそれぞれ 0、1、その他の数量を表します。各分岐の中で画面に表示される文字だけを翻訳します。 3. 変数の値に応じて表示を切り替える ARB 定義: ```json "taskState": "{state, select, running{実行中} paused{一時停止} other{不明}}" ``` 最終表示: - `state = running` →「実行中」 - `state = paused` →「一時停止」 - その他の値 →「不明」 `running`、`paused`、`other` はアプリが渡す分岐値なので翻訳せず、その後の中括弧内にある表示文字だけを翻訳します。 ## flutter での開発 コミットする前に `dart format ./ui/flutter` を実行し、コードを標準の dart フォーマットにしておくことを忘れないでください api/models を編集したい場合は build_runner watcher をオンにします: ``` flutter pub run build_runner watch ```