import 'dart:async'; import 'package:sprintf/sprintf.dart'; import 'package:xml/xml.dart' as xml; import 'package:flutter/services.dart'; class StringsLocalization { static String localeCode; static Map strings = new Map(); static Future load(String l) async { localeCode = l; await rootBundle.loadString('assets/values-$localeCode/strings.xml').then((content) { content.replaceAll('=\"', '=\\"'); content.replaceAll('\">', '\\">"'); var document = xml.parse(content); strings.clear(); document.findAllElements('string').forEach((node) { strings[node.attributes[0].value] = node.text.toString(); }); }); return strings; } static String declineCurrency(int num, int code) { int residual = num % 100; if (residual >= 20) { residual %= 10; } List strings = currencies(code); switch (residual) { case 1: return strings[0]; case 2: case 3: case 4: return strings[1]; default: // case 0, 5-19 return strings[2]; } } static List currencies(int code) { String nominative, singular, plural; switch (code) { case 643: nominative = nominativeRuble(); singular = singularRuble(); plural = pluralRuble(); break; case 840: nominative = nominativeDollar(); singular = singularDollar(); plural = pluralDollar(); break; case 980: nominative = nominativeHryvna(); singular = singularHryvna(); plural = pluralHryvna(); break; case 978: nominative = nominativeEuro(); singular = singularEuro(); plural = pluralEuro(); break; case 398: nominative = nominativeTenge(); singular = singularTenge(); plural = pluralTenge(); break; case 933: nominative = nominativeRuble(); singular = singularRuble(); plural = pluralRuble(); break; case 860: nominative = nominativeSum(); singular = singularSum(); plural = pluralSum(); break; case 944: nominative = nominativeManat(); singular = singularManat(); plural = pluralManat(); break; case 051: nominative = nominativeDram(); singular = singularDram(); plural = pluralDram(); break; case 417: nominative = nominativeSom(); singular = singularSom(); plural = pluralSom(); break; case 498: nominative = nominativeLeu(); singular = singularLeu(); plural = pluralLeu(); break; case 972: nominative = nominativeSomoni(); singular = singularSomoni(); plural = pluralSomoni(); break; } return [nominative, singular, plural]; } static String confirmPurchase(String val, int code) { String trimmedVal = val.substring(0, val.length - 3); return sprintf(strings['confirm_purchase'], [val, declineCurrency(int.parse(trimmedVal), code)]); } static String purchaseCompleted(String val, int code) { String trimmedVal = val.substring(0, val.length - 3); return sprintf(strings['purchase_complite'], [val, declineCurrency(int.parse(trimmedVal), code)]); } static String paymentCompleted(String val, int code) { String trimmedVal = val.substring(0, val.length - 3); return sprintf(strings['payment_complite'], [val, declineCurrency(int.parse(trimmedVal), code)]); } static String returnConfirmation(String sum, String date, int points) => sprintf(strings['return_purchase_content'], [sum, date, points.toString()]); static String returnConfirmedContent(String sum, String date) => sprintf(strings['return_confirmation_content'], [sum, date]); static String registration() => strings['registration']; static String usage() => strings['usage']; static String support() => strings['support']; static String common() => strings['common']; static String idStore() => strings['ID_Store']; static String signUp() => strings['sign_up']; static String specifyDinStore() => strings['specify_din_store']; static String confirmation() => strings['confirmation']; static String askChangeStore() => strings['ask_change_store']; static String yes() => strings['yes']; static String no() => strings['no']; static String requestSentWaitActivation() => strings['request_sent_wait_activ']; static String refreshActivationStatus() => strings['update_activ_status']; static String appActivated() => strings['app_activ']; static String completeRegistration() => strings['complite_activ']; static String cardScanner() => strings['card_scaner']; static String card() => strings['card']; static String reward() => strings['reward']; static String sum() => strings['sum']; static String bonus() => strings['bonus']; static String couponsUsed() => strings['coupons_used']; static String selectCoupons() => strings['select_coupons']; static String carryingPurchase() => strings['carry_purchase']; static String completePurchase() => strings['complite_purchase']; static String scan() => strings['scan']; static String buyer() => strings['buyer']; static String bonusHint() => strings['bonus_hint']; static String bonusExplanation() => strings['bonus_explanation']; static String discountRate() => strings['discount_rate']; static String discountSum() => strings['discount_sum']; static String bonusPlus() => strings['bonus_plus']; static String bonusMinus() => strings['bonus_minus']; static String idNotFound() => strings['ID_not_found']; static String settings() => strings['settings']; static String help() => strings['help']; static String exit() => strings['exit']; static String logout() => strings['logout']; static String currency() => strings['currency']; static String locale() => strings['locale']; static String rfruble() => strings['rf_ruble']; static String usadollas() => strings['usa_dollas']; static String euro() => strings['euro']; static String ukhryvnia() => strings['uk_hryvnia']; static String kztenge() => strings['kz_tenge']; static String beruble() => strings['be_ruble']; static String uzbsum() => strings['uz_sum']; static String azbman() => strings['az_manat']; static String armdram() => strings['ar_dram']; static String kgssom() => strings['kg_som']; static String mdlleu() => strings['md_leu']; static String tjssomoni() => strings['tj_somoni']; static String nominativeRuble() => strings['nominative_ruble']; static String singularRuble() => strings['singular_ruble']; static String pluralRuble() => strings['plural_ruble']; static String nominativeEuro() => strings['nominative_euro']; static String singularEuro() => strings['singular_euro']; static String pluralEuro() => strings['plural_euro']; static String nominativeDollar() => strings['nominative_dollar']; static String singularDollar() => strings['singular_dollar']; static String pluralDollar() => strings['plural_dollar']; static String nominativeHryvna() => strings['nominative_hryvna']; static String singularHryvna() => strings['singular_hryvna']; static String pluralHryvna() => strings['plural_hryvna']; static String nominativeTenge() => strings['nominative_tenge']; static String singularTenge() => strings['singular_tenge']; static String pluralTenge() => strings['plural_tenge']; static String nominativeSum() => strings['nominative_sum']; static String singularSum() => strings['singular_sum']; static String pluralSum() => strings['plural_sum']; static String nominativeManat() => strings['nominative_manat']; static String singularManat() => strings['singular_manat']; static String pluralManat() => strings['plural_manat']; static String nominativeDram() => strings['nominative_dram']; static String singularDram() => strings['singular_dram']; static String pluralDram() => strings['plural_dram']; static String nominativeSom() => strings['nominative_som']; static String singularSom() => strings['singular_som']; static String pluralSom() => strings['plural_som']; static String nominativeLeu() => strings['nominative_leu']; static String singularLeu() => strings['singular_leu']; static String pluralLeu() => strings['plural_leu']; static String nominativeSomoni() => strings['nominative_somoni']; static String singularSomoni() => strings['singular_somoni']; static String pluralSomoni() => strings['plural_somoni']; static String registrationGuide() => strings['registration_guide']; static String usageGuide() => strings['usage_guide']; static String commonGuide() => strings['common_guide'].replaceAll('\n', "\n"); static String supportGuide(String phone, String url) => sprintf(strings['support_guide'], [phone, url]); static String joys() => strings['joys']; static String joysMinus() => strings['joys_minus']; static String joysHint() => strings['joys_hint']; static String phone() => strings['phone']; static String returnLabel() => strings['returnLabel']; static String returnConfirmed() => strings['return_confirmation']; static String points() => strings['points']; }