import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:intl/intl.dart' as intl; import 'app_localizations_en.dart'; import 'app_localizations_ja.dart'; import 'app_localizations_ko.dart'; // ignore_for_file: type=lint /// Callers can lookup localized strings with an instance of L10n /// returned by `L10n.of(context)`. /// /// Applications need to include `L10n.delegate()` in their app's /// `localizationDelegates` list, and the locales they support in the app's /// `supportedLocales` list. For example: /// /// ```dart /// import 'l10n/app_localizations.dart'; /// /// return MaterialApp( /// localizationsDelegates: L10n.localizationsDelegates, /// supportedLocales: L10n.supportedLocales, /// home: MyApplicationHome(), /// ); /// ``` /// /// ## Update pubspec.yaml /// /// Please make sure to update your pubspec.yaml to include the following /// packages: /// /// ```yaml /// dependencies: /// # Internationalization support. /// flutter_localizations: /// sdk: flutter /// intl: any # Use the pinned version from flutter_localizations /// /// # Rest of dependencies /// ``` /// /// ## iOS Applications /// /// iOS applications define key application metadata, including supported /// locales, in an Info.plist file that is built into the application bundle. /// To configure the locales supported by your app, you’ll need to edit this /// file. /// /// First, open your project’s ios/Runner.xcworkspace Xcode workspace file. /// Then, in the Project Navigator, open the Info.plist file under the Runner /// project’s Runner folder. /// /// Next, select the Information Property List item, select Add Item from the /// Editor menu, then select Localizations from the pop-up menu. /// /// Select and expand the newly-created Localizations item then, for each /// locale your application supports, add a new item and select the locale /// you wish to add from the pop-up menu in the Value field. This list should /// be consistent with the languages listed in the L10n.supportedLocales /// property. abstract class L10n { L10n(String locale) : localeName = intl.Intl.canonicalizedLocale(locale.toString()); final String localeName; static L10n of(BuildContext context) { return Localizations.of(context, L10n)!; } static const LocalizationsDelegate delegate = _L10nDelegate(); /// A list of this localizations delegate along with the default localizations /// delegates. /// /// Returns a list of localizations delegates containing this delegate along with /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, /// and GlobalWidgetsLocalizations.delegate. /// /// Additional delegates can be added by appending to this list in /// MaterialApp. This list does not have to be used at all if a custom list /// of delegates is preferred or required. static const List> localizationsDelegates = >[ delegate, GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate, GlobalWidgetsLocalizations.delegate, ]; /// A list of this localizations delegate's supported locales. static const List supportedLocales = [ Locale('en'), Locale('ja'), Locale('ko'), ]; /// Application title /// /// In en, this message translates to: /// **'ASCII NEVER DIE'** String get appTitle; /// Tag indicating offline mode /// /// In en, this message translates to: /// **'No network'** String get tagNoNetwork; /// Tag indicating idle RPG gameplay /// /// In en, this message translates to: /// **'Idle RPG loop'** String get tagIdleRpg; /// Tag indicating local save support /// /// In en, this message translates to: /// **'Local saves'** String get tagLocalSaves; /// New character button /// /// In en, this message translates to: /// **'New character'** String get newCharacter; /// Load save button /// /// In en, this message translates to: /// **'Load save'** String get loadSave; /// Load game dialog title /// /// In en, this message translates to: /// **'Load Game'** String get loadGame; /// View build plan button /// /// In en, this message translates to: /// **'View build plan'** String get viewBuildPlan; /// Build roadmap section title /// /// In en, this message translates to: /// **'Build roadmap'** String get buildRoadmap; /// Tech stack section title /// /// In en, this message translates to: /// **'Tech stack'** String get techStack; /// Cancel button /// /// In en, this message translates to: /// **'Cancel'** String get cancel; /// Exit game dialog title /// /// In en, this message translates to: /// **'Exit Game'** String get exitGame; /// Save progress confirmation message /// /// In en, this message translates to: /// **'Save your progress before leaving?'** String get saveProgressQuestion; /// Exit without saving button /// /// In en, this message translates to: /// **'Exit without saving'** String get exitWithoutSaving; /// Save and exit button /// /// In en, this message translates to: /// **'Save and Exit'** String get saveAndExit; /// Game screen title with character name /// /// In en, this message translates to: /// **'ASCII NEVER DIE - {name}'** String progressQuestTitle(String name); /// Level up tooltip /// /// In en, this message translates to: /// **'Level Up'** String get levelUp; /// Complete quest tooltip /// /// In en, this message translates to: /// **'Complete Quest'** String get completeQuest; /// Complete plot tooltip /// /// In en, this message translates to: /// **'Complete Plot'** String get completePlot; /// Character sheet panel title /// /// In en, this message translates to: /// **'Character Sheet'** String get characterSheet; /// Traits section title /// /// In en, this message translates to: /// **'Traits'** String get traits; /// Stats section title /// /// In en, this message translates to: /// **'Stats'** String get stats; /// Experience section title /// /// In en, this message translates to: /// **'Experience'** String get experience; /// XP needed tooltip /// /// In en, this message translates to: /// **'XP needed for next level'** String get xpNeededForNextLevel; /// Skills section title (unified spellbook + skills) /// /// In en, this message translates to: /// **'Skills'** String get spellBook; /// Empty skills message /// /// In en, this message translates to: /// **'No skills yet'** String get noSpellsYet; /// Equipment panel title /// /// In en, this message translates to: /// **'Equipment'** String get equipment; /// Inventory panel title /// /// In en, this message translates to: /// **'Inventory'** String get inventory; /// Encumbrance section title /// /// In en, this message translates to: /// **'Encumbrance'** String get encumbrance; /// Combat log panel title /// /// In en, this message translates to: /// **'Combat Log'** String get combatLog; /// Plot development panel title /// /// In en, this message translates to: /// **'Plot Development'** String get plotDevelopment; /// Quests panel title /// /// In en, this message translates to: /// **'Quests'** String get quests; /// Name trait label /// /// In en, this message translates to: /// **'Name'** String get traitName; /// Race trait label /// /// In en, this message translates to: /// **'Race'** String get traitRace; /// Class trait label /// /// In en, this message translates to: /// **'Class'** String get traitClass; /// Level trait label /// /// In en, this message translates to: /// **'Level'** String get traitLevel; /// Strength stat /// /// In en, this message translates to: /// **'STR'** String get statStr; /// Constitution stat /// /// In en, this message translates to: /// **'CON'** String get statCon; /// Dexterity stat /// /// In en, this message translates to: /// **'DEX'** String get statDex; /// Intelligence stat /// /// In en, this message translates to: /// **'INT'** String get statInt; /// Wisdom stat /// /// In en, this message translates to: /// **'WIS'** String get statWis; /// Charisma stat /// /// In en, this message translates to: /// **'CHA'** String get statCha; /// Max HP stat /// /// In en, this message translates to: /// **'HP Max'** String get statHpMax; /// Max MP stat /// /// In en, this message translates to: /// **'MP Max'** String get statMpMax; /// Weapon equipment slot /// /// In en, this message translates to: /// **'Weapon'** String get equipWeapon; /// Shield equipment slot /// /// In en, this message translates to: /// **'Shield'** String get equipShield; /// Helm equipment slot /// /// In en, this message translates to: /// **'Helm'** String get equipHelm; /// Hauberk equipment slot /// /// In en, this message translates to: /// **'Hauberk'** String get equipHauberk; /// Brassairts equipment slot /// /// In en, this message translates to: /// **'Brassairts'** String get equipBrassairts; /// Vambraces equipment slot /// /// In en, this message translates to: /// **'Vambraces'** String get equipVambraces; /// Gauntlets equipment slot /// /// In en, this message translates to: /// **'Gauntlets'** String get equipGauntlets; /// Gambeson equipment slot /// /// In en, this message translates to: /// **'Gambeson'** String get equipGambeson; /// Cuisses equipment slot /// /// In en, this message translates to: /// **'Cuisses'** String get equipCuisses; /// Greaves equipment slot /// /// In en, this message translates to: /// **'Greaves'** String get equipGreaves; /// Sollerets equipment slot /// /// In en, this message translates to: /// **'Sollerets'** String get equipSollerets; /// Coin label /// /// In en, this message translates to: /// **'Coin'** String get gold; /// Coin with amount /// /// In en, this message translates to: /// **'Coin: {amount}'** String goldAmount(int amount); /// Prologue plot stage /// /// In en, this message translates to: /// **'Prologue'** String get prologue; /// Act with roman numeral /// /// In en, this message translates to: /// **'Act {number}'** String actNumber(String number); /// Empty quests message /// /// In en, this message translates to: /// **'No active quests'** String get noActiveQuests; /// Quest with number /// /// In en, this message translates to: /// **'Quest #{number}'** String questNumber(int number); /// Welcome message in task progress panel /// /// In en, this message translates to: /// **'Welcome to ASCII NEVER DIE!'** String get welcomeMessage; /// No saved games message /// /// In en, this message translates to: /// **'No saved games found.'** String get noSavedGames; /// Load error message /// /// In en, this message translates to: /// **'Failed to load save file: {error}'** String loadError(String error); /// Name label in character creation /// /// In en, this message translates to: /// **'Name'** String get name; /// Generate name tooltip /// /// In en, this message translates to: /// **'Generate Name'** String get generateName; /// Total label for stats /// /// In en, this message translates to: /// **'Total'** String get total; /// Undo button for stat reroll /// /// In en, this message translates to: /// **'Undo'** String get unroll; /// Roll button /// /// In en, this message translates to: /// **'Roll'** String get roll; /// Race selection title /// /// In en, this message translates to: /// **'Race'** String get race; /// Class selection title /// /// In en, this message translates to: /// **'Class'** String get classTitle; /// Percentage complete /// /// In en, this message translates to: /// **'{percent}% complete'** String percentComplete(int percent); /// New character screen title /// /// In en, this message translates to: /// **'ASCII NEVER DIE - New Character'** String get newCharacterTitle; /// Confirm character creation button /// /// In en, this message translates to: /// **'Sold!'** String get soldButton; /// Victory overlay congratulations /// /// In en, this message translates to: /// **'★ CONGRATULATIONS ★'** String get endingCongratulations; /// Game completion message /// /// In en, this message translates to: /// **'You have completed the game!'** String get endingGameComplete; /// Hero section title /// /// In en, this message translates to: /// **'THE HERO'** String get endingTheHero; /// Level display format /// /// In en, this message translates to: /// **'Level {level}'** String endingLevelFormat(int level); /// Journey statistics section title /// /// In en, this message translates to: /// **'JOURNEY STATISTICS'** String get endingJourneyStats; /// Monsters killed stat label /// /// In en, this message translates to: /// **'Monsters Slain'** String get endingMonstersSlain; /// Quests completed stat label /// /// In en, this message translates to: /// **'Quests Completed'** String get endingQuestsCompleted; /// Play time stat label /// /// In en, this message translates to: /// **'Play Time'** String get endingPlayTime; /// Final stats section title /// /// In en, this message translates to: /// **'FINAL STATS'** String get endingFinalStats; /// Credits section title /// /// In en, this message translates to: /// **'CREDITS'** String get endingCredits; /// Thank you message /// /// In en, this message translates to: /// **'Thank you for playing!'** String get endingThankYou; /// Legend message /// /// In en, this message translates to: /// **'Your legend lives on...'** String get endingLegendLivesOn; /// Hall of fame message line 1 /// /// In en, this message translates to: /// **'Your heroic deeds will be'** String get endingHallOfFameLine1; /// Hall of fame message line 2 /// /// In en, this message translates to: /// **'remembered in the Hall of Fame'** String get endingHallOfFameLine2; /// Hall of fame button /// /// In en, this message translates to: /// **'HALL OF FAME'** String get endingHallOfFameButton; /// Skip button /// /// In en, this message translates to: /// **'SKIP'** String get endingSkip; /// Tap to skip hint /// /// In en, this message translates to: /// **'TAP TO SKIP'** String get endingTapToSkip; /// Hold to speed up scrolling hint /// /// In en, this message translates to: /// **'HOLD TO SPEED UP'** String get endingHoldToSpeedUp; /// Menu panel title /// /// In en, this message translates to: /// **'MENU'** String get menuTitle; /// Options menu title /// /// In en, this message translates to: /// **'OPTIONS'** String get optionsTitle; /// Sound dialog title /// /// In en, this message translates to: /// **'SOUND'** String get soundTitle; /// Control section title /// /// In en, this message translates to: /// **'CONTROL'** String get controlSection; /// Info section title /// /// In en, this message translates to: /// **'INFO'** String get infoSection; /// Settings section title /// /// In en, this message translates to: /// **'SETTINGS'** String get settingsSection; /// Save/Exit section title /// /// In en, this message translates to: /// **'SAVE / EXIT'** String get saveExitSection; /// OK button /// /// In en, this message translates to: /// **'OK'** String get ok; /// Recharge button /// /// In en, this message translates to: /// **'RECHARGE'** String get rechargeButton; /// Create button /// /// In en, this message translates to: /// **'CREATE'** String get createButton; /// Preview panel title /// /// In en, this message translates to: /// **'PREVIEW'** String get previewTitle; /// Name panel title /// /// In en, this message translates to: /// **'NAME'** String get nameTitle; /// Stats panel title /// /// In en, this message translates to: /// **'STATS'** String get statsTitle; /// Race panel title /// /// In en, this message translates to: /// **'RACE'** String get raceTitle; /// Class panel title /// /// In en, this message translates to: /// **'CLASS'** String get classSection; /// BGM volume label /// /// In en, this message translates to: /// **'BGM'** String get bgmLabel; /// SFX volume label /// /// In en, this message translates to: /// **'SFX'** String get sfxLabel; /// HP bar label /// /// In en, this message translates to: /// **'HP'** String get hpLabel; /// MP bar label /// /// In en, this message translates to: /// **'MP'** String get mpLabel; /// EXP bar label /// /// In en, this message translates to: /// **'EXP'** String get expLabel; /// Level up notification title /// /// In en, this message translates to: /// **'LEVEL UP!'** String get notifyLevelUp; /// Level notification subtitle /// /// In en, this message translates to: /// **'Level {level}'** String notifyLevel(int level); /// Quest complete notification title /// /// In en, this message translates to: /// **'QUEST COMPLETE!'** String get notifyQuestComplete; /// Prologue complete notification title /// /// In en, this message translates to: /// **'PROLOGUE COMPLETE!'** String get notifyPrologueComplete; /// Act complete notification title /// /// In en, this message translates to: /// **'ACT {number} COMPLETE!'** String notifyActComplete(int number); /// New spell notification title /// /// In en, this message translates to: /// **'NEW SPELL!'** String get notifyNewSpell; /// New equipment notification title /// /// In en, this message translates to: /// **'NEW EQUIPMENT!'** String get notifyNewEquipment; /// Boss defeated notification title /// /// In en, this message translates to: /// **'BOSS DEFEATED!'** String get notifyBossDefeated; /// Recharge rolls dialog title /// /// In en, this message translates to: /// **'RECHARGE ROLLS'** String get rechargeRollsTitle; /// Recharge rolls free user message /// /// In en, this message translates to: /// **'Recharge 5 rolls for free?'** String get rechargeRollsFree; /// Recharge rolls ad message /// /// In en, this message translates to: /// **'Watch an ad to recharge 5 rolls?'** String get rechargeRollsAd; /// Debug section title /// /// In en, this message translates to: /// **'DEBUG'** String get debugTitle; /// Debug cheats section title /// /// In en, this message translates to: /// **'DEBUG CHEATS'** String get debugCheatsTitle; /// Debug tools section title /// /// In en, this message translates to: /// **'DEBUG TOOLS'** String get debugToolsTitle; /// Developer tools header /// /// In en, this message translates to: /// **'DEVELOPER TOOLS'** String get debugDeveloperTools; /// Skip task cheat label /// /// In en, this message translates to: /// **'SKIP TASK (L+1)'** String get debugSkipTask; /// Skip task cheat description /// /// In en, this message translates to: /// **'Complete task instantly'** String get debugSkipTaskDesc; /// Skip quest cheat label /// /// In en, this message translates to: /// **'SKIP QUEST (Q!)'** String get debugSkipQuest; /// Skip quest cheat description /// /// In en, this message translates to: /// **'Complete quest instantly'** String get debugSkipQuestDesc; /// Skip act cheat label /// /// In en, this message translates to: /// **'SKIP ACT (P!)'** String get debugSkipAct; /// Skip act cheat description /// /// In en, this message translates to: /// **'Complete act instantly'** String get debugSkipActDesc; /// Create test character button /// /// In en, this message translates to: /// **'CREATE TEST CHARACTER'** String get debugCreateTestCharacter; /// Create test character description /// /// In en, this message translates to: /// **'Register Level 100 character to Hall of Fame'** String get debugCreateTestCharacterDesc; /// Create test character dialog title /// /// In en, this message translates to: /// **'CREATE TEST CHARACTER?'** String get debugCreateTestCharacterTitle; /// Create test character confirmation message /// /// In en, this message translates to: /// **'Current character will be converted to Level 100\nand registered to the Hall of Fame.\n\n⚠️ Current save file will be deleted.\nThis action cannot be undone.'** String get debugCreateTestCharacterMessage; /// Debug turbo mode label /// /// In en, this message translates to: /// **'DEBUG: TURBO (20x)'** String get debugTurbo; /// IAP purchased debug toggle /// /// In en, this message translates to: /// **'IAP PURCHASED'** String get debugIapPurchased; /// IAP purchased debug description /// /// In en, this message translates to: /// **'ON: Behave as paid user (ads removed)'** String get debugIapPurchasedDesc; /// Offline hours debug label /// /// In en, this message translates to: /// **'OFFLINE HOURS'** String get debugOfflineHours; /// Offline hours debug description /// /// In en, this message translates to: /// **'Test return rewards (applies on restart)'** String get debugOfflineHoursDesc; /// Test character creation description /// /// In en, this message translates to: /// **'Modify current character to Level 100\nand register to the Hall of Fame.'** String get debugTestCharacterDesc; } class _L10nDelegate extends LocalizationsDelegate { const _L10nDelegate(); @override Future load(Locale locale) { return SynchronousFuture(lookupL10n(locale)); } @override bool isSupported(Locale locale) => ['en', 'ja', 'ko'].contains(locale.languageCode); @override bool shouldReload(_L10nDelegate old) => false; } L10n lookupL10n(Locale locale) { // Lookup logic when only language code is specified. switch (locale.languageCode) { case 'en': return L10nEn(); case 'ja': return L10nJa(); case 'ko': return L10nKo(); } throw FlutterError( 'L10n.delegate failed to load unsupported locale "$locale". This is likely ' 'an issue with the localizations generation tool. Please file an issue ' 'on GitHub with a reproducible sample app and the gen-l10n configuration ' 'that was used.', ); }