v0.2.0: i18n 18 idiomas + pantalla ajustes + bancos multiidioma

Internacionalización completa:
- 18 ficheros .arb: es, en, fr, pt, de, it, ru, ja, ko, zh, zh_TW, ar, hi, tr, pl, nl, ca, eu
- Todos los strings extraídos de todas las pantallas
- Detección automática de idioma del sistema
- Selector manual en pantalla de ajustes

Pantalla de ajustes nueva:
- Selector de idioma con banderas emoji
- Vibración ON/OFF
- Acerca de (versión, desarrollador)

Bancos de palabras multiidioma:
- palabras.json (castellano, 1000 palabras)
- palabras_en.json (inglés, 1000 palabras)
- palabras_fr.json (francés, 1000 palabras)
- Fallback a castellano si no hay banco del idioma

13138 líneas Dart, 39 ficheros, 0 issues en flutter analyze
This commit is contained in:
ShanaiaBot
2026-04-04 01:18:09 +02:00
parent de2c8ffa18
commit 1bca50af1d
56 changed files with 14389 additions and 201 deletions

View File

@@ -0,0 +1,473 @@
// ignore: unused_import
import 'package:intl/intl.dart' as intl;
import 'app_localizations.dart';
// ignore_for_file: type=lint
/// The translations for Japanese (`ja`).
class AppLocalizationsJa extends AppLocalizations {
AppLocalizationsJa([String locale = 'ja']) : super(locale);
@override
String get appTitle => 'インポスター';
@override
String get subtitle => '正体推理ゲーム';
@override
String get loadingWords => 'ワードを読み込み中...';
@override
String get playersRange => '3-20人 • インターネット不要';
@override
String get createGame => 'ゲームを作成';
@override
String get joinGame => 'ゲームに参加';
@override
String get howToPlay => '遊び方';
@override
String get settings => '設定';
@override
String get gameMode => 'ゲームモード';
@override
String get singleDevice => '1台で遊ぶ';
@override
String get multiDevice => '複数台で遊ぶ';
@override
String get category => 'カテゴリー';
@override
String get categoryAll => 'すべて';
@override
String get categoryAnimals => '動物';
@override
String get categoryFood => '食べ物';
@override
String get categoryCountries => '';
@override
String get categorySports => 'スポーツ';
@override
String get categoryProfessions => '職業';
@override
String get categoryObjects => '';
@override
String get categoryPlaces => '場所';
@override
String get categoryMovies => '映画';
@override
String get categoryMusic => '音楽';
@override
String get categoryTechnology => 'テクノロジー';
@override
String playersCount(int count) {
return 'プレイヤー ($count)';
}
@override
String get playersRangeHint => '3-20';
@override
String get playerNameHint => 'プレイヤー名';
@override
String get playerAlreadyExists => '同じ名前のプレイヤーがすでにいます';
@override
String get maxPlayersReached => '最大20人までです';
@override
String get minPlayersRequired => '最低3人必要です';
@override
String get configuration => '設定';
@override
String get impostors => '🎭 インポスター';
@override
String get impostorClue => '🔍 インポスターへのヒント';
@override
String get impostorClueDescription => 'インポスターにカテゴリーが表示されます';
@override
String get debateTime => '⏱️ 議論の時間';
@override
String get noLimit => '制限なし';
@override
String get oneMin => '1分';
@override
String get twoMin => '2分';
@override
String get threeMin => '3分';
@override
String get fiveMin => '5分';
@override
String get startGame => 'ゲーム開始';
@override
String get seeYourWord => '自分のワードを見る';
@override
String get eachPlayerMustSee => '各プレイヤーは秘密にワードを確認してください';
@override
String roundNumber(int round) {
return 'ラウンド $round';
}
@override
String get alreadySeen => 'ワードを確認済み';
@override
String get tapToSee => 'タップして確認';
@override
String get allSeenStartDebate => '全員確認済み → 議論を開始';
@override
String playersRemaining(int count) {
return '残り $count';
}
@override
String get youAreImpostor => 'あなたはインポスターです!';
@override
String get yourWordIs => 'あなたのワード:';
@override
String clueCategory(String category) {
return 'ヒント: $category';
}
@override
String get holdToSeeWord => '長押しでワードを確認';
@override
String get makeSureNoOneLooks => '他の人に見られないようにしてください';
@override
String get showingWord => '👁️ 表示中...';
@override
String get holdToSee => '👆 長押しで確認';
@override
String get seenMyWord => 'ワードを確認しました';
@override
String debateRound(int round) {
return '議論 - ラウンド $round';
}
@override
String get timeUp => '⏰ 時間切れ!';
@override
String get timeRemaining => '⏱️ 残り時間';
@override
String get playersInDebate => '議論中のプレイヤー';
@override
String activePlayersInfo(int active, int impostors) {
return '$active 人参加中 • $impostors 人のインポスターが潜伏中';
}
@override
String get eliminated => '脱落';
@override
String get notes => 'メモ';
@override
String get goToVoting => '投票へ進む';
@override
String get voting => '🗳️ 投票';
@override
String get turnToVote => '投票の番:';
@override
String votesProgress(int current, int total) {
return '投票: $current/$total';
}
@override
String get whoIsImpostor => '誰がインポスターだと思いますか?';
@override
String get confirmVote => '投票を確定';
@override
String get votingComplete => '🗳️ 投票完了';
@override
String get allVoted => '全員が投票しました!';
@override
String get tapToReveal => 'タップして結果を見る';
@override
String get revealResult => '結果を発表';
@override
String get result => '結果';
@override
String get revealing => '発表中...';
@override
String get wasImpostor => 'インポスターでした! 🎉';
@override
String get wasInnocent => '一般市民でした 😱';
@override
String get votesThisRound => 'このラウンドの投票';
@override
String get seeEndResult => '最終結果を見る';
@override
String get impostorGuessWord => 'インポスターがワードを当てる?';
@override
String get nextRound => '次のラウンドへ';
@override
String get impostorGuessTitle => '🎯 インポスターの推理';
@override
String get impostorCanGuess => '脱落したインポスターは\nワードを当てることができます';
@override
String get ifCorrectImpostorsWin => '正解すればインポスターの勝ちです!';
@override
String get guessWordHint => 'ワードは何だと思いますか?';
@override
String get dontGuess => '推理しない';
@override
String get guess => '当てる';
@override
String get correctGuess => '正解!';
@override
String theWordWas(String word) {
return 'ワードは: $word';
}
@override
String get impostorsWin => 'インポスターの勝利!';
@override
String get wrongGuess => '不正解!';
@override
String get gameContinues => 'ゲームは続きます...';
@override
String get gameOver => 'ゲーム終了';
@override
String get playersWin => 'プレイヤーの勝利!';
@override
String get theSecretWordWas => '🔍 ワードは:';
@override
String categoryLabel(String category) {
return 'カテゴリー: $category';
}
@override
String get theImpostorWas => '🎭 インポスターは:';
@override
String get theImpostorsWere => '🎭 インポスターたちは:';
@override
String get votingHistory => '📊 投票の履歴';
@override
String roundElimination(int round, String name) {
return 'ラウンド $round: $name';
}
@override
String get rematch => 'もう一度';
@override
String get mainMenu => 'メインメニュー';
@override
String get notesTitle => '📝 メモ';
@override
String get notesSaved => 'メモを保存しました';
@override
String get whoAreYou => 'あなたは誰?';
@override
String get selectYourName => '名前を選んで自分のメモを見る';
@override
String notesOf(String name) {
return '$nameのメモ';
}
@override
String get notesAboutPlayers => '各プレイヤーについてのメモ';
@override
String get playerNoteHint => '何を言った?怪しい?';
@override
String get freeNote => 'フリーメモ';
@override
String get freeNoteHint => '個人メモ...';
@override
String get rulesTitle => '📖 遊び方';
@override
String get rulesWhatIsTitle => '🎭 インポスターとは?';
@override
String get rulesWhatIsBody =>
'3〜20人で遊べる正体推理ゲームです。全員にお題のワードが配られますが…インポスターだけは知りませんあなたの使命誰がなりすましているかを見抜くことです。';
@override
String get rulesHowToPlayTitle => '🔍 遊び方は?';
@override
String get rulesHowToPlayBody =>
'1. 役割の配布:全員に同じワードが配られますが、インポスターには配られません。\n\n2. 議論:順番に、各プレイヤーがワードを直接言わずに説明します。インポスターは知っているフリをしなければなりません。\n\n3. 投票:議論が終わったら、全員がインポスターだと思う人に投票します。\n\n4. 脱落:最も票を集めた人が脱落し、インポスターかどうかが明かされます。\n\n5. インポスターだった場合、ワードを当てるチャンスがあります。当たればインポスターの勝ち!';
@override
String get rulesWhoWinsTitle => '🏆 誰が勝つ?';
@override
String get rulesWhoWinsBody =>
'• プレイヤー:すべてのインポスターを脱落させれば勝利。\n• インポスター:正体がバレずに一般プレイヤーと同数以下になるまで残れば勝利。また、脱落時にワードを当てても勝利。';
@override
String get rulesTipsPlayersTitle => '💡 プレイヤーへのアドバイス';
@override
String get rulesTipsPlayersBody =>
'• ワードを知っていると証明できるさりげないヒントを出しましょう。ただし、インポスターに利用されるほど分かりやすくしないこと。\n• 曖昧で抽象的な回答をする人に注目しましょう。\n• メモを活用して各自の発言を記録しましょう。\n• ワードを直接言ってはいけません。インポスターを助けることになります!';
@override
String get rulesTipsImpostorTitle => '🎭 インポスターへのアドバイス';
@override
String get rulesTipsImpostorBody =>
'• 他のプレイヤーのヒントをよく聞きましょう。\n• ワードを推測して、もっともらしいヒントを出しましょう。\n• 自信がなければ最初に話さないようにしましょう。\n• カテゴリーがヒントとして出されたら、それを利用しましょう。\n• 他の人を疑って注意をそらしましょう。';
@override
String get rulesModesTitle => '📱 ゲームモード';
@override
String get rulesModesBody =>
'• 1台で遊ぶ端末を全員で共有します。各プレイヤーはボタンを長押しして自分のワードを確認します。\n\n• 複数台で遊ぶ各プレイヤーが自分の端末を使います。Bluetooth/WiFi Directで接続、インターネット不要。';
@override
String get rulesExampleTitle => '✏️ ゲームの例';
@override
String get rulesExampleBody =>
'お題のワード:「ピザ」\n\n• さくら:「温かいうちに食べる」 ✓\n• たくや:「箱に入って届く」 ✓\n• ゆい(インポスター):「とても人気がある」 🤔\n• けんと:「チーズがのっている」 ✓\n\nゆいの答えはあまりにも曖昧... 怪しい!';
@override
String get joinGameTitle => 'ゲームに参加';
@override
String get multiDeviceMode => '複数台モード';
@override
String get scanQrDescription =>
'ホストが表示するQRコードをスキャンして、Bluetooth/WiFi Direct経由でゲームに接続します。';
@override
String get comingSoon => '近日公開';
@override
String get nearbyNotAvailable =>
'複数台接続のNearby Connectionsには、物理的なAndroid端末が必要です。\n\n現時点では「1台で遊ぶ」モードをご利用ください。';
@override
String get back => '戻る';
@override
String get yes => 'はい';
@override
String get no => 'いいえ';
@override
String get cancel => 'キャンセル';
@override
String get accept => 'OK';
@override
String get next => '次へ';
@override
String get settingsTitle => '設定';
@override
String get language => '言語';
@override
String get soundVolume => '効果音の音量';
@override
String get vibration => 'バイブレーション';
@override
String get about => 'アプリについて';
@override
String get version => 'バージョン';
@override
String get developer => '開発者';
@override
String get licenses => 'ライセンス';
}