ponshu-room-lite/lib/utils/translations.dart

108 lines
6.2 KiB
Dart

// Simple translation helper for Ponshu Room Lite
//
// Usage:
// ```dart
// final t = Translations(locale);
// Text(t['home'])
// ```
class Translations {
final String locale;
Translations(this.locale);
static const Map<String, Map<String, String>> _translations = {
// Navigation
'home': {'ja': 'ホーム', 'en': 'Home'},
'scan': {'ja': 'スキャン', 'en': 'Scan'},
'sommelier': {'ja': 'ソムリエ', 'en': 'Sommelier'},
'map': {'ja': 'マップ', 'en': 'Map'},
'myPage': {'ja': 'マイページ', 'en': 'My Page'},
'promo': {'ja': '販促', 'en': 'Promo'},
'analytics': {'ja': '分析', 'en': 'Analytics'},
'shop': {'ja': '店舗', 'en': 'Shop'},
// Home Screen
'menuCreation': {'ja': 'お品書き作成', 'en': 'Menu Creation'},
'searchPlaceholder': {'ja': '銘柄・酒蔵・都道府県...', 'en': 'Brand, Brewery, Prefecture...'},
'sort': {'ja': '並び替え', 'en': 'Sort'},
'filterByPrefecture': {'ja': '都道府県で絞り込み', 'en': 'Filter by Prefecture'},
'favoritesOnly': {'ja': 'お気に入りのみ', 'en': 'Favorites Only'},
'helpGuide': {'ja': 'ヘルプ・ガイド', 'en': 'Help & Guide'},
'noMenuItems': {'ja': 'お品書きに追加されたお酒はありません', 'en': 'No sake added to menu'},
'goBackToList': {'ja': 'リスト画面に戻って、掲載したいお酒の\nチェックボックスを選択してください', 'en': 'Go back to list and select sake\nyou want to include'},
'createMenu': {'ja': 'お品書きを作成', 'en': 'Create Menu'},
'createSet': {'ja': 'セットを作成', 'en': 'Create Set'},
'selectFromGallery': {'ja': 'ギャラリーから選択', 'en': 'Select from Gallery'},
'takePhoto': {'ja': 'カメラで撮影', 'en': 'Take Photo'},
// Sort Menu
'sortTitle': {'ja': '並び替え', 'en': 'Sort'},
'sortNewest': {'ja': '新しい順(登録日)', 'en': 'Newest (Registration)'},
'sortOldest': {'ja': '古い順(登録日)', 'en': 'Oldest (Registration)'},
'sortName': {'ja': '名前順(あいうえお)', 'en': 'By Name (A-Z)'},
'sortCustom': {'ja': 'カスタム(ドラッグ配置)', 'en': 'Custom (Drag & Drop)'},
// Soul Screen (My Page)
'profile': {'ja': 'プロフィール (ID)', 'en': 'Profile (ID)'},
'nickname': {'ja': 'ニックネーム', 'en': 'Nickname'},
'notSet': {'ja': '未設定', 'en': 'Not Set'},
'gender': {'ja': '性別', 'en': 'Gender'},
'mbtiDiagnosis': {'ja': 'MBTI診断', 'en': 'MBTI Type'},
'viewGuide': {'ja': 'ガイド・ヘルプを見る', 'en': 'View Guide & Help'},
'otherSettings': {'ja': 'その他', 'en': 'Others'},
// Gender
'male': {'ja': '男性', 'en': 'Male'},
'female': {'ja': '女性', 'en': 'Female'},
'genderOther': {'ja': 'その他', 'en': 'Other'},
'genderNotAnswer': {'ja': '回答しない', 'en': 'Prefer not to say'},
'selectGender': {'ja': '性別を選択', 'en': 'Select Gender'},
// Dialogs
'changeNickname': {'ja': 'ニックネーム変更', 'en': 'Change Nickname'},
'enterName': {'ja': '呼び名を入力', 'en': 'Enter your name'},
'selectMbti': {'ja': 'MBTI タイプ選択', 'en': 'Select MBTI Type'},
'mbtiDisclaimer': {'ja': '※AIによる独自の相性診断です。遊び心としてお楽しみください', 'en': '* AI-based compatibility analysis. For entertainment purposes only.'},
// Common Actions
'save': {'ja': '保存', 'en': 'Save'},
'cancel': {'ja': 'キャンセル', 'en': 'Cancel'},
'delete': {'ja': '削除', 'en': 'Delete'},
'close': {'ja': '閉じる', 'en': 'Close'},
'ok': {'ja': 'OK', 'en': 'OK'},
'confirm': {'ja': '確認', 'en': 'Confirm'},
// Gamification
'levelAndTitle': {'ja': 'レベル&称号', 'en': 'Level & Title'},
'levelDescription': {'ja': '日本酒を登録するとEXPが貯まり、レベルアップします。\n素敵な称号を目指しましょう!', 'en': 'Register sake to earn EXP and level up.\nAim for amazing titles!'},
'badgeCollection': {'ja': 'バッジコレクション', 'en': 'Badge Collection'},
'badgeDescription': {'ja': '特定の条件を満たすとバッジを獲得できます。\n「地域制覇」や「辛口党」など、様々なテーマがあります。', 'en': 'Earn badges by meeting specific conditions.\nVarious themes like "Regional Master" and "Dry Sake Lover".'},
// Business Mode Guide
'welcomeBusinessMode': {'ja': 'ビジネスモードへようこそ', 'en': 'Welcome to Business Mode'},
'businessModeDesc': {'ja': '飲食店様向けの機能を集約しました。\nメニュー作成から販促まで、\nプロの仕事を強力にサポートします。', 'en': 'Features for restaurant professionals.\nFrom menu creation to promotion,\npowerfully supporting your work.'},
'setProductCreation': {'ja': 'セット商品の作成', 'en': 'Create Set Products'},
'setProductDesc': {'ja': '飲み比べセットやコース料理など、\n複数のお酒をまとめた「セット商品」を\n簡単に作成・管理できます。', 'en': 'Easily create and manage "set products"\nlike sake tasting sets and course menus.'},
'instaPromo': {'ja': 'インスタ販促', 'en': 'Instagram Promotion'},
'instaPromoDesc': {'ja': '本日のおすすめをSNSですぐに発信。\nInstaタブから、美しい画像を\nワンタップで生成できます。', 'en': 'Share today\'s recommendations on SNS.\nGenerate beautiful images with one tap\nfrom the Insta tab.'},
'salesAnalytics': {'ja': '売上分析', 'en': 'Sales Analytics'},
'salesAnalyticsDesc': {'ja': '売れ筋や味の傾向を分析。\nお客様に喜ばれるラインナップ作りを\nデータで支援します。', 'en': 'Analyze bestsellers and taste trends.\nData-driven support for creating\na lineup customers will love.'},
};
/// Get translation for a key
String operator [](String key) {
return _translations[key]?[locale] ?? _translations[key]?['ja'] ?? key;
}
/// Get translation with fallback
String get(String key, {String? fallback}) {
return _translations[key]?[locale] ?? _translations[key]?['ja'] ?? fallback ?? key;
}
/// Check if translation exists
bool has(String key) {
return _translations.containsKey(key);
}
}