Explorar o código

feat: 增加多个语言支持和刷新优化

lilu hai 3 meses
pai
achega
420d88aab6

+ 2 - 2
.vscode/launch.json

@@ -45,7 +45,7 @@
             "name": "universal-prod",
             "request": "launch",
             "type": "dart",
-            "flutterMode": "debug",
+            "flutterMode": "release",
             "args": [
                 "--flavor=universalProd",
                 "--dart-define=ENV=prod"
@@ -55,7 +55,7 @@
             "name": "google-prod",
             "request": "launch",
             "type": "dart",
-            "flutterMode": "debug",
+            "flutterMode": "release",
             "args": [
                 "--flavor=googleProd",
                 "--dart-define=ENV=prod"

+ 13 - 5
lib/app/modules/language/controllers/language_controller.dart

@@ -21,11 +21,6 @@ class LanguageController extends GetxController {
   // 支持的语言列表
   final List<LanguageInfo> languages = [
     LanguageInfo(code: 'en', name: 'English', nativeName: '英语'),
-    // LanguageInfo(
-    //   code: 'zh',
-    //   name: 'Chinese (Simplified)',
-    //   nativeName: '中文 (简体)',
-    // ),
     LanguageInfo(code: 'es', name: 'Español', nativeName: '西班牙语'),
     LanguageInfo(code: 'fr', name: 'Français', nativeName: '法语'),
     LanguageInfo(code: 'de', name: 'Deutsch', nativeName: '德语'),
@@ -35,6 +30,19 @@ class LanguageController extends GetxController {
     LanguageInfo(code: 'my', name: 'မြန်မာဘာသာ', nativeName: '缅甸语'),
     LanguageInfo(code: 'ar', name: 'عربي', nativeName: '阿拉伯语'),
     LanguageInfo(code: 'ru', name: 'Русский', nativeName: '俄语'),
+    LanguageInfo(code: 'zh', name: '繁體中文', nativeName: '繁体中文'),
+    LanguageInfo(code: 'tk', name: 'Türkmençe', nativeName: '土库曼语'),
+    LanguageInfo(
+      code: 'pt',
+      name: 'Português (Brasil)',
+      nativeName: '葡萄牙语 (巴西)',
+    ),
+    LanguageInfo(code: 'vi', name: 'Tiếng Việt', nativeName: '越南语'),
+    LanguageInfo(code: 'id', name: 'Bahasa Indonesia', nativeName: '印尼语'),
+    LanguageInfo(code: 'tl', name: 'Filipino', nativeName: '菲律宾语'),
+    LanguageInfo(code: 'th', name: 'ไทย', nativeName: '泰语'),
+    LanguageInfo(code: 'hi', name: 'हिन्दी', nativeName: '印地语'),
+    LanguageInfo(code: 'tr', name: 'Türkçe', nativeName: '土耳其语'),
   ];
 
   @override

+ 99 - 68
lib/app/widgets/gradient_circle_header.dart

@@ -45,6 +45,7 @@ class _GradientCircleHeaderState
   late AnimationController _rotateCtl; // 旋转动画控制器
   late AnimationController _colorCtl; // 颜色过渡动画控制器
   double _currentOffset = 0.0; // 跟踪当前下拉距离
+  bool _svgsPrecached = false; // SVG 是否已预加载
 
   // 默认状态的背景渐变
   final Color _defaultBgStartColor = const Color(0xA6BABABA);
@@ -168,6 +169,47 @@ class _GradientCircleHeaderState
     super.initState();
   }
 
+  @override
+  void didChangeDependencies() {
+    super.didChangeDependencies();
+    // 预加载 SVG 图标,避免首次显示时闪烁
+    _precacheSvgs();
+  }
+
+  /// 预加载所有状态使用的 SVG 图标
+  void _precacheSvgs() {
+    if (_svgsPrecached) return;
+    _svgsPrecached = true;
+
+    // 预缓存刷新状态的 SVG
+    final refreshLoader = SvgAssetLoader(Assets.refreshCircle);
+    svg.cache.putIfAbsent(
+      refreshLoader.cacheKey(null),
+      () => refreshLoader.loadBytes(null),
+    );
+
+    // 预缓存成功状态的 SVG
+    final successLoader = SvgAssetLoader(Assets.successCircle);
+    svg.cache.putIfAbsent(
+      successLoader.cacheKey(null),
+      () => successLoader.loadBytes(null),
+    );
+
+    // 预缓存失败状态的 SVG
+    final failedLoader = SvgAssetLoader(Assets.failedCircle);
+    svg.cache.putIfAbsent(
+      failedLoader.cacheKey(null),
+      () => failedLoader.loadBytes(null),
+    );
+
+    // 预缓存下拉箭头的 SVG
+    final arrowLoader = SvgAssetLoader(Assets.arrowDownCircle);
+    svg.cache.putIfAbsent(
+      arrowLoader.cacheKey(null),
+      () => arrowLoader.loadBytes(null),
+    );
+  }
+
   // 颜色过渡方法
   void _animateToColor({
     required Color bgStartColor,
@@ -238,71 +280,66 @@ class _GradientCircleHeaderState
       const double circleRadius = 15.0;
       const double topMargin = 12.0;
       final double topCircleCenterY = topMargin + circleRadius;
-      final double cylinderHeight = _animationController?.value ?? 0.0;
+      // 刷新状态强制使用圆形,避免第一帧动画值未归零导致的闪烁
+      const double cylinderHeight = 0.0;
       final double bottomCircleCenterY = topCircleCenterY + cylinderHeight;
       final double arrowTopPosition =
           bottomCircleCenterY - 10.0; // 10是图标高度的一半(20/2)
 
       return widget.refresh ??
-          SizedBox(
-            height: 60.0,
-            child: Stack(
-              clipBehavior: Clip.none,
-              children: <Widget>[
-                // 绘制圆形边框
-                CustomPaint(
-                  painter: _GradientCircleToCylinderPainter(
-                    listener: _animationController,
-                    bgStartColor: _currentBgStartColor,
-                    bgEndColor: _currentBgEndColor,
-                    borderColors: _currentBorderColors,
-                    currentOffset: _currentOffset,
-                    isDefaultStyle: true, // 刷新状态使用默认样式渐变方向
+          FadeTransition(
+            opacity: _dismissCtl,
+            child: SizedBox(
+              height: 60.0,
+              child: Stack(
+                clipBehavior: Clip.none,
+                children: <Widget>[
+                  // 绘制圆形边框
+                  CustomPaint(
+                    painter: _GradientCircleToCylinderPainter(
+                      listener: _animationController,
+                      bgStartColor: _currentBgStartColor,
+                      bgEndColor: _currentBgEndColor,
+                      borderColors: _currentBorderColors,
+                      currentOffset: 42.0, // 强制使用完整圆形的 offset
+                      isDefaultStyle: true, // 刷新状态使用默认样式渐变方向
+                      forceCircle: true, // 强制显示圆形,避免闪烁
+                    ),
+                    child: Container(height: 60.0),
                   ),
-                  child: Container(height: 60.0),
-                ),
-                // 旋转的刷新图标
-                Positioned(
-                  left: 0,
-                  right: 0,
-                  top: arrowTopPosition,
-                  child: RotationTransition(
-                    turns: _rotateCtl,
-                    child: SvgPicture.asset(
-                      Assets.refreshCircle,
-                      width: 20,
-                      height: 20,
+                  // 旋转的刷新图标
+                  Positioned(
+                    left: 0,
+                    right: 0,
+                    top: arrowTopPosition,
+                    child: RotationTransition(
+                      turns: _rotateCtl,
+                      child: SvgPicture.asset(
+                        Assets.refreshCircle,
+                        width: 20,
+                        height: 20,
+                      ),
                     ),
                   ),
-                ),
-              ],
+                ],
+              ),
             ),
           );
     } else if (mode == RefreshStatus.completed) {
-      // 停止旋转动画,启动颜色过渡动画
+      // 停止旋转动画
       _rotateCtl.stop();
-      _animateToColor(
-        bgStartColor: _successBgStartColor,
-        bgEndColor: _successBgEndColor,
-        borderColors: _successBorderColors,
-      );
 
       // 重置 dismiss 控制器,确保可见
       if (_dismissCtl.value != 1.0) {
         _dismissCtl.value = 1.0;
       }
 
-      // 确保动画值是0(圆形状态)
-      if (!_animationController!.isAnimating &&
-          _animationController!.value != 0.0) {
-        _animationController!.value = 0.0;
-      }
-
       // 和刷新状态一样显示圆形边框,但颜色变绿,图标变成成功图标
       const double circleRadius = 15.0;
       const double topMargin = 12.0;
       final double topCircleCenterY = topMargin + circleRadius;
-      final double cylinderHeight = _animationController?.value ?? 0.0;
+      // 成功状态强制使用圆形
+      const double cylinderHeight = 0.0;
       final double bottomCircleCenterY = topCircleCenterY + cylinderHeight;
       final double arrowTopPosition =
           bottomCircleCenterY - 10.0; // 10是图标高度的一半(20/2)
@@ -315,14 +352,15 @@ class _GradientCircleHeaderState
               child: Stack(
                 clipBehavior: Clip.none,
                 children: <Widget>[
-                  // 绘制圆形边框(绿色渐变)
+                  // 绘制圆形边框(绿色渐变)- 直接使用成功状态颜色
                   CustomPaint(
                     painter: _GradientCircleToCylinderPainter(
                       listener: _animationController,
-                      bgStartColor: _currentBgStartColor,
-                      bgEndColor: _currentBgEndColor,
-                      borderColors: _currentBorderColors,
-                      currentOffset: _currentOffset,
+                      bgStartColor: _successBgStartColor,
+                      bgEndColor: _successBgEndColor,
+                      borderColors: _successBorderColors,
+                      currentOffset: 42.0, // 强制使用完整圆形的 offset
+                      forceCircle: true, // 强制显示圆形
                     ),
                     child: Container(height: 60.0),
                   ),
@@ -342,30 +380,20 @@ class _GradientCircleHeaderState
             ),
           );
     } else if (mode == RefreshStatus.failed) {
-      // 停止旋转动画,启动颜色过渡动画
+      // 停止旋转动画
       _rotateCtl.stop();
-      _animateToColor(
-        bgStartColor: _failedBgStartColor,
-        bgEndColor: _failedBgEndColor,
-        borderColors: _failedBorderColors,
-      );
 
       // 重置 dismiss 控制器,确保可见
       if (_dismissCtl.value != 1.0) {
         _dismissCtl.value = 1.0;
       }
 
-      // 确保动画值是0(圆形状态)
-      if (!_animationController!.isAnimating &&
-          _animationController!.value != 0.0) {
-        _animationController!.value = 0.0;
-      }
-
       // 和刷新状态一样显示圆形边框,但颜色变红,图标变成失败图标
       const double circleRadius = 15.0;
       const double topMargin = 12.0;
       final double topCircleCenterY = topMargin + circleRadius;
-      final double cylinderHeight = _animationController?.value ?? 0.0;
+      // 失败状态强制使用圆形
+      const double cylinderHeight = 0.0;
       final double bottomCircleCenterY = topCircleCenterY + cylinderHeight;
       final double arrowTopPosition =
           bottomCircleCenterY - 10.0; // 10是图标高度的一半(20/2)
@@ -378,14 +406,15 @@ class _GradientCircleHeaderState
               child: Stack(
                 clipBehavior: Clip.none,
                 children: <Widget>[
-                  // 绘制圆形边框(红色渐变)
+                  // 绘制圆形边框(红色渐变)- 直接使用失败状态颜色
                   CustomPaint(
                     painter: _GradientCircleToCylinderPainter(
                       listener: _animationController,
-                      bgStartColor: _currentBgStartColor,
-                      bgEndColor: _currentBgEndColor,
-                      borderColors: _currentBorderColors,
-                      currentOffset: _currentOffset,
+                      bgStartColor: _failedBgStartColor,
+                      bgEndColor: _failedBgEndColor,
+                      borderColors: _failedBorderColors,
+                      currentOffset: 42.0, // 强制使用完整圆形的 offset
+                      forceCircle: true, // 强制显示圆形
                     ),
                     child: Container(height: 60.0),
                   ),
@@ -498,8 +527,9 @@ class _GradientCircleToCylinderPainter extends CustomPainter {
   final List<Color> borderColors;
   final double currentOffset; // 当前下拉距离
   final bool isDefaultStyle; // 是否为默认/刷新状态的样式
+  final bool forceCircle; // 强制显示圆形(用于 refreshing/completed/failed 状态)
 
-  double get value => listener!.value;
+  double get value => forceCircle ? 0.0 : listener!.value;
 
   _GradientCircleToCylinderPainter({
     this.listener,
@@ -508,7 +538,8 @@ class _GradientCircleToCylinderPainter extends CustomPainter {
     required this.borderColors,
     required this.currentOffset,
     this.isDefaultStyle = false,
-  }) : super(repaint: listener);
+    this.forceCircle = false,
+  }) : super(repaint: forceCircle ? null : listener); // forceCircle 时不需要监听动画
 
   @override
   void paint(Canvas canvas, Size size) {

+ 3 - 0
lib/config/theme/dark_theme_colors.dart

@@ -97,4 +97,7 @@ class DarkThemeColors {
   static const Color validTermColor = Color(0xFFFFCC00);
 
   static const Color deleteAccountIconColor = Color(0xFFEF0000);
+  static const Color disconnectedIconColor = Color(0xFF646776);
+  static const Color connectingIconColor = Color(0xFFEA9800);
+  static const Color connectedIconColor = Color(0xFF5182E1);
 }

+ 11 - 0
lib/config/translations/en_US/en_us_translation.dart

@@ -379,4 +379,15 @@ Map<String, String> enUs = {
   // Push Notifications
   Strings.pushNotifications: 'Push Notifications',
   Strings.upgradeNow: 'Upgrade Now',
+
+  // 新语言
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
 };

+ 297 - 0
lib/config/translations/hi_IN/hi_in_translation.dart

@@ -0,0 +1,297 @@
+import '../strings_enum.dart';
+
+Map<String, String> hiIN = {
+  Strings.someThingWentWorng: 'कुछ गलत हो गया',
+  Strings.retry: 'पुनः प्रयास करें',
+  Strings.settings: 'सेटिंग्स',
+  Strings.language: 'भाषा',
+  Strings.termsOfService: 'सेवा की शर्तें',
+  Strings.privacyPolicy: 'गोपनीयता नीति',
+  Strings.version: 'संस्करण',
+  Strings.ok: 'ठीक है',
+  Strings.cancel: 'रद्द करें',
+  Strings.oops: 'उफ़',
+  Strings.copied: 'कॉपी किया गया',
+  Strings.later: 'बाद में',
+  Strings.noData: 'कोई डेटा नहीं',
+  Strings.refresh: 'रिफ्रेश करें',
+  Strings.unableToConnectNetwork: 'कृपया अपना इंटरनेट कनेक्शन जांचें',
+  Strings.unableToConnectServer: 'सर्वर अस्थायी रूप से अनुपलब्ध है, कृपया बाद में पुनः प्रयास करें',
+  Strings.regionRestricted: 'स्थानीय कानूनों और नियमों के कारण, FKey सेवा आपके क्षेत्र में उपलब्ध नहीं है।',
+  Strings.updateNow: 'अभी अपडेट करें',
+  Strings.newVersionAvailable: 'नया संस्करण उपलब्ध',
+  Strings.eUtilOpenEmail: 'ईमेल खोलने में त्रुटि',
+  Strings.eUtilOpenBrowser: 'ब्राउज़र खोलने में त्रुटि',
+  Strings.eUtilOpenGooglePlay: 'Google Play खोलने में त्रुटि',
+  Strings.error: 'त्रुटि',
+  Strings.terms: 'शर्तें',
+  Strings.privacy: 'गोपनीयता',
+  Strings.termsAgreementPrefix: 'साइन अप या जारी रखकर, आप हमारी ',
+  Strings.termsAgreementConnector: ' और ',
+  Strings.account: 'खाता',
+  Strings.processing: 'प्रोसेस हो रहा है...',
+  Strings.success: 'सफल',
+  Strings.unknownError: 'अज्ञात त्रुटि',
+  Strings.failed: 'विफल',
+  Strings.exit: 'बाहर निकलें',
+  Strings.feedback: 'फीडबैक',
+  Strings.networkSection: 'नेटवर्क',
+  Strings.securitySection: 'सुरक्षा',
+  Strings.myPreCode: 'मेरा Pre Code',
+  Strings.validTerm: 'वैधता अवधि',
+  Strings.freeTime: 'मुफ्त समय',
+  Strings.deviceAuthorization: 'डिवाइस प्राधिकरण',
+  Strings.routingMode: 'राउटिंग मोड',
+  Strings.splitTunneling: 'स्प्लिट टनलिंग',
+  Strings.autoReconnect: 'ऑटो रीकनेक्ट',
+  Strings.restoreDefault: 'डिफ़ॉल्ट पुनर्स्थापित करें',
+  Strings.deleteAccount: 'खाता हटाएं',
+  Strings.logout: 'लॉग आउट',
+  Strings.connecting: 'कनेक्ट हो रहा है...',
+  Strings.connected: 'कनेक्टेड',
+  Strings.disconnected: 'डिस्कनेक्टेड',
+  Strings.open: 'खोलें',
+  Strings.disconnect: 'डिस्कनेक्ट करें',
+  Strings.connect: 'कनेक्ट करें',
+  Strings.opening: 'खुल रहा है',
+  Strings.connectedSuccessfully: 'सफलतापूर्वक कनेक्ट हुआ',
+  Strings.willOpenSoon: 'जल्द खुलेगा',
+  Strings.netflix: 'Netflix',
+  Strings.youtube: 'YouTube',
+  Strings.amazon: 'Amazon',
+  Strings.hulu: 'hulu',
+  Strings.niftyStreaming: 'Nifty Streaming',
+  Strings.youtubeStreaming: 'YouTube Streaming',
+  Strings.amazonStreaming: 'Amazon Streaming',
+  Strings.huluStreaming: 'hulu Streaming',
+  Strings.excludeSelectedAppsFromVPN: 'चयनित ऐप्स को VPN से बाहर रखें',
+  Strings.useVPNForSelectedAppsOnly: 'केवल चयनित ऐप्स के लिए VPN का उपयोग करें',
+  Strings.selectApps: 'ऐप्स चुनें',
+  Strings.customizeYourVPN: 'अपना VPN कस्टमाइज़ करें',
+  Strings.subscription: 'सब्सक्रिप्शन',
+  Strings.currentSubscription: 'वर्तमान सब्सक्रिप्शन',
+  Strings.upgradeToPremium: 'Premium में अपग्रेड करें',
+  Strings.activatePreCode: 'Pre Code सक्रिय करें',
+  Strings.preCodeHint: 'यदि आपके पास Pre code है, तो कृपया अपने Pre लाभ प्राप्त करने के लिए इसे दर्ज करें।',
+  Strings.planChangeInfo: 'प्लान परिवर्तन जानकारी',
+  Strings.whenItStarts: 'कब शुरू होगा',
+  Strings.whatHappensToYourBalance: 'आपके बैलेंस का क्या होगा',
+  Strings.extraTime: 'अतिरिक्त समय',
+  Strings.yourNewPlanBeginsRightAway: 'आपका नया प्लान तुरंत शुरू हो जाएगा।',
+  Strings.anyUnusedAmountFromYourOldPlan: 'आपके पुराने प्लान से कोई भी अप्रयुक्त राशि नए प्लान में जोड़ दी जाएगी।',
+  Strings.youllGetExtraDays: 'आपको शेष बैलेंस के आधार पर अतिरिक्त दिन मिलेंगे।',
+  Strings.premiumsIncluded: 'Premium में शामिल',
+  Strings.unlockAllFreeLocations: 'सभी मुफ्त स्थान अनलॉक करें',
+  Strings.unlockSmartMode: 'स्मार्ट मोड अनलॉक करें',
+  Strings.unlockMultiHopMode: 'Multi-hop मोड अनलॉक करें',
+  Strings.premiumCanShareXDevices: 'Premium X डिवाइस साझा कर सकता है',
+  Strings.ownYourOwnPrivateServer: 'अपना खुद का प्राइवेट सर्वर रखें',
+  Strings.closeAds: 'विज्ञापन बंद करें',
+  Strings.confirmChange: 'परिवर्तन की पुष्टि करें',
+  Strings.restorePurchases: 'खरीदारी पुनर्स्थापित करें',
+  Strings.paymentIssue: 'भुगतान समस्या',
+  Strings.yearlyAutoRenewCancelAnytime: 'वार्षिक ऑटो-रिन्यू। कभी भी रद्द करें',
+  Strings.recent: 'हाल का',
+  Strings.moviesAndTV: 'फिल्में और TV',
+  Strings.social: 'सोशल',
+  Strings.support: 'सहायता',
+  Strings.sport: 'खेल',
+  Strings.music: 'संगीत',
+  Strings.game: 'गेम',
+  Strings.sorry: 'क्षमा करें',
+  Strings.unableToLoadData: 'डेटा लोड करने में असमर्थ',
+  Strings.dueLawsAndRegulations: 'स्थानीय कानूनों और नियमों के कारण, \nNOMOVPN सेवाएं आपके वर्तमान क्षेत्र में \nउपलब्ध नहीं हैं।',
+  Strings.sendPreCodeToEmail: 'Pre Code ईमेल पर भेजें',
+  Strings.selectServer: 'सर्वर चुनें',
+  Strings.premiumActivated: 'Premium सफलतापूर्वक सक्रिय!',
+  Strings.premiumActivatedMessage: 'आपको Premium में अपग्रेड कर दिया गया है। सभी उन्नत सुविधाओं और बेहतर ब्राउज़िंग अनुभव का आनंद लें।',
+  Strings.gotIt: 'समझ गया',
+  Strings.emailSent: 'ईमेल सफलतापूर्वक भेजा गया',
+  Strings.emailSentMessage: 'आपका Pre Code आपके ईमेल पर भेज दिया गया है।\nकृपया अपना इनबॉक्स (और स्पैम फ़ोल्डर) जांचें।',
+  Strings.noInternetConnection: 'इंटरनेट कनेक्शन नहीं',
+  Strings.noInternetMessage: 'ऐसा लगता है कि आप ऑफ़लाइन हैं। कृपया अपना इंटरनेट कनेक्शन जांचें और पुनः प्रयास करें।',
+  Strings.logOut: 'लॉग आउट',
+  Strings.logOutConfirmMessage: 'क्या आप वाकई लॉग आउट करना चाहते हैं? आपको अपनी Premium सुविधाओं तक पहुंचने के लिए फिर से साइन इन करना होगा।',
+  Strings.thankYouFeedback: 'आपके फीडबैक के लिए धन्यवाद!',
+  Strings.feedbackMessage: 'हमें खेद है कि आप अपने अनुभव का आनंद नहीं ले रहे हैं। हम जल्द ही इसे सुधारने की पूरी कोशिश करेंगे।',
+  Strings.done: 'हो गया',
+  Strings.whatIsUid: 'UID क्या है?',
+  Strings.uidMessage: 'डिवाइस ID (UID) यह आपके डिवाइस का अद्वितीय पहचानकर्ता है। यह ID प्रदान करने से हमारी सहायता टीम को आपके डिवाइस को सत्यापित करने और आपकी समस्याओं को तेज़ी से हल करने में मदद मिलती है।',
+  Strings.confirm: 'पुष्टि करें',
+  Strings.copy: 'कॉपी करें',
+  Strings.pleaseKeepPageOpen: 'कृपया इस पेज को खुला रखें।',
+  Strings.authorizationCode: 'प्राधिकरण कोड',
+  Strings.authorizationCodeDesc: 'यह 6-अंकीय कोड VIP उपयोगकर्ता को आपके डिवाइस को लिंक करने की अनुमति देता है। यह हर 15 मिनट में रिफ्रेश होता है।',
+  Strings.shareWithPreUser: 'Pre उपयोगकर्ता के साथ साझा करें',
+  Strings.shareWithPreUserDesc: 'VIP उपयोगकर्ता को यह कोड बताएं ताकि वे अपने डिवाइस पर इसे दर्ज करके आपको प्राधिकृत कर सकें।',
+  Strings.waitingForAuthorization: 'प्राधिकरण की प्रतीक्षा में',
+  Strings.waitingForAuthorizationDesc: 'कृपया इस पेज को खुला रखें।\nस्वीकृति के बाद, आपका खाता स्वचालित रूप से अपग्रेड और पुनः कनेक्ट हो जाएगा।',
+  Strings.enterCode: 'कोड दर्ज करें',
+  Strings.enterCodeDesc: 'अन्य डिवाइस (मुफ्त उपयोगकर्ता) पर दिखाया गया 6-अंकीय कोड दर्ज करें। यह कोड हर 15 मिनट में रिफ्रेश होता है।',
+  Strings.verifyDevice: 'डिवाइस सत्यापित करें',
+  Strings.verifyDeviceDesc: 'हम जांचेंगे कि दर्ज किया गया कोड प्राधिकरण की प्रतीक्षा कर रहे सक्रिय डिवाइस से मेल खाता है या नहीं।',
+  Strings.authorizationSuccessful: 'प्राधिकरण सफल',
+  Strings.authorizationSuccessfulDesc: 'पुष्टि होने के बाद, डिवाइस स्वचालित रूप से अपग्रेड और आपके खाते से लिंक हो जाएगा।',
+  Strings.deviceLimitReached: 'डिवाइस सीमा पूरी हुई',
+  Strings.deviceLimitMessage: 'आप केवल अधिकतम प्राधिकृत कर सकते हैं',
+  Strings.devices: 'डिवाइस',
+  Strings.deviceAuthorized: 'डिवाइस प्राधिकृत',
+  Strings.deviceAuthorizedMessage: 'नया डिवाइस सफलतापूर्वक प्राधिकृत किया गया',
+  Strings.relieveDevice: 'डिवाइस हटाएं',
+  Strings.relieveDeviceMessage: 'क्या आप वाकई हटाना चाहते हैं',
+  Strings.relieveDeviceLoseAccess: 'यह डिवाइस Premium एक्सेस खो देगा।',
+  Strings.deviceRelieved: 'डिवाइस हटाया गया',
+  Strings.deviceRelievedMessage: 'को प्राधिकृत डिवाइस से हटा दिया गया है',
+  Strings.currentDevice: 'वर्तमान डिवाइस',
+  Strings.androidDevices: 'Android डिवाइस',
+  Strings.authCodeCopied: 'प्राधिकरण कोड कॉपी किया गया',
+  Strings.invalidAuthorizationCode: 'अमान्य प्राधिकरण कोड',
+  Strings.invalidAuthorizationCodeMessage: 'आपने जो कोड दर्ज किया है वह गलत है या समाप्त हो गया है।\nकृपया अन्य डिवाइस पर 6-अंकीय कोड जांचें और पुनः प्रयास करें।',
+  Strings.invalidAuthorizationCodeButton: 'पुनः प्रयास करें',
+  Strings.codeBackedUpMessage: 'आपका कोड इस ईमेल पर बैकअप किया जाएगा।',
+  Strings.enterYourEmail: 'अपना ईमेल दर्ज करें',
+  Strings.sendYourEmail: 'अपना ईमेल भेजें',
+  Strings.yourPreCredential: 'आपका Pre क्रेडेंशियल',
+  Strings.yourPreCredentialDesc: 'यह आपका VIP क्रेडेंशियल है। कृपया इसे सुरक्षित रखें और किसी के साथ साझा न करें।',
+  Strings.secureEmailBackup: 'सुरक्षित ईमेल बैकअप',
+  Strings.secureEmailBackupDesc: 'हम इस क्रेडेंशियल वाला एक ईमेल आपके निर्दिष्ट ईमेल पते पर सुरक्षित रखने के लिए भेजेंगे।',
+  Strings.sendAndSave: 'भेजें और सहेजें',
+  Strings.sendAndSaveDesc: 'ईमेल भेजने के बाद, हम अनुशंसा करते हैं कि आप इस क्रेडेंशियल को अपने डिवाइस पर किसी सुरक्षित स्थान पर भी सहेजें।',
+  Strings.smart: 'स्मार्ट',
+  Strings.smartModeDesc: 'स्थानीय और VPN नेटवर्क सह-अस्तित्व में हैं, और इष्टतम मार्ग बुद्धिमानी से चुना जाता है।',
+  Strings.global: 'ग्लोबल',
+  Strings.globalModeDesc: 'अधिकतम गोपनीयता और सुरक्षा सुनिश्चित करने के लिए सभी ट्रैफ़िक VPN सर्वर के माध्यम से रूट किया जाता है।',
+  Strings.perYear: 'प्रति वर्ष',
+  Strings.yearlyPlan: 'वार्षिक प्लान',
+  Strings.mostlyChoose: 'सबसे ज्यादा चुना गया',
+  Strings.once: 'एक बार',
+  Strings.lifeTime: 'आजीवन',
+  Strings.monthPlan: 'मासिक प्लान',
+  Strings.perWeek: 'प्रति सप्ताह',
+  Strings.weekPlan: 'साप्ताहिक प्लान',
+  Strings.limitedTime: 'सीमित समय',
+  Strings.subscriptionChanged: 'सब्सक्रिप्शन प्लान सफलतापूर्वक बदला गया',
+  Strings.restoringPurchases: 'खरीदारी पुनर्स्थापित हो रही है...',
+  Strings.openingPaymentSupport: 'भुगतान सहायता खुल रही है...',
+  Strings.info: 'जानकारी',
+  Strings.vpnConnectionError: 'VPN कनेक्शन त्रुटि',
+  Strings.vpnServiceDisconnected: 'VPN सेवा अप्रत्याशित रूप से डिस्कनेक्ट हो गई',
+  Strings.failedCaptureScreenshot: 'स्क्रीनशॉट लेने में विफल',
+  Strings.imageSavedToAlbum: 'छवि आपके स्थानीय एल्बम में सहेजी गई है',
+  Strings.failedSaveImage: 'गैलरी में छवि सहेजने में विफल',
+  Strings.failedToSave: 'सहेजने में विफल',
+  Strings.failedSendEmail: 'ईमेल भेजने में विफल',
+  Strings.activeTime: 'सक्रिय समय',
+  Strings.yearPlanPrice: 'वार्षिक प्लान @price प्रति वर्ष',
+  Strings.securingData: 'डेटा सुरक्षित हो रहा है…',
+  Strings.encryptingTraffic: 'ट्रैफ़िक एन्क्रिप्ट हो रहा है…',
+  Strings.protectingPrivacy: 'गोपनीयता सुरक्षित हो रही है…',
+  Strings.safeConnection: 'सुरक्षित कनेक्शन…',
+  Strings.yourDataIsSafe: 'आपका डेटा सुरक्षित है…',
+  Strings.login: 'लॉग इन',
+  Strings.loginButton: 'लॉग इन',
+  Strings.loginDescription: 'सफल लॉगिन के बाद, आपका मुफ्त ट्रायल लागू होगा, और शेष सदस्यता सभी लिंक किए गए डिवाइस पर उपयोग के लिए आपके खाते से सिंक हो जाएगी।',
+  Strings.signup: 'NOMO में साइन अप करें',
+  Strings.signupButton: 'साइन अप',
+  Strings.signupDescription: 'पंजीकरण के बाद, आपका मुफ्त ट्रायल काट लिया जाएगा, और अन्य सदस्यता समय मल्टी-डिवाइस उपयोग के लिए आपके खाते में स्थानांतरित हो जाएगा।',
+  Strings.username: 'उपयोगकर्ता नाम',
+  Strings.password: 'पासवर्ड',
+  Strings.usernamePasswordRule: '6-20 वर्ण (अक्षर या संख्या)',
+  Strings.noAccount: 'खाता नहीं है? ',
+  Strings.registerNow: ' अभी रजिस्टर करें',
+  Strings.alreadyHaveAccount: 'पहले से खाता है? ',
+  Strings.loginNow: ' अभी लॉगिन करें',
+  Strings.feedbackPlaceholder: 'अपनी समस्या या सुझाव का वर्णन करें...',
+  Strings.emailAddressForReply: '• आपका ईमेल पता (हमारे उत्तर के लिए)',
+  Strings.send: 'भेजें',
+  Strings.changeSubscription: 'सब्सक्रिप्शन बदलें',
+  Strings.awaitingActivation: 'सक्रियण की प्रतीक्षा में',
+  Strings.relieve: 'हटाएं',
+  Strings.configureAuthorizedDevices: 'प्राधिकृत डिवाइस कॉन्फ़िगर करें...',
+  Strings.authorizeUpTo4DevicesAsPremium: 'अधिकतम @max डिवाइस को Premium के रूप में प्राधिकृत करें (@current/@max)',
+  Strings.youCanAuthorizeOtherDevices: 'आप अन्य डिवाइस को Premium उपयोगकर्ता के रूप में प्राधिकृत कर सकते हैं (@current/@max)',
+  Strings.preCodeInfoMessage: 'Pre Code आपका प्रीमियम उपयोगकर्ता क्रेडेंशियल है।\nइसका उपयोग लाभ सक्रिय करने या अन्य डिवाइस पर\nअपना खाता सिंक करने के लिए करें।',
+  Strings.pleaseStoreSecurely: 'कृपया सुरक्षित रूप से संग्रहीत करें!',
+  Strings.sendPreCodeEmailDesc: 'अपना Pre Code अपने पंजीकृत ईमेल पते पर भेजें',
+  Strings.storeLocalCopyDesc: 'इस डिवाइस पर अपने Pre Code की एक प्रति संग्रहीत करें',
+  Strings.preview: 'प्रीव्यू',
+  Strings.hide: 'छुपाएं',
+  Strings.sendToEmail: 'ईमेल पर भेजें',
+  Strings.saveLocalCopy: 'स्थानीय प्रति सहेजें',
+  Strings.secureYourConnection: 'अपना कनेक्शन सुरक्षित करें',
+  Strings.secureYourConnectionDesc: 'आप विभिन्न डिवाइस पर सदस्यता साझा करने के लिए लॉग इन या खाता पंजीकृत कर सकते हैं।',
+  Strings.save: 'सहेजें',
+  Strings.onlyOneModeActive: 'एक समय में केवल एक मोड सक्रिय हो सकता है।',
+  Strings.chooseAppsExcludeDesc: 'ऐसे ऐप्स चुनें जो VPN का उपयोग किए बिना सीधे कनेक्ट होंगे।',
+  Strings.chooseAppsIncludeDesc: 'ऐसे ऐप्स चुनें जो VPN का उपयोग करेंगे जबकि अन्य सामान्य रूप से कनेक्ट होंगे।',
+  Strings.splitTunnelingDesc: 'स्प्लिट टनलिंग आपको नियंत्रित करने देती है कि कौन से ऐप्स VPN कनेक्शन का उपयोग करते हैं और कौन से सीधे कनेक्ट होते हैं। यह बैंडविड्थ प्रबंधित करने और VPN बंद किए बिना स्थानीय या विदेशी सामग्री तक पहुंचने में मदद करता है।',
+  Strings.selectAppsExclude: 'ऐसे ऐप्स चुनें जो VPN का उपयोग नहीं करेंगे',
+  Strings.selectAppsInclude: 'ऐसे ऐप्स चुनें जो VPN का उपयोग करेंगे',
+  Strings.deselectAll: 'सभी अचयनित करें',
+  Strings.allApps: 'सभी ऐप्स',
+  Strings.howExperience: 'अब तक आपका अनुभव\nकैसा रहा?',
+  Strings.wedLoveToKnow: 'हम जानना चाहेंगे!',
+  Strings.vpnConnectionFailed: 'VPN कनेक्शन विफल',
+  Strings.internetTooSlow: 'इंटरनेट बहुत धीमा',
+  Strings.keepsDisconnecting: 'बार-बार डिस्कनेक्ट हो रहा है',
+  Strings.appCrashes: 'ऐप क्रैश या फ्रीज हो जाता है',
+  Strings.otherIssues: 'अन्य समस्याएं',
+  Strings.connectionUnstable: 'कनेक्शन अस्थिर',
+  Strings.speedNotExpected: 'गति अपेक्षा के अनुरूप नहीं',
+  Strings.hardToUse: 'उपयोग करना कठिन / भ्रमित करने वाला UI',
+  Strings.worksFineNotFast: 'ठीक काम करता है लेकिन पर्याप्त तेज़ नहीं',
+  Strings.limitedFreeServers: 'सीमित मुफ्त सर्वर',
+  Strings.appCouldBeSimpler: 'ऐप सरल हो सकता है',
+  Strings.sometimesDisconnects: 'कभी-कभी डिस्कनेक्ट होता है',
+  Strings.nothingSpecial: 'कुछ खास नहीं',
+  Strings.easyToUse: 'उपयोग में आसान',
+  Strings.fastConnection: 'तेज़ कनेक्शन',
+  Strings.stablePerformance: 'स्थिर प्रदर्शन',
+  Strings.usefulFreeVersion: 'उपयोगी मुफ्त संस्करण',
+  Strings.satisfiedOverall: 'कुल मिलाकर संतुष्ट',
+  Strings.fastAndStable: 'तेज़ और स्थिर कनेक्शन',
+  Strings.greatUserExperience: 'शानदार उपयोगकर्ता अनुभव',
+  Strings.excellentPremiumFeatures: 'उत्कृष्ट प्रीमियम सुविधाएं',
+  Strings.worthRecommending: 'सिफारिश के योग्य',
+  Strings.loveTheDesign: 'मुझे डिज़ाइन पसंद है',
+  Strings.changePassword: 'पासवर्ड बदलें',
+  Strings.changePasswordDescription: 'आप सुरक्षा सुनिश्चित करने के लिए कभी भी अपना पासवर्ड बदल सकते हैं। पासवर्ड परिवर्तन पर कोई सीमा नहीं',
+  Strings.enterNewPassword: 'नया पासवर्ड दर्ज करें',
+  Strings.enterConfirmPassword: 'पुष्टि पासवर्ड दर्ज करें',
+  Strings.confirmPasswordMustBeTheSame: 'दो बार दर्ज किए गए पासवर्ड मेल नहीं खाते',
+  Strings.yes: 'हां',
+  Strings.signingUp: 'साइन अप हो रहा है...',
+  Strings.signUpSuccessful: 'साइन अप सफल',
+  Strings.loggingIn: 'लॉग इन हो रहा है...',
+  Strings.loginSuccessful: 'लॉगिन सफल',
+  Strings.loggingOut: 'लॉग आउट हो रहा है...',
+  Strings.logoutSuccessful: 'लॉगआउट सफल',
+  Strings.changingPassword: 'पासवर्ड बदल रहा है...',
+  Strings.changePasswordSuccessful: 'पासवर्ड सफलतापूर्वक बदला गया',
+  Strings.deletingAccount: 'खाता हटाया जा रहा है...',
+  Strings.deleteAccountSuccessful: 'खाता सफलतापूर्वक हटाया गया',
+  Strings.deleteAccountConfirmMessage: 'आपका खाता हटाने से आपका डेटा और सदस्यता जानकारी स्थायी रूप से हट जाएगी। इस कार्रवाई को पूर्ववत नहीं किया जा सकता।',
+  Strings.deleteAccountConfirmButton: 'हटाएं',
+  Strings.pushNotifications: 'पुश नोटिफिकेशन',
+  Strings.upgradeNow: 'अभी अपग्रेड करें',
+  Strings.enLang: 'English',
+  Strings.esLang: 'Español',
+  Strings.frLang: 'Français',
+  Strings.deLang: 'Deutsch',
+  Strings.jaLang: '日本語',
+  Strings.koLang: '한국어',
+  Strings.faLang: 'فارسی',
+  Strings.myLang: 'မြန်မာဘာသာ',
+  Strings.arLang: 'عربي',
+  Strings.ruLang: 'Русский',
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
+};
+

+ 297 - 0
lib/config/translations/id_ID/id_id_translation.dart

@@ -0,0 +1,297 @@
+import '../strings_enum.dart';
+
+Map<String, String> idID = {
+  Strings.someThingWentWorng: 'Terjadi kesalahan',
+  Strings.retry: 'Coba lagi',
+  Strings.settings: 'Pengaturan',
+  Strings.language: 'Bahasa',
+  Strings.termsOfService: 'Ketentuan Layanan',
+  Strings.privacyPolicy: 'Kebijakan Privasi',
+  Strings.version: 'Versi',
+  Strings.ok: 'OK',
+  Strings.cancel: 'Batal',
+  Strings.oops: 'Ups',
+  Strings.copied: 'Disalin',
+  Strings.later: 'Nanti',
+  Strings.noData: 'Tidak ada data',
+  Strings.refresh: 'Segarkan',
+  Strings.unableToConnectNetwork: 'Silakan periksa koneksi internet Anda',
+  Strings.unableToConnectServer: 'Server sementara tidak tersedia, silakan coba lagi nanti',
+  Strings.regionRestricted: 'Karena hukum dan peraturan setempat, layanan FKey tidak tersedia di wilayah Anda.',
+  Strings.updateNow: 'Perbarui sekarang',
+  Strings.newVersionAvailable: 'Versi baru tersedia',
+  Strings.eUtilOpenEmail: 'Kesalahan membuka email',
+  Strings.eUtilOpenBrowser: 'Kesalahan membuka browser',
+  Strings.eUtilOpenGooglePlay: 'Kesalahan membuka Google Play',
+  Strings.error: 'Kesalahan',
+  Strings.terms: 'Ketentuan',
+  Strings.privacy: 'Privasi',
+  Strings.termsAgreementPrefix: 'Dengan mendaftar atau melanjutkan, Anda menyetujui ',
+  Strings.termsAgreementConnector: ' dan ',
+  Strings.account: 'Akun',
+  Strings.processing: 'Memproses...',
+  Strings.success: 'Berhasil',
+  Strings.unknownError: 'Kesalahan tidak diketahui',
+  Strings.failed: 'Gagal',
+  Strings.exit: 'Keluar',
+  Strings.feedback: 'Umpan balik',
+  Strings.networkSection: 'Jaringan',
+  Strings.securitySection: 'Keamanan',
+  Strings.myPreCode: 'Pre Code Saya',
+  Strings.validTerm: 'Masa Berlaku',
+  Strings.freeTime: 'Waktu gratis',
+  Strings.deviceAuthorization: 'Otorisasi perangkat',
+  Strings.routingMode: 'Mode routing',
+  Strings.splitTunneling: 'Split tunneling',
+  Strings.autoReconnect: 'Sambung ulang otomatis',
+  Strings.restoreDefault: 'Pulihkan default',
+  Strings.deleteAccount: 'Hapus akun',
+  Strings.logout: 'Keluar',
+  Strings.connecting: 'Menghubungkan...',
+  Strings.connected: 'Terhubung',
+  Strings.disconnected: 'Terputus',
+  Strings.open: 'Buka',
+  Strings.disconnect: 'Putuskan',
+  Strings.connect: 'Hubungkan',
+  Strings.opening: 'Membuka',
+  Strings.connectedSuccessfully: 'Berhasil terhubung',
+  Strings.willOpenSoon: 'akan segera dibuka',
+  Strings.netflix: 'Netflix',
+  Strings.youtube: 'YouTube',
+  Strings.amazon: 'Amazon',
+  Strings.hulu: 'hulu',
+  Strings.niftyStreaming: 'Nifty Streaming',
+  Strings.youtubeStreaming: 'YouTube Streaming',
+  Strings.amazonStreaming: 'Amazon Streaming',
+  Strings.huluStreaming: 'hulu Streaming',
+  Strings.excludeSelectedAppsFromVPN: 'Kecualikan aplikasi terpilih dari VPN',
+  Strings.useVPNForSelectedAppsOnly: 'Gunakan VPN hanya untuk aplikasi terpilih',
+  Strings.selectApps: 'Pilih aplikasi',
+  Strings.customizeYourVPN: 'Sesuaikan VPN Anda',
+  Strings.subscription: 'Langganan',
+  Strings.currentSubscription: 'Langganan saat ini',
+  Strings.upgradeToPremium: 'Upgrade ke Premium',
+  Strings.activatePreCode: 'Aktifkan Pre Code',
+  Strings.preCodeHint: 'Jika Anda memiliki Pre code, silakan masukkan untuk klaim manfaat Pre Anda.',
+  Strings.planChangeInfo: 'Info perubahan paket',
+  Strings.whenItStarts: 'Kapan dimulai',
+  Strings.whatHappensToYourBalance: 'Apa yang terjadi pada saldo Anda',
+  Strings.extraTime: 'Waktu ekstra',
+  Strings.yourNewPlanBeginsRightAway: 'Paket baru Anda dimulai segera.',
+  Strings.anyUnusedAmountFromYourOldPlan: 'Jumlah yang tidak terpakai dari paket lama akan ditambahkan ke yang baru.',
+  Strings.youllGetExtraDays: 'Anda akan mendapatkan hari ekstra berdasarkan saldo tersisa.',
+  Strings.premiumsIncluded: 'Termasuk dalam Premium',
+  Strings.unlockAllFreeLocations: 'Buka semua lokasi gratis',
+  Strings.unlockSmartMode: 'Buka mode pintar',
+  Strings.unlockMultiHopMode: 'Buka mode Multi-hop',
+  Strings.premiumCanShareXDevices: 'Premium dapat berbagi X perangkat',
+  Strings.ownYourOwnPrivateServer: 'Miliki server pribadi Anda sendiri',
+  Strings.closeAds: 'Tutup iklan',
+  Strings.confirmChange: 'Konfirmasi perubahan',
+  Strings.restorePurchases: 'Pulihkan pembelian',
+  Strings.paymentIssue: 'Masalah pembayaran',
+  Strings.yearlyAutoRenewCancelAnytime: 'Perpanjang otomatis tahunan. Batalkan kapan saja',
+  Strings.recent: 'Terbaru',
+  Strings.moviesAndTV: 'Film & TV',
+  Strings.social: 'Sosial',
+  Strings.support: 'Dukungan',
+  Strings.sport: 'Olahraga',
+  Strings.music: 'Musik',
+  Strings.game: 'Game',
+  Strings.sorry: 'Maaf',
+  Strings.unableToLoadData: 'Tidak dapat memuat data',
+  Strings.dueLawsAndRegulations: 'Karena hukum dan peraturan setempat, \nlayanan NOMOVPN tidak tersedia di \nwilayah Anda saat ini.',
+  Strings.sendPreCodeToEmail: 'Kirim Pre Code ke Email',
+  Strings.selectServer: 'Pilih server',
+  Strings.premiumActivated: 'Premium berhasil diaktifkan!',
+  Strings.premiumActivatedMessage: 'Anda telah diupgrade ke Premium. Nikmati semua fitur lanjutan dan pengalaman browsing yang lebih baik.',
+  Strings.gotIt: 'Mengerti',
+  Strings.emailSent: 'Email berhasil terkirim',
+  Strings.emailSentMessage: 'Pre Code Anda telah dikirim ke email Anda.\nSilakan periksa kotak masuk (dan folder spam).',
+  Strings.noInternetConnection: 'Tidak ada koneksi internet',
+  Strings.noInternetMessage: 'Sepertinya Anda offline. Silakan periksa koneksi internet dan coba lagi.',
+  Strings.logOut: 'Keluar',
+  Strings.logOutConfirmMessage: 'Yakin ingin keluar? Anda perlu masuk lagi untuk mengakses fitur Premium.',
+  Strings.thankYouFeedback: 'Terima kasih atas umpan balik Anda!',
+  Strings.feedbackMessage: 'Kami menyesal Anda tidak menikmati pengalaman Anda. Kami akan berusaha memperbaikinya segera.',
+  Strings.done: 'Selesai',
+  Strings.whatIsUid: 'Apa itu UID?',
+  Strings.uidMessage: 'ID Perangkat (UID) Ini adalah pengenal unik perangkat Anda. Memberikan ID ini membantu tim dukungan memverifikasi perangkat dan menyelesaikan masalah Anda lebih cepat.',
+  Strings.confirm: 'Konfirmasi',
+  Strings.copy: 'Salin',
+  Strings.pleaseKeepPageOpen: 'Harap biarkan halaman ini terbuka.',
+  Strings.authorizationCode: 'Kode otorisasi',
+  Strings.authorizationCodeDesc: 'Kode 6 digit ini memungkinkan pengguna VIP menautkan perangkat Anda. Kode ini diperbarui setiap 15 menit.',
+  Strings.shareWithPreUser: 'Bagikan dengan pengguna Pre',
+  Strings.shareWithPreUserDesc: 'Beritahu pengguna VIP kode ini agar mereka dapat memasukkannya di perangkat mereka untuk mengotorisasi Anda.',
+  Strings.waitingForAuthorization: 'Menunggu otorisasi',
+  Strings.waitingForAuthorizationDesc: 'Harap biarkan halaman ini terbuka.\nSetelah disetujui, akun Anda akan otomatis diupgrade dan terhubung kembali.',
+  Strings.enterCode: 'Masukkan kode',
+  Strings.enterCodeDesc: 'Masukkan kode 6 digit yang ditampilkan di perangkat lain (pengguna gratis). Kode ini diperbarui setiap 15 menit.',
+  Strings.verifyDevice: 'Verifikasi perangkat',
+  Strings.verifyDeviceDesc: 'Kami akan memeriksa apakah kode yang dimasukkan cocok dengan perangkat aktif yang menunggu otorisasi.',
+  Strings.authorizationSuccessful: 'Otorisasi berhasil',
+  Strings.authorizationSuccessfulDesc: 'Setelah dikonfirmasi, perangkat akan otomatis diupgrade dan ditautkan ke akun Anda.',
+  Strings.deviceLimitReached: 'Batas perangkat tercapai',
+  Strings.deviceLimitMessage: 'Anda hanya dapat mengotorisasi hingga',
+  Strings.devices: 'perangkat',
+  Strings.deviceAuthorized: 'Perangkat diotorisasi',
+  Strings.deviceAuthorizedMessage: 'Perangkat baru berhasil diotorisasi',
+  Strings.relieveDevice: 'Hapus perangkat',
+  Strings.relieveDeviceMessage: 'Yakin ingin menghapus',
+  Strings.relieveDeviceLoseAccess: 'Perangkat ini akan kehilangan akses Premium.',
+  Strings.deviceRelieved: 'Perangkat dihapus',
+  Strings.deviceRelievedMessage: 'telah dihapus dari perangkat yang diotorisasi',
+  Strings.currentDevice: 'Perangkat saat ini',
+  Strings.androidDevices: 'Perangkat Android',
+  Strings.authCodeCopied: 'Kode otorisasi disalin',
+  Strings.invalidAuthorizationCode: 'Kode otorisasi tidak valid',
+  Strings.invalidAuthorizationCodeMessage: 'Kode yang Anda masukkan salah atau telah kedaluwarsa.\nSilakan periksa kode 6 digit di perangkat lain dan coba lagi.',
+  Strings.invalidAuthorizationCodeButton: 'Coba lagi',
+  Strings.codeBackedUpMessage: 'Kode Anda akan dicadangkan ke email ini.',
+  Strings.enterYourEmail: 'Masukkan email Anda',
+  Strings.sendYourEmail: 'Kirim email Anda',
+  Strings.yourPreCredential: 'Kredensial Pre Anda',
+  Strings.yourPreCredentialDesc: 'Ini adalah kredensial VIP Anda. Simpan dengan aman dan jangan bagikan kepada siapa pun.',
+  Strings.secureEmailBackup: 'Cadangan email aman',
+  Strings.secureEmailBackupDesc: 'Kami akan mengirim email berisi kredensial ini ke alamat email yang Anda tentukan untuk penyimpanan aman.',
+  Strings.sendAndSave: 'Kirim dan simpan',
+  Strings.sendAndSaveDesc: 'Setelah email terkirim, kami sarankan Anda juga menyimpan kredensial ini ke lokasi aman di perangkat Anda.',
+  Strings.smart: 'Pintar',
+  Strings.smartModeDesc: 'Jaringan lokal dan VPN berdampingan, dan rute optimal dipilih secara cerdas.',
+  Strings.global: 'Global',
+  Strings.globalModeDesc: 'Semua lalu lintas dialihkan melalui server VPN untuk memastikan privasi dan keamanan maksimal.',
+  Strings.perYear: 'Per tahun',
+  Strings.yearlyPlan: 'Paket tahunan',
+  Strings.mostlyChoose: 'Paling banyak dipilih',
+  Strings.once: 'sekali',
+  Strings.lifeTime: 'Seumur hidup',
+  Strings.monthPlan: 'Paket bulanan',
+  Strings.perWeek: 'Per minggu',
+  Strings.weekPlan: 'Paket mingguan',
+  Strings.limitedTime: 'Waktu terbatas',
+  Strings.subscriptionChanged: 'Paket langganan berhasil diubah',
+  Strings.restoringPurchases: 'Memulihkan pembelian...',
+  Strings.openingPaymentSupport: 'Membuka dukungan pembayaran...',
+  Strings.info: 'Info',
+  Strings.vpnConnectionError: 'Kesalahan koneksi VPN',
+  Strings.vpnServiceDisconnected: 'Layanan VPN terputus secara tidak terduga',
+  Strings.failedCaptureScreenshot: 'Gagal mengambil screenshot',
+  Strings.imageSavedToAlbum: 'Gambar telah disimpan ke album Anda',
+  Strings.failedSaveImage: 'Gagal menyimpan gambar ke galeri',
+  Strings.failedToSave: 'Gagal menyimpan',
+  Strings.failedSendEmail: 'Gagal mengirim email',
+  Strings.activeTime: 'Waktu aktif',
+  Strings.yearPlanPrice: 'Paket tahun @price per tahun',
+  Strings.securingData: 'Mengamankan data…',
+  Strings.encryptingTraffic: 'Mengenkripsi lalu lintas…',
+  Strings.protectingPrivacy: 'Melindungi privasi…',
+  Strings.safeConnection: 'Koneksi aman…',
+  Strings.yourDataIsSafe: 'Data Anda aman…',
+  Strings.login: 'Masuk',
+  Strings.loginButton: 'Masuk',
+  Strings.loginDescription: 'Setelah login berhasil, uji coba gratis Anda akan diterapkan, dan keanggotaan yang tersisa akan disinkronkan ke akun Anda untuk digunakan di semua perangkat yang terhubung.',
+  Strings.signup: 'Daftar ke NOMO',
+  Strings.signupButton: 'Daftar',
+  Strings.signupDescription: 'Setelah pendaftaran, uji coba gratis Anda akan dikurangi, dan waktu keanggotaan lainnya akan dipindahkan ke akun Anda untuk penggunaan multi-perangkat.',
+  Strings.username: 'Nama pengguna',
+  Strings.password: 'Kata sandi',
+  Strings.usernamePasswordRule: '6-20 karakter (huruf atau angka)',
+  Strings.noAccount: 'Belum punya akun? ',
+  Strings.registerNow: ' Daftar sekarang',
+  Strings.alreadyHaveAccount: 'Sudah punya akun? ',
+  Strings.loginNow: ' Masuk sekarang',
+  Strings.feedbackPlaceholder: 'Jelaskan masalah atau saran Anda...',
+  Strings.emailAddressForReply: '• Alamat email Anda (untuk balasan kami)',
+  Strings.send: 'Kirim',
+  Strings.changeSubscription: 'Ubah langganan',
+  Strings.awaitingActivation: 'Menunggu aktivasi',
+  Strings.relieve: 'Hapus',
+  Strings.configureAuthorizedDevices: 'Konfigurasi perangkat yang diotorisasi...',
+  Strings.authorizeUpTo4DevicesAsPremium: 'Otorisasi hingga @max perangkat sebagai Premium (@current/@max)',
+  Strings.youCanAuthorizeOtherDevices: 'Anda dapat mengotorisasi perangkat lain sebagai pengguna Premium (@current/@max)',
+  Strings.preCodeInfoMessage: 'Pre Code adalah kredensial pengguna premium Anda.\nGunakan untuk mengaktifkan manfaat atau menyinkronkan akun\ndi perangkat lain.',
+  Strings.pleaseStoreSecurely: 'Harap simpan dengan aman!',
+  Strings.sendPreCodeEmailDesc: 'Kirim Pre Code Anda ke alamat email terdaftar',
+  Strings.storeLocalCopyDesc: 'Simpan salinan Pre Code Anda di perangkat ini',
+  Strings.preview: 'Pratinjau',
+  Strings.hide: 'Sembunyikan',
+  Strings.sendToEmail: 'Kirim ke email',
+  Strings.saveLocalCopy: 'Simpan salinan lokal',
+  Strings.secureYourConnection: 'Amankan koneksi Anda',
+  Strings.secureYourConnectionDesc: 'Anda dapat masuk atau mendaftar akun untuk berbagi keanggotaan di berbagai perangkat.',
+  Strings.save: 'Simpan',
+  Strings.onlyOneModeActive: 'Hanya satu mode yang dapat aktif pada satu waktu.',
+  Strings.chooseAppsExcludeDesc: 'Pilih aplikasi yang akan terhubung langsung tanpa menggunakan VPN.',
+  Strings.chooseAppsIncludeDesc: 'Pilih aplikasi yang akan menggunakan VPN sementara yang lain terhubung normal.',
+  Strings.splitTunnelingDesc: 'Split tunneling memungkinkan Anda mengontrol aplikasi mana yang menggunakan koneksi VPN dan mana yang terhubung langsung. Ini membantu mengelola bandwidth dan mengakses konten lokal atau asing tanpa mematikan VPN.',
+  Strings.selectAppsExclude: 'Pilih aplikasi yang tidak akan menggunakan VPN',
+  Strings.selectAppsInclude: 'Pilih aplikasi yang akan menggunakan VPN',
+  Strings.deselectAll: 'Batalkan semua',
+  Strings.allApps: 'Semua aplikasi',
+  Strings.howExperience: 'Bagaimana pengalaman\nAnda sejauh ini?',
+  Strings.wedLoveToKnow: 'kami ingin tahu!',
+  Strings.vpnConnectionFailed: 'Koneksi VPN gagal',
+  Strings.internetTooSlow: 'Internet terlalu lambat',
+  Strings.keepsDisconnecting: 'Terus terputus',
+  Strings.appCrashes: 'Aplikasi crash atau freeze',
+  Strings.otherIssues: 'Masalah lain',
+  Strings.connectionUnstable: 'Koneksi tidak stabil',
+  Strings.speedNotExpected: 'Kecepatan tidak sesuai harapan',
+  Strings.hardToUse: 'Sulit digunakan / UI membingungkan',
+  Strings.worksFineNotFast: 'Berfungsi baik tapi tidak cukup cepat',
+  Strings.limitedFreeServers: 'Server gratis terbatas',
+  Strings.appCouldBeSimpler: 'Aplikasi bisa lebih sederhana',
+  Strings.sometimesDisconnects: 'Kadang terputus',
+  Strings.nothingSpecial: 'Tidak ada yang istimewa',
+  Strings.easyToUse: 'Mudah digunakan',
+  Strings.fastConnection: 'Koneksi cepat',
+  Strings.stablePerformance: 'Performa stabil',
+  Strings.usefulFreeVersion: 'Versi gratis berguna',
+  Strings.satisfiedOverall: 'Puas secara keseluruhan',
+  Strings.fastAndStable: 'Koneksi cepat dan stabil',
+  Strings.greatUserExperience: 'Pengalaman pengguna yang bagus',
+  Strings.excellentPremiumFeatures: 'Fitur premium yang sangat baik',
+  Strings.worthRecommending: 'Layak direkomendasikan',
+  Strings.loveTheDesign: 'Saya suka desainnya',
+  Strings.changePassword: 'Ubah kata sandi',
+  Strings.changePasswordDescription: 'Anda dapat mengubah kata sandi kapan saja untuk memastikan keamanan. Tidak ada batasan perubahan kata sandi',
+  Strings.enterNewPassword: 'Masukkan kata sandi baru',
+  Strings.enterConfirmPassword: 'Masukkan konfirmasi kata sandi',
+  Strings.confirmPasswordMustBeTheSame: 'Kata sandi yang dimasukkan dua kali tidak cocok',
+  Strings.yes: 'Ya',
+  Strings.signingUp: 'Mendaftar...',
+  Strings.signUpSuccessful: 'Pendaftaran berhasil',
+  Strings.loggingIn: 'Masuk...',
+  Strings.loginSuccessful: 'Login berhasil',
+  Strings.loggingOut: 'Keluar...',
+  Strings.logoutSuccessful: 'Logout berhasil',
+  Strings.changingPassword: 'Mengubah kata sandi...',
+  Strings.changePasswordSuccessful: 'Kata sandi berhasil diubah',
+  Strings.deletingAccount: 'Menghapus akun...',
+  Strings.deleteAccountSuccessful: 'Akun berhasil dihapus',
+  Strings.deleteAccountConfirmMessage: 'Menghapus akun akan menghapus data dan informasi keanggotaan Anda secara permanen. Tindakan ini tidak dapat dibatalkan.',
+  Strings.deleteAccountConfirmButton: 'Hapus',
+  Strings.pushNotifications: 'Notifikasi push',
+  Strings.upgradeNow: 'Upgrade sekarang',
+  Strings.enLang: 'English',
+  Strings.esLang: 'Español',
+  Strings.frLang: 'Français',
+  Strings.deLang: 'Deutsch',
+  Strings.jaLang: '日本語',
+  Strings.koLang: '한국어',
+  Strings.faLang: 'فارسی',
+  Strings.myLang: 'မြန်မာဘာသာ',
+  Strings.arLang: 'عربي',
+  Strings.ruLang: 'Русский',
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
+};
+

+ 71 - 2
lib/config/translations/localization_service.dart

@@ -13,6 +13,15 @@ import 'ja_JP/ja_jp_translation.dart';
 import 'fr_FR/fr_fr_translation.dart';
 import 'ru_RU/ru_ru_translation.dart';
 import 'ko_KR/ko_kr_translation.dart';
+import 'zh_TW/zh_tw_translation.dart';
+import 'tk_TM/tk_tm_translation.dart';
+import 'pt_BR/pt_br_translation.dart';
+import 'vi_VN/vi_vn_translation.dart';
+import 'id_ID/id_id_translation.dart';
+import 'tl_PH/tl_ph_translation.dart';
+import 'th_TH/th_th_translation.dart';
+import 'hi_IN/hi_in_translation.dart';
+import 'tr_TR/tr_tr_translation.dart';
 import 'strings_enum.dart';
 
 class LocalizationService extends Translations {
@@ -61,6 +70,15 @@ class LocalizationService extends Translations {
     const Locale('ko'), // 韩语
     const Locale('fa'), // 波斯语
     const Locale('my'), // 缅甸语
+    const Locale('zh', 'TW'), // 繁体中文
+    const Locale('tk'), // 土库曼语
+    const Locale('pt', 'BR'), // 葡萄牙语-巴西
+    const Locale('vi'), // 越南语
+    const Locale('id'), // 印尼语
+    const Locale('tl'), // 菲律宾语
+    const Locale('th'), // 泰语
+    const Locale('hi'), // 印地语
+    const Locale('tr'), // 土耳其语
   ];
 
   // supported languages
@@ -75,6 +93,15 @@ class LocalizationService extends Translations {
     'ko': const Locale('ko', 'KR'),
     'fa': const Locale('fa', 'IR'),
     'my': const Locale('my', 'MM'),
+    'zh': const Locale('zh', 'TW'),
+    'tk': const Locale('tk', 'TM'),
+    'pt': const Locale('pt', 'BR'),
+    'vi': const Locale('vi', 'VN'),
+    'id': const Locale('id', 'ID'),
+    'tl': const Locale('tl', 'PH'),
+    'th': const Locale('th', 'TH'),
+    'hi': const Locale('hi', 'IN'),
+    'tr': const Locale('tr', 'TR'),
   };
 
   // supported languages fonts family (must be in assets & pubspec yaml) or you can use google fonts
@@ -94,6 +121,15 @@ class LocalizationService extends Translations {
     'ko': const TextStyle(fontFamily: 'FiraSans'),
     'fa': const TextStyle(fontFamily: 'Vazirmatn'),
     'my': const TextStyle(fontFamily: 'NotoSansMyanmar'),
+    'zh': const TextStyle(fontFamily: 'FiraSans'),
+    'tk': const TextStyle(fontFamily: 'FiraSans'),
+    'pt': const TextStyle(fontFamily: 'FiraSans'),
+    'vi': const TextStyle(fontFamily: 'FiraSans'),
+    'id': const TextStyle(fontFamily: 'FiraSans'),
+    'tl': const TextStyle(fontFamily: 'FiraSans'),
+    'th': const TextStyle(fontFamily: 'FiraSans'),
+    'hi': const TextStyle(fontFamily: 'FiraSans'),
+    'tr': const TextStyle(fontFamily: 'FiraSans'),
   };
 
   @override
@@ -108,6 +144,15 @@ class LocalizationService extends Translations {
     'ko_KR': koKR,
     'fa_IR': faIR,
     'my_MM': myMM,
+    'zh_TW': zhTW,
+    'tk_TM': tkTM,
+    'pt_BR': ptBR,
+    'vi_VN': viVN,
+    'id_ID': idID,
+    'tl_PH': tlPH,
+    'th_TH': thTH,
+    'hi_IN': hiIN,
+    'tr_TR': trTR,
   };
 
   /// check if the language is supported
@@ -169,6 +214,24 @@ class LocalizationService extends Translations {
         return Strings.faLang.tr;
       case 'my':
         return Strings.myLang.tr;
+      case 'zh':
+        return Strings.zhTWLang.tr;
+      case 'tk':
+        return Strings.tkLang.tr;
+      case 'pt':
+        return Strings.ptBRLang.tr;
+      case 'vi':
+        return Strings.viLang.tr;
+      case 'id':
+        return Strings.idLang.tr;
+      case 'tl':
+        return Strings.tlLang.tr;
+      case 'th':
+        return Strings.thLang.tr;
+      case 'hi':
+        return Strings.hiLang.tr;
+      case 'tr':
+        return Strings.trLang.tr;
       default:
         return 'Unknown';
     }
@@ -182,7 +245,7 @@ class LocalizationService extends Translations {
       case 'en':
         return 'English';
       case 'tr':
-        return 'Türk';
+        return 'Türkçe';
       case 'vi':
         return 'Tiếng Việt';
       case 'uk':
@@ -192,7 +255,7 @@ class LocalizationService extends Translations {
       case 'ru':
         return 'Русский';
       case 'pt':
-        return 'Português';
+        return 'Português (Brasil)';
       case 'pl':
         return 'Polski';
       case 'ko':
@@ -217,6 +280,12 @@ class LocalizationService extends Translations {
         return '繁體中文';
       case 'my':
         return 'မြန်မာဘာသာ';
+      case 'tk':
+        return 'Türkmençe';
+      case 'tl':
+        return 'Filipino';
+      case 'th':
+        return 'ไทย';
       default:
         return 'Unknown';
     }

+ 427 - 0
lib/config/translations/pt_BR/pt_br_translation.dart

@@ -0,0 +1,427 @@
+import '../strings_enum.dart';
+
+Map<String, String> ptBR = {
+  Strings.someThingWentWorng: 'Algo deu errado',
+  Strings.retry: 'Tentar novamente',
+  //profile
+  Strings.settings: 'Configurações',
+  Strings.language: 'Idioma',
+  Strings.termsOfService: 'Termos de Serviço',
+  Strings.privacyPolicy: 'Política de Privacidade',
+  Strings.version: 'Versão',
+
+  Strings.ok: 'OK',
+  Strings.cancel: 'Cancelar',
+  Strings.oops: 'Ops',
+  Strings.copied: 'Copiado',
+  Strings.later: 'Mais tarde',
+  Strings.noData: 'Sem dados',
+
+  //empty error update
+  Strings.refresh: 'Atualizar',
+  Strings.unableToConnectNetwork: 'Verifique sua conexão com a internet',
+  Strings.unableToConnectServer:
+      'Servidor temporariamente indisponível, tente novamente mais tarde',
+  Strings.regionRestricted:
+      'Devido a leis e regulamentos locais, o serviço FKey não está disponível na sua região.',
+  Strings.updateNow: 'Atualizar agora',
+  Strings.newVersionAvailable: 'Nova versão disponível',
+
+  // util error
+  Strings.eUtilOpenEmail: 'Erro ao abrir e-mail',
+  Strings.eUtilOpenBrowser: 'Erro ao abrir navegador',
+  Strings.eUtilOpenGooglePlay: 'Erro ao abrir Google Play',
+
+  Strings.error: 'Erro',
+
+  // Privacy policy
+  Strings.terms: 'Termos',
+  Strings.privacy: 'Privacidade',
+  Strings.termsAgreementPrefix:
+      'Ao se cadastrar ou continuar, você concorda com nossos ',
+  Strings.termsAgreementConnector: ' e ',
+
+  // Account page
+  Strings.account: 'Conta',
+
+  // Dialog texts
+  Strings.processing: 'Processando...',
+  Strings.success: 'Sucesso',
+  Strings.unknownError: 'Erro desconhecido',
+  Strings.failed: 'Falhou',
+
+  // exit
+  Strings.exit: 'Sair',
+
+  // feedback
+  Strings.feedback: 'Feedback',
+
+  // setting page
+  Strings.networkSection: 'Rede',
+  Strings.securitySection: 'Segurança',
+  Strings.myPreCode: 'Meu Pre Code',
+  Strings.validTerm: 'Validade',
+  Strings.freeTime: 'Tempo grátis',
+  Strings.deviceAuthorization: 'Autorização de dispositivo',
+  Strings.routingMode: 'Modo de roteamento',
+  Strings.splitTunneling: 'Túnel dividido',
+  Strings.autoReconnect: 'Reconexão automática',
+  Strings.restoreDefault: 'Restaurar padrão',
+  Strings.deleteAccount: 'Excluir conta',
+  Strings.logout: 'Sair',
+
+  // media location page
+  Strings.connecting: 'Conectando...',
+  Strings.connected: 'Conectado',
+  Strings.disconnected: 'Desconectado',
+  Strings.open: 'Abrir',
+  Strings.disconnect: 'Desconectar',
+  Strings.connect: 'Conectar',
+  Strings.opening: 'Abrindo',
+  Strings.connectedSuccessfully: 'Conectado com sucesso',
+  Strings.willOpenSoon: 'abrirá em breve',
+  Strings.netflix: 'Netflix',
+  Strings.youtube: 'YouTube',
+  Strings.amazon: 'Amazon',
+  Strings.hulu: 'hulu',
+  Strings.niftyStreaming: 'Nifty Streaming',
+  Strings.youtubeStreaming: 'YouTube Streaming',
+  Strings.amazonStreaming: 'Amazon Streaming',
+  Strings.huluStreaming: 'hulu Streaming',
+
+  // split tunneling page
+  Strings.excludeSelectedAppsFromVPN: 'Excluir apps selecionados da VPN',
+  Strings.useVPNForSelectedAppsOnly: 'Usar VPN apenas para apps selecionados',
+  Strings.selectApps: 'Selecionar apps',
+  Strings.customizeYourVPN: 'Personalize sua VPN',
+
+  // subscription page
+  Strings.subscription: 'Assinatura',
+  Strings.currentSubscription: 'Assinatura atual',
+  Strings.upgradeToPremium: 'Atualizar para Premium',
+  Strings.activatePreCode: 'Ativar Pre Code',
+  Strings.preCodeHint:
+      'Se você tem um Pre code, insira-o para obter seus benefícios Pre.',
+  Strings.planChangeInfo: 'Info de mudança de plano',
+  Strings.whenItStarts: 'Quando começa',
+  Strings.whatHappensToYourBalance: 'O que acontece com seu saldo',
+  Strings.extraTime: 'Tempo extra',
+  Strings.yourNewPlanBeginsRightAway: 'Seu novo plano começa imediatamente.',
+  Strings.anyUnusedAmountFromYourOldPlan:
+      'Qualquer valor não utilizado do seu plano antigo será adicionado ao novo.',
+  Strings.youllGetExtraDays:
+      'Você receberá dias extras com base no seu saldo restante.',
+  Strings.premiumsIncluded: 'Incluído no Premium',
+  Strings.unlockAllFreeLocations: 'Desbloquear todas as localizações grátis',
+  Strings.unlockSmartMode: 'Desbloquear modo inteligente',
+  Strings.unlockMultiHopMode: 'Desbloquear modo Multi-hop',
+  Strings.premiumCanShareXDevices: 'Premium pode compartilhar X dispositivos',
+  Strings.ownYourOwnPrivateServer: 'Tenha seu próprio servidor privado',
+  Strings.closeAds: 'Fechar anúncios',
+  Strings.confirmChange: 'Confirmar mudança',
+  Strings.restorePurchases: 'Restaurar compras',
+  Strings.paymentIssue: 'Problema de pagamento',
+  Strings.yearlyAutoRenewCancelAnytime:
+      'Renovação automática anual. Cancele a qualquer momento',
+
+  // home page
+  Strings.recent: 'Recente',
+  Strings.moviesAndTV: 'Filmes e TV',
+  Strings.social: 'Social',
+  Strings.support: 'Suporte',
+  Strings.sport: 'Esporte',
+  Strings.music: 'Música',
+  Strings.game: 'Jogos',
+
+  // country restricted
+  Strings.sorry: 'Desculpe',
+  Strings.unableToLoadData: 'Não foi possível carregar dados',
+  Strings.dueLawsAndRegulations:
+      'Devido a leis e regulamentos locais, \nos serviços NOMOVPN não estão disponíveis \nna sua região atual.',
+
+  // more pages
+  Strings.sendPreCodeToEmail: 'Enviar Pre Code por e-mail',
+  Strings.selectServer: 'Selecionar servidor',
+
+  // Dialog messages
+  Strings.premiumActivated: 'Premium ativado com sucesso!',
+  Strings.premiumActivatedMessage:
+      'Você foi atualizado para Premium. Aproveite todos os recursos avançados e uma experiência de navegação aprimorada.',
+  Strings.gotIt: 'Entendi',
+  Strings.emailSent: 'E-mail enviado com sucesso',
+  Strings.emailSentMessage:
+      'Seu Pre Code foi enviado para seu e-mail.\nVerifique sua caixa de entrada (e pasta de spam).',
+  Strings.noInternetConnection: 'Sem conexão com a internet',
+  Strings.noInternetMessage:
+      'Parece que você está offline. Verifique sua conexão com a internet e tente novamente.',
+  Strings.logOut: 'Sair',
+  Strings.logOutConfirmMessage:
+      'Tem certeza que deseja sair? Você precisará entrar novamente para acessar seus recursos Premium.',
+  Strings.thankYouFeedback: 'Obrigado pelo seu feedback!',
+  Strings.feedbackMessage:
+      'Lamentamos que você não esteja aproveitando sua experiência. Faremos o possível para melhorar em breve.',
+  Strings.done: 'Concluído',
+  Strings.whatIsUid: 'O que é UID?',
+  Strings.uidMessage:
+      'ID do dispositivo (UID) Este é o identificador único do seu dispositivo. Fornecer este ID ajuda nossa equipe de suporte a verificar seu dispositivo e resolver seus problemas mais rapidamente.',
+  Strings.confirm: 'Confirmar',
+
+  // Device Authorization
+  Strings.copy: 'Copiar',
+  Strings.pleaseKeepPageOpen: 'Mantenha esta página aberta.',
+  Strings.authorizationCode: 'Código de autorização',
+  Strings.authorizationCodeDesc:
+      'Este código de 6 dígitos permite que um usuário VIP vincule seu dispositivo. Ele é atualizado a cada 15 minutos.',
+  Strings.shareWithPreUser: 'Compartilhar com usuário Pre',
+  Strings.shareWithPreUserDesc:
+      'Diga ao usuário VIP este código para que ele possa inseri-lo em seu dispositivo para autorizá-lo.',
+  Strings.waitingForAuthorization: 'Aguardando autorização',
+  Strings.waitingForAuthorizationDesc:
+      'Mantenha esta página aberta.\nApós aprovação, sua conta será automaticamente atualizada e reconectada.',
+  Strings.enterCode: 'Inserir código',
+  Strings.enterCodeDesc:
+      'Insira o código de 6 dígitos mostrado no outro dispositivo (usuário grátis). Este código é atualizado a cada 15 minutos.',
+  Strings.verifyDevice: 'Verificar dispositivo',
+  Strings.verifyDeviceDesc:
+      'Verificaremos se o código inserido corresponde a um dispositivo ativo aguardando autorização.',
+  Strings.authorizationSuccessful: 'Autorização bem-sucedida',
+  Strings.authorizationSuccessfulDesc:
+      'Após confirmação, o dispositivo será automaticamente atualizado e vinculado à sua conta.',
+  Strings.deviceLimitReached: 'Limite de dispositivos atingido',
+  Strings.deviceLimitMessage: 'Você só pode autorizar até',
+  Strings.devices: 'dispositivos',
+  Strings.deviceAuthorized: 'Dispositivo autorizado',
+  Strings.deviceAuthorizedMessage:
+      'Novo dispositivo foi autorizado com sucesso',
+  Strings.relieveDevice: 'Remover dispositivo',
+  Strings.relieveDeviceMessage: 'Tem certeza que deseja remover',
+  Strings.relieveDeviceLoseAccess: 'Este dispositivo perderá acesso Premium.',
+  Strings.deviceRelieved: 'Dispositivo removido',
+  Strings.deviceRelievedMessage: 'foi removido dos dispositivos autorizados',
+  Strings.currentDevice: 'Dispositivo atual',
+  Strings.androidDevices: 'Dispositivos Android',
+  Strings.authCodeCopied: 'Código de autorização copiado',
+  Strings.invalidAuthorizationCode: 'Código de autorização inválido',
+  Strings.invalidAuthorizationCodeMessage:
+      'O código inserido está incorreto ou expirou.\nVerifique o código de 6 dígitos no outro dispositivo e tente novamente.',
+  Strings.invalidAuthorizationCodeButton: 'Tentar novamente',
+
+  // Pre Code Email
+  Strings.codeBackedUpMessage: 'Seu código será salvo neste e-mail.',
+  Strings.enterYourEmail: 'Insira seu e-mail',
+  Strings.sendYourEmail: 'Enviar seu e-mail',
+  Strings.yourPreCredential: 'Sua credencial Pre',
+  Strings.yourPreCredentialDesc:
+      'Esta é sua credencial VIP. Guarde-a com segurança e não compartilhe com ninguém.',
+  Strings.secureEmailBackup: 'Backup seguro por e-mail',
+  Strings.secureEmailBackupDesc:
+      'Enviaremos um e-mail contendo esta credencial para seu endereço de e-mail especificado para guarda segura.',
+  Strings.sendAndSave: 'Enviar e salvar',
+  Strings.sendAndSaveDesc:
+      'Após o envio do e-mail, recomendamos que você também salve esta credencial em um local seguro no seu dispositivo.',
+
+  // Routing Mode
+  Strings.smart: 'Inteligente',
+  Strings.smartModeDesc:
+      'As redes local e VPN coexistem, e a rota ideal é selecionada de forma inteligente.',
+  Strings.global: 'Global',
+  Strings.globalModeDesc:
+      'Todo o tráfego é roteado através do servidor VPN para garantir máxima privacidade e segurança.',
+
+  // Subscription Plans
+  Strings.perYear: 'Por ano',
+  Strings.yearlyPlan: 'Plano anual',
+  Strings.mostlyChoose: 'Mais escolhido',
+  Strings.once: 'uma vez',
+  Strings.lifeTime: 'Vitalício',
+  Strings.monthPlan: 'Plano mensal',
+  Strings.perWeek: 'Por semana',
+  Strings.weekPlan: 'Plano semanal',
+  Strings.limitedTime: 'Tempo limitado',
+  Strings.subscriptionChanged: 'Plano de assinatura alterado com sucesso',
+  Strings.restoringPurchases: 'Restaurando compras...',
+  Strings.openingPaymentSupport: 'Abrindo suporte de pagamento...',
+  Strings.info: 'Info',
+
+  // Other messages
+  Strings.vpnConnectionError: 'Erro de conexão VPN',
+  Strings.vpnServiceDisconnected: 'Serviço VPN desconectado inesperadamente',
+  Strings.failedCaptureScreenshot: 'Falha ao capturar screenshot',
+  Strings.imageSavedToAlbum: 'A imagem foi salva no seu álbum local',
+  Strings.failedSaveImage: 'Falha ao salvar imagem na galeria',
+  Strings.failedToSave: 'Falha ao salvar',
+  Strings.failedSendEmail: 'Falha ao enviar e-mail',
+
+  // Connection status
+  Strings.activeTime: 'Tempo ativo',
+  Strings.yearPlanPrice: 'Plano anual @price por ano',
+
+  // Connecting status carousel texts
+  Strings.securingData: 'Protegendo dados…',
+  Strings.encryptingTraffic: 'Criptografando tráfego…',
+  Strings.protectingPrivacy: 'Protegendo privacidade…',
+  Strings.safeConnection: 'Conexão segura…',
+  Strings.yourDataIsSafe: 'Seus dados estão seguros…',
+
+  // Login & Signup
+  Strings.login: 'Entrar',
+  Strings.loginButton: 'Entrar',
+  Strings.loginDescription:
+      'Após um login bem-sucedido, seu período de teste grátis será aplicado, e a assinatura restante será sincronizada com sua conta para uso em todos os dispositivos vinculados.',
+  Strings.signup: 'Cadastrar no NOMO',
+  Strings.signupButton: 'Cadastrar',
+  Strings.signupDescription:
+      'Após o cadastro, seu período de teste grátis será deduzido, e outros tempos de assinatura serão transferidos para sua conta para uso em múltiplos dispositivos.',
+  Strings.username: 'Nome de usuário',
+  Strings.password: 'Senha',
+  Strings.usernamePasswordRule: '6-20 caracteres (letras ou números)',
+  Strings.noAccount: 'Não tem conta? ',
+  Strings.registerNow: ' Cadastre-se agora',
+  Strings.alreadyHaveAccount: 'Já tem uma conta? ',
+  Strings.loginNow: ' Entre agora',
+
+  // Feedback
+  Strings.feedbackPlaceholder: 'Descreva seu problema ou sugestão...',
+  Strings.emailAddressForReply: '• Seu endereço de e-mail (para nossa resposta)',
+  Strings.send: 'Enviar',
+
+  // Account page additions
+  Strings.changeSubscription: 'Alterar assinatura',
+  Strings.awaitingActivation: 'Aguardando ativação',
+  Strings.relieve: 'Remover',
+  Strings.configureAuthorizedDevices: 'Configurar dispositivos autorizados...',
+  Strings.authorizeUpTo4DevicesAsPremium:
+      'Autorizar até @max dispositivos como Premium (@current/@max)',
+  Strings.youCanAuthorizeOtherDevices:
+      'Você pode autorizar outros dispositivos como usuários Premium (@current/@max)',
+
+  // Pre Code page
+  Strings.preCodeInfoMessage:
+      'Pre Code é sua credencial de usuário premium.\nUse-o para ativar benefícios ou sincronizar sua conta\nem outros dispositivos.',
+  Strings.pleaseStoreSecurely: 'Guarde-o com segurança!',
+  Strings.sendPreCodeEmailDesc:
+      'Envie seu Pre Code para seu endereço de e-mail cadastrado',
+  Strings.storeLocalCopyDesc:
+      'Armazene uma cópia do seu Pre Code neste dispositivo',
+  Strings.preview: 'Visualizar',
+  Strings.hide: 'Ocultar',
+  Strings.sendToEmail: 'Enviar por e-mail',
+  Strings.saveLocalCopy: 'Salvar cópia local',
+
+  // Splash page
+  Strings.secureYourConnection: 'Proteja sua conexão',
+  Strings.secureYourConnectionDesc:
+      'Você pode entrar ou cadastrar uma conta para compartilhar a assinatura entre diferentes dispositivos.',
+
+  // Pre Code Save Dialog
+  Strings.save: 'Salvar',
+
+  // Split Tunneling
+  Strings.onlyOneModeActive: 'Apenas um modo pode estar ativo por vez.',
+  Strings.chooseAppsExcludeDesc:
+      'Escolha apps que se conectarão diretamente sem usar a VPN.',
+  Strings.chooseAppsIncludeDesc:
+      'Escolha apps que usarão a VPN enquanto outros se conectam normalmente.',
+  Strings.splitTunnelingDesc:
+      'O túnel dividido permite controlar quais apps usam a conexão VPN e quais se conectam diretamente. Ajuda a gerenciar largura de banda e acessar conteúdo local ou estrangeiro sem desligar a VPN.',
+  Strings.selectAppsExclude: 'Selecionar apps que não usarão a VPN',
+  Strings.selectAppsInclude: 'Selecionar apps que usarão a VPN',
+  Strings.deselectAll: 'Desmarcar todos',
+  Strings.allApps: 'Todos os apps',
+
+  // Feedback Bottom Sheet
+  Strings.howExperience: 'Como está sua\nexperiência até agora?',
+  Strings.wedLoveToKnow: 'adoraríamos saber!',
+
+  // Feedback Tags - Bad 😡
+  Strings.vpnConnectionFailed: 'Conexão VPN falhou',
+  Strings.internetTooSlow: 'Internet muito lenta',
+  Strings.keepsDisconnecting: 'Desconecta constantemente',
+  Strings.appCrashes: 'App trava ou congela',
+  Strings.otherIssues: 'Outros problemas',
+
+  // Feedback Tags - Poor 😥
+  Strings.connectionUnstable: 'Conexão instável',
+  Strings.speedNotExpected: 'Velocidade abaixo do esperado',
+  Strings.hardToUse: 'Difícil de usar / UI confusa',
+
+  // Feedback Tags - Okay 🤭
+  Strings.worksFineNotFast: 'Funciona bem mas não é rápido o suficiente',
+  Strings.limitedFreeServers: 'Servidores grátis limitados',
+  Strings.appCouldBeSimpler: 'App poderia ser mais simples',
+  Strings.sometimesDisconnects: 'Às vezes desconecta',
+  Strings.nothingSpecial: 'Nada especial',
+
+  // Feedback Tags - Good 😏
+  Strings.easyToUse: 'Fácil de usar',
+  Strings.fastConnection: 'Conexão rápida',
+  Strings.stablePerformance: 'Desempenho estável',
+  Strings.usefulFreeVersion: 'Versão grátis útil',
+  Strings.satisfiedOverall: 'Satisfeito no geral',
+
+  // Feedback Tags - Excellent 🥰
+  Strings.fastAndStable: 'Conexão rápida e estável',
+  Strings.greatUserExperience: 'Ótima experiência do usuário',
+  Strings.excellentPremiumFeatures: 'Excelentes recursos premium',
+  Strings.worthRecommending: 'Vale a pena recomendar',
+  Strings.loveTheDesign: 'Adoro o design',
+
+  // Change Password
+  Strings.changePassword: 'Alterar senha',
+  Strings.changePasswordDescription:
+      'Você pode alterar sua senha a qualquer momento para garantir segurança. Sem limite de alterações de senha',
+  Strings.enterNewPassword: 'Digite a nova senha',
+  Strings.enterConfirmPassword: 'Digite a confirmação da senha',
+  Strings.confirmPasswordMustBeTheSame:
+      'As senhas digitadas não coincidem',
+  Strings.yes: 'Sim',
+
+  // Signup
+  Strings.signingUp: 'Cadastrando...',
+  Strings.signUpSuccessful: 'Cadastro bem-sucedido',
+
+  // login
+  Strings.loggingIn: 'Entrando...',
+  Strings.loginSuccessful: 'Login bem-sucedido',
+
+  // logout
+  Strings.loggingOut: 'Saindo...',
+  Strings.logoutSuccessful: 'Logout bem-sucedido',
+
+  // change password
+  Strings.changingPassword: 'Alterando senha...',
+  Strings.changePasswordSuccessful: 'Senha alterada com sucesso',
+
+  // delete account
+  Strings.deletingAccount: 'Excluindo conta...',
+  Strings.deleteAccountSuccessful: 'Conta excluída com sucesso',
+  Strings.deleteAccountConfirmMessage:
+      'Excluir sua conta removerá permanentemente seus dados e informações de assinatura. Esta ação não pode ser desfeita.',
+  Strings.deleteAccountConfirmButton: 'Excluir',
+
+  // Push Notifications
+  Strings.pushNotifications: 'Notificações push',
+  Strings.upgradeNow: 'Atualizar agora',
+
+  // 语言
+  Strings.enLang: 'English',
+  Strings.esLang: 'Español',
+  Strings.frLang: 'Français',
+  Strings.deLang: 'Deutsch',
+  Strings.jaLang: '日本語',
+  Strings.koLang: '한국어',
+  Strings.faLang: 'فارسی',
+  Strings.myLang: 'မြန်မာဘာသာ',
+  Strings.arLang: 'عربي',
+  Strings.ruLang: 'Русский',
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
+};
+

+ 9 - 0
lib/config/translations/strings_enum.dart

@@ -151,6 +151,15 @@ class Strings {
   static const String myLang = 'မြန်မာဘာသာ';
   static const String arLang = 'عربي';
   static const String ruLang = 'Русский';
+  static const String zhTWLang = '繁體中文';
+  static const String tkLang = 'Türkmençe';
+  static const String ptBRLang = 'Português (Brasil)';
+  static const String viLang = 'Tiếng Việt';
+  static const String idLang = 'Bahasa Indonesia';
+  static const String tlLang = 'Filipino';
+  static const String thLang = 'ไทย';
+  static const String hiLang = 'हिन्दी';
+  static const String trLang = 'Türkçe';
 
   // Dialog messages
   static const String premiumActivated = 'Premium Activated Successfully !';

+ 297 - 0
lib/config/translations/th_TH/th_th_translation.dart

@@ -0,0 +1,297 @@
+import '../strings_enum.dart';
+
+Map<String, String> thTH = {
+  Strings.someThingWentWorng: 'เกิดข้อผิดพลาด',
+  Strings.retry: 'ลองอีกครั้ง',
+  Strings.settings: 'การตั้งค่า',
+  Strings.language: 'ภาษา',
+  Strings.termsOfService: 'ข้อกำหนดการให้บริการ',
+  Strings.privacyPolicy: 'นโยบายความเป็นส่วนตัว',
+  Strings.version: 'เวอร์ชัน',
+  Strings.ok: 'ตกลง',
+  Strings.cancel: 'ยกเลิก',
+  Strings.oops: 'อุ๊ปส์',
+  Strings.copied: 'คัดลอกแล้ว',
+  Strings.later: 'ภายหลัง',
+  Strings.noData: 'ไม่มีข้อมูล',
+  Strings.refresh: 'รีเฟรช',
+  Strings.unableToConnectNetwork: 'กรุณาตรวจสอบการเชื่อมต่ออินเทอร์เน็ต',
+  Strings.unableToConnectServer: 'เซิร์ฟเวอร์ไม่พร้อมใช้งานชั่วคราว กรุณาลองใหม่ภายหลัง',
+  Strings.regionRestricted: 'เนื่องจากกฎหมายและข้อบังคับท้องถิ่น บริการ FKey ไม่พร้อมใช้งานในภูมิภาคของคุณ',
+  Strings.updateNow: 'อัปเดตตอนนี้',
+  Strings.newVersionAvailable: 'มีเวอร์ชันใหม่',
+  Strings.eUtilOpenEmail: 'เกิดข้อผิดพลาดในการเปิดอีเมล',
+  Strings.eUtilOpenBrowser: 'เกิดข้อผิดพลาดในการเปิดเบราว์เซอร์',
+  Strings.eUtilOpenGooglePlay: 'เกิดข้อผิดพลาดในการเปิด Google Play',
+  Strings.error: 'ข้อผิดพลาด',
+  Strings.terms: 'ข้อกำหนด',
+  Strings.privacy: 'ความเป็นส่วนตัว',
+  Strings.termsAgreementPrefix: 'การสมัครหรือดำเนินการต่อ แสดงว่าคุณยอมรับ ',
+  Strings.termsAgreementConnector: ' และ ',
+  Strings.account: 'บัญชี',
+  Strings.processing: 'กำลังดำเนินการ...',
+  Strings.success: 'สำเร็จ',
+  Strings.unknownError: 'ข้อผิดพลาดที่ไม่รู้จัก',
+  Strings.failed: 'ล้มเหลว',
+  Strings.exit: 'ออก',
+  Strings.feedback: 'ความคิดเห็น',
+  Strings.networkSection: 'เครือข่าย',
+  Strings.securitySection: 'ความปลอดภัย',
+  Strings.myPreCode: 'Pre Code ของฉัน',
+  Strings.validTerm: 'ระยะเวลา',
+  Strings.freeTime: 'เวลาฟรี',
+  Strings.deviceAuthorization: 'การอนุญาตอุปกรณ์',
+  Strings.routingMode: 'โหมดเส้นทาง',
+  Strings.splitTunneling: 'Split tunneling',
+  Strings.autoReconnect: 'เชื่อมต่อใหม่อัตโนมัติ',
+  Strings.restoreDefault: 'กู้คืนค่าเริ่มต้น',
+  Strings.deleteAccount: 'ลบบัญชี',
+  Strings.logout: 'ออกจากระบบ',
+  Strings.connecting: 'กำลังเชื่อมต่อ...',
+  Strings.connected: 'เชื่อมต่อแล้ว',
+  Strings.disconnected: 'ยกเลิกการเชื่อมต่อแล้ว',
+  Strings.open: 'เปิด',
+  Strings.disconnect: 'ยกเลิกการเชื่อมต่อ',
+  Strings.connect: 'เชื่อมต่อ',
+  Strings.opening: 'กำลังเปิด',
+  Strings.connectedSuccessfully: 'เชื่อมต่อสำเร็จ',
+  Strings.willOpenSoon: 'จะเปิดเร็วๆ นี้',
+  Strings.netflix: 'Netflix',
+  Strings.youtube: 'YouTube',
+  Strings.amazon: 'Amazon',
+  Strings.hulu: 'hulu',
+  Strings.niftyStreaming: 'Nifty Streaming',
+  Strings.youtubeStreaming: 'YouTube Streaming',
+  Strings.amazonStreaming: 'Amazon Streaming',
+  Strings.huluStreaming: 'hulu Streaming',
+  Strings.excludeSelectedAppsFromVPN: 'ยกเว้นแอปที่เลือกจาก VPN',
+  Strings.useVPNForSelectedAppsOnly: 'ใช้ VPN สำหรับแอปที่เลือกเท่านั้น',
+  Strings.selectApps: 'เลือกแอป',
+  Strings.customizeYourVPN: 'ปรับแต่ง VPN ของคุณ',
+  Strings.subscription: 'การสมัครสมาชิก',
+  Strings.currentSubscription: 'การสมัครสมาชิกปัจจุบัน',
+  Strings.upgradeToPremium: 'อัปเกรดเป็น Premium',
+  Strings.activatePreCode: 'เปิดใช้งาน Pre Code',
+  Strings.preCodeHint: 'หากคุณมี Pre code กรุณาป้อนเพื่อรับสิทธิประโยชน์ Pre',
+  Strings.planChangeInfo: 'ข้อมูลการเปลี่ยนแพ็กเกจ',
+  Strings.whenItStarts: 'เริ่มเมื่อใด',
+  Strings.whatHappensToYourBalance: 'จะเกิดอะไรกับยอดคงเหลือของคุณ',
+  Strings.extraTime: 'เวลาเพิ่มเติม',
+  Strings.yourNewPlanBeginsRightAway: 'แพ็กเกจใหม่ของคุณจะเริ่มทันที',
+  Strings.anyUnusedAmountFromYourOldPlan: 'จำนวนที่ไม่ได้ใช้จากแพ็กเกจเก่าจะถูกเพิ่มเข้าแพ็กเกจใหม่',
+  Strings.youllGetExtraDays: 'คุณจะได้รับวันเพิ่มเติมตามยอดคงเหลือ',
+  Strings.premiumsIncluded: 'รวมใน Premium',
+  Strings.unlockAllFreeLocations: 'ปลดล็อกตำแหน่งฟรีทั้งหมด',
+  Strings.unlockSmartMode: 'ปลดล็อกโหมดอัจฉริยะ',
+  Strings.unlockMultiHopMode: 'ปลดล็อกโหมด Multi-hop',
+  Strings.premiumCanShareXDevices: 'Premium สามารถแชร์ X อุปกรณ์',
+  Strings.ownYourOwnPrivateServer: 'มีเซิร์ฟเวอร์ส่วนตัวของคุณเอง',
+  Strings.closeAds: 'ปิดโฆษณา',
+  Strings.confirmChange: 'ยืนยันการเปลี่ยนแปลง',
+  Strings.restorePurchases: 'กู้คืนการซื้อ',
+  Strings.paymentIssue: 'ปัญหาการชำระเงิน',
+  Strings.yearlyAutoRenewCancelAnytime: 'ต่ออายุอัตโนมัติรายปี ยกเลิกได้ทุกเมื่อ',
+  Strings.recent: 'ล่าสุด',
+  Strings.moviesAndTV: 'ภาพยนตร์และทีวี',
+  Strings.social: 'โซเชียล',
+  Strings.support: 'สนับสนุน',
+  Strings.sport: 'กีฬา',
+  Strings.music: 'เพลง',
+  Strings.game: 'เกม',
+  Strings.sorry: 'ขออภัย',
+  Strings.unableToLoadData: 'ไม่สามารถโหลดข้อมูล',
+  Strings.dueLawsAndRegulations: 'เนื่องจากกฎหมายและข้อบังคับท้องถิ่น \nบริการ NOMOVPN ไม่พร้อมใช้งาน\nในภูมิภาคปัจจุบันของคุณ',
+  Strings.sendPreCodeToEmail: 'ส่ง Pre Code ไปยังอีเมล',
+  Strings.selectServer: 'เลือกเซิร์ฟเวอร์',
+  Strings.premiumActivated: 'เปิดใช้งาน Premium สำเร็จ!',
+  Strings.premiumActivatedMessage: 'คุณได้รับการอัปเกรดเป็น Premium แล้ว เพลิดเพลินกับฟีเจอร์ขั้นสูงทั้งหมดและประสบการณ์การท่องเว็บที่ดีขึ้น',
+  Strings.gotIt: 'เข้าใจแล้ว',
+  Strings.emailSent: 'ส่งอีเมลสำเร็จ',
+  Strings.emailSentMessage: 'Pre Code ของคุณถูกส่งไปยังอีเมลแล้ว\nกรุณาตรวจสอบกล่องจดหมาย (และโฟลเดอร์สแปม)',
+  Strings.noInternetConnection: 'ไม่มีการเชื่อมต่ออินเทอร์เน็ต',
+  Strings.noInternetMessage: 'ดูเหมือนว่าคุณออฟไลน์ กรุณาตรวจสอบการเชื่อมต่ออินเทอร์เน็ตแล้วลองอีกครั้ง',
+  Strings.logOut: 'ออกจากระบบ',
+  Strings.logOutConfirmMessage: 'คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ? คุณจะต้องลงชื่อเข้าใช้อีกครั้งเพื่อเข้าถึงฟีเจอร์ Premium',
+  Strings.thankYouFeedback: 'ขอบคุณสำหรับความคิดเห็นของคุณ!',
+  Strings.feedbackMessage: 'เราเสียใจที่คุณไม่พอใจกับประสบการณ์ของคุณ เราจะพยายามปรับปรุงให้ดีขึ้นในเร็วๆ นี้',
+  Strings.done: 'เสร็จสิ้น',
+  Strings.whatIsUid: 'UID คืออะไร?',
+  Strings.uidMessage: 'รหัสอุปกรณ์ (UID) นี่คือตัวระบุเฉพาะของอุปกรณ์ของคุณ การให้รหัสนี้ช่วยให้ทีมสนับสนุนยืนยันอุปกรณ์และแก้ไขปัญหาของคุณได้เร็วขึ้น',
+  Strings.confirm: 'ยืนยัน',
+  Strings.copy: 'คัดลอก',
+  Strings.pleaseKeepPageOpen: 'กรุณาเปิดหน้านี้ไว้',
+  Strings.authorizationCode: 'รหัสอนุญาต',
+  Strings.authorizationCodeDesc: 'รหัส 6 หลักนี้อนุญาตให้ผู้ใช้ VIP เชื่อมต่ออุปกรณ์ของคุณ รีเฟรชทุก 15 นาที',
+  Strings.shareWithPreUser: 'แชร์กับผู้ใช้ Pre',
+  Strings.shareWithPreUserDesc: 'บอกรหัสนี้กับผู้ใช้ VIP เพื่อให้พวกเขาป้อนในอุปกรณ์ของพวกเขาเพื่ออนุญาตคุณ',
+  Strings.waitingForAuthorization: 'กำลังรอการอนุญาต',
+  Strings.waitingForAuthorizationDesc: 'กรุณาเปิดหน้านี้ไว้\nเมื่อได้รับการอนุมัติ บัญชีของคุณจะอัปเกรดและเชื่อมต่อใหม่โดยอัตโนมัติ',
+  Strings.enterCode: 'ป้อนรหัส',
+  Strings.enterCodeDesc: 'ป้อนรหัส 6 หลักที่แสดงบนอุปกรณ์อื่น (ผู้ใช้ฟรี) รหัสนี้รีเฟรชทุก 15 นาที',
+  Strings.verifyDevice: 'ยืนยันอุปกรณ์',
+  Strings.verifyDeviceDesc: 'เราจะตรวจสอบว่ารหัสที่ป้อนตรงกับอุปกรณ์ที่ใช้งานอยู่ที่รอการอนุญาตหรือไม่',
+  Strings.authorizationSuccessful: 'การอนุญาตสำเร็จ',
+  Strings.authorizationSuccessfulDesc: 'เมื่อยืนยันแล้ว อุปกรณ์จะอัปเกรดและเชื่อมต่อกับบัญชีของคุณโดยอัตโนมัติ',
+  Strings.deviceLimitReached: 'ถึงขีดจำกัดอุปกรณ์แล้ว',
+  Strings.deviceLimitMessage: 'คุณสามารถอนุญาตได้สูงสุด',
+  Strings.devices: 'อุปกรณ์',
+  Strings.deviceAuthorized: 'อุปกรณ์ได้รับการอนุญาต',
+  Strings.deviceAuthorizedMessage: 'อุปกรณ์ใหม่ได้รับการอนุญาตสำเร็จ',
+  Strings.relieveDevice: 'ลบอุปกรณ์',
+  Strings.relieveDeviceMessage: 'คุณแน่ใจหรือไม่ว่าต้องการลบ',
+  Strings.relieveDeviceLoseAccess: 'อุปกรณ์นี้จะสูญเสียการเข้าถึง Premium',
+  Strings.deviceRelieved: 'ลบอุปกรณ์แล้ว',
+  Strings.deviceRelievedMessage: 'ถูกลบออกจากอุปกรณ์ที่ได้รับอนุญาตแล้ว',
+  Strings.currentDevice: 'อุปกรณ์ปัจจุบัน',
+  Strings.androidDevices: 'อุปกรณ์ Android',
+  Strings.authCodeCopied: 'คัดลอกรหัสอนุญาตแล้ว',
+  Strings.invalidAuthorizationCode: 'รหัสอนุญาตไม่ถูกต้อง',
+  Strings.invalidAuthorizationCodeMessage: 'รหัสที่คุณป้อนไม่ถูกต้องหรือหมดอายุแล้ว\nกรุณาตรวจสอบรหัส 6 หลักบนอุปกรณ์อื่นและลองอีกครั้ง',
+  Strings.invalidAuthorizationCodeButton: 'ลองอีกครั้ง',
+  Strings.codeBackedUpMessage: 'รหัสของคุณจะถูกสำรองไปยังอีเมลนี้',
+  Strings.enterYourEmail: 'ป้อนอีเมลของคุณ',
+  Strings.sendYourEmail: 'ส่งอีเมลของคุณ',
+  Strings.yourPreCredential: 'ข้อมูลรับรอง Pre ของคุณ',
+  Strings.yourPreCredentialDesc: 'นี่คือข้อมูลรับรอง VIP ของคุณ กรุณาเก็บรักษาไว้อย่างปลอดภัยและอย่าแชร์กับใคร',
+  Strings.secureEmailBackup: 'การสำรองอีเมลที่ปลอดภัย',
+  Strings.secureEmailBackupDesc: 'เราจะส่งอีเมลที่มีข้อมูลรับรองนี้ไปยังที่อยู่อีเมลที่คุณระบุเพื่อเก็บรักษาอย่างปลอดภัย',
+  Strings.sendAndSave: 'ส่งและบันทึก',
+  Strings.sendAndSaveDesc: 'หลังจากส่งอีเมลแล้ว เราแนะนำให้คุณบันทึกข้อมูลรับรองนี้ไว้ในที่ปลอดภัยบนอุปกรณ์ของคุณด้วย',
+  Strings.smart: 'อัจฉริยะ',
+  Strings.smartModeDesc: 'เครือข่ายท้องถิ่นและ VPN ทำงานร่วมกัน และเลือกเส้นทางที่เหมาะสมที่สุดอย่างชาญฉลาด',
+  Strings.global: 'ทั่วโลก',
+  Strings.globalModeDesc: 'ทราฟฟิกทั้งหมดถูกส่งผ่านเซิร์ฟเวอร์ VPN เพื่อรับรองความเป็นส่วนตัวและความปลอดภัยสูงสุด',
+  Strings.perYear: 'ต่อปี',
+  Strings.yearlyPlan: 'แพ็กเกจรายปี',
+  Strings.mostlyChoose: 'เลือกมากที่สุด',
+  Strings.once: 'ครั้งเดียว',
+  Strings.lifeTime: 'ตลอดชีพ',
+  Strings.monthPlan: 'แพ็กเกจรายเดือน',
+  Strings.perWeek: 'ต่อสัปดาห์',
+  Strings.weekPlan: 'แพ็กเกจรายสัปดาห์',
+  Strings.limitedTime: 'เวลาจำกัด',
+  Strings.subscriptionChanged: 'เปลี่ยนแพ็กเกจสมาชิกสำเร็จ',
+  Strings.restoringPurchases: 'กำลังกู้คืนการซื้อ...',
+  Strings.openingPaymentSupport: 'กำลังเปิดการสนับสนุนการชำระเงิน...',
+  Strings.info: 'ข้อมูล',
+  Strings.vpnConnectionError: 'ข้อผิดพลาดการเชื่อมต่อ VPN',
+  Strings.vpnServiceDisconnected: 'บริการ VPN ถูกตัดการเชื่อมต่อโดยไม่คาดคิด',
+  Strings.failedCaptureScreenshot: 'ไม่สามารถจับภาพหน้าจอ',
+  Strings.imageSavedToAlbum: 'รูปภาพถูกบันทึกไปยังอัลบั้มของคุณแล้ว',
+  Strings.failedSaveImage: 'ไม่สามารถบันทึกรูปภาพไปยังแกลเลอรี',
+  Strings.failedToSave: 'ไม่สามารถบันทึก',
+  Strings.failedSendEmail: 'ไม่สามารถส่งอีเมล',
+  Strings.activeTime: 'เวลาใช้งาน',
+  Strings.yearPlanPrice: 'แพ็กเกจรายปี @price ต่อปี',
+  Strings.securingData: 'กำลังรักษาความปลอดภัยข้อมูล…',
+  Strings.encryptingTraffic: 'กำลังเข้ารหัสทราฟฟิก…',
+  Strings.protectingPrivacy: 'กำลังปกป้องความเป็นส่วนตัว…',
+  Strings.safeConnection: 'การเชื่อมต่อที่ปลอดภัย…',
+  Strings.yourDataIsSafe: 'ข้อมูลของคุณปลอดภัย…',
+  Strings.login: 'เข้าสู่ระบบ',
+  Strings.loginButton: 'เข้าสู่ระบบ',
+  Strings.loginDescription: 'หลังจากเข้าสู่ระบบสำเร็จ ช่วงทดลองใช้ฟรีของคุณจะถูกใช้ และการเป็นสมาชิกที่เหลือจะซิงค์กับบัญชีของคุณเพื่อใช้งานบนอุปกรณ์ที่เชื่อมต่อทั้งหมด',
+  Strings.signup: 'สมัคร NOMO',
+  Strings.signupButton: 'สมัคร',
+  Strings.signupDescription: 'หลังจากลงทะเบียน ช่วงทดลองใช้ฟรีของคุณจะถูกหัก และเวลาสมาชิกอื่นๆ จะย้ายไปยังบัญชีของคุณเพื่อใช้งานหลายอุปกรณ์',
+  Strings.username: 'ชื่อผู้ใช้',
+  Strings.password: 'รหัสผ่าน',
+  Strings.usernamePasswordRule: '6-20 ตัวอักษร (ตัวอักษรหรือตัวเลข)',
+  Strings.noAccount: 'ไม่มีบัญชี? ',
+  Strings.registerNow: ' ลงทะเบียนตอนนี้',
+  Strings.alreadyHaveAccount: 'มีบัญชีแล้ว? ',
+  Strings.loginNow: ' เข้าสู่ระบบตอนนี้',
+  Strings.feedbackPlaceholder: 'อธิบายปัญหาหรือข้อเสนอแนะของคุณ...',
+  Strings.emailAddressForReply: '• ที่อยู่อีเมลของคุณ (สำหรับการตอบกลับของเรา)',
+  Strings.send: 'ส่ง',
+  Strings.changeSubscription: 'เปลี่ยนการสมัครสมาชิก',
+  Strings.awaitingActivation: 'รอการเปิดใช้งาน',
+  Strings.relieve: 'ลบ',
+  Strings.configureAuthorizedDevices: 'กำหนดค่าอุปกรณ์ที่ได้รับอนุญาต...',
+  Strings.authorizeUpTo4DevicesAsPremium: 'อนุญาตอุปกรณ์สูงสุด @max เครื่องเป็น Premium (@current/@max)',
+  Strings.youCanAuthorizeOtherDevices: 'คุณสามารถอนุญาตอุปกรณ์อื่นเป็นผู้ใช้ Premium (@current/@max)',
+  Strings.preCodeInfoMessage: 'Pre Code คือข้อมูลรับรองผู้ใช้พรีเมียมของคุณ\nใช้เพื่อเปิดใช้งานสิทธิประโยชน์หรือซิงค์บัญชี\nบนอุปกรณ์อื่น',
+  Strings.pleaseStoreSecurely: 'กรุณาเก็บรักษาไว้อย่างปลอดภัย!',
+  Strings.sendPreCodeEmailDesc: 'ส่ง Pre Code ของคุณไปยังที่อยู่อีเมลที่ลงทะเบียน',
+  Strings.storeLocalCopyDesc: 'เก็บสำเนา Pre Code ของคุณบนอุปกรณ์นี้',
+  Strings.preview: 'ดูตัวอย่าง',
+  Strings.hide: 'ซ่อน',
+  Strings.sendToEmail: 'ส่งไปยังอีเมล',
+  Strings.saveLocalCopy: 'บันทึกสำเนาในเครื่อง',
+  Strings.secureYourConnection: 'รักษาความปลอดภัยการเชื่อมต่อของคุณ',
+  Strings.secureYourConnectionDesc: 'คุณสามารถเข้าสู่ระบบหรือลงทะเบียนบัญชีเพื่อแชร์การเป็นสมาชิกบนอุปกรณ์ต่างๆ',
+  Strings.save: 'บันทึก',
+  Strings.onlyOneModeActive: 'สามารถใช้งานได้เพียงโหมดเดียวในครั้งเดียว',
+  Strings.chooseAppsExcludeDesc: 'เลือกแอปที่จะเชื่อมต่อโดยตรงโดยไม่ใช้ VPN',
+  Strings.chooseAppsIncludeDesc: 'เลือกแอปที่จะใช้ VPN ในขณะที่แอปอื่นเชื่อมต่อตามปกติ',
+  Strings.splitTunnelingDesc: 'Split tunneling ช่วยให้คุณควบคุมว่าแอปใดใช้การเชื่อมต่อ VPN และแอปใดเชื่อมต่อโดยตรง ช่วยจัดการแบนด์วิดท์และเข้าถึงเนื้อหาท้องถิ่นหรือต่างประเทศโดยไม่ต้องปิด VPN',
+  Strings.selectAppsExclude: 'เลือกแอปที่ไม่ใช้ VPN',
+  Strings.selectAppsInclude: 'เลือกแอปที่ใช้ VPN',
+  Strings.deselectAll: 'ยกเลิกการเลือกทั้งหมด',
+  Strings.allApps: 'แอปทั้งหมด',
+  Strings.howExperience: 'ประสบการณ์ของคุณ\nเป็นอย่างไร?',
+  Strings.wedLoveToKnow: 'เราอยากรู้!',
+  Strings.vpnConnectionFailed: 'การเชื่อมต่อ VPN ล้มเหลว',
+  Strings.internetTooSlow: 'อินเทอร์เน็ตช้าเกินไป',
+  Strings.keepsDisconnecting: 'ยกเลิกการเชื่อมต่อตลอด',
+  Strings.appCrashes: 'แอปขัดข้องหรือค้าง',
+  Strings.otherIssues: 'ปัญหาอื่นๆ',
+  Strings.connectionUnstable: 'การเชื่อมต่อไม่เสถียร',
+  Strings.speedNotExpected: 'ความเร็วไม่เป็นไปตามที่คาดหวัง',
+  Strings.hardToUse: 'ใช้งานยาก / UI สับสน',
+  Strings.worksFineNotFast: 'ทำงานได้ดีแต่ไม่เร็วพอ',
+  Strings.limitedFreeServers: 'เซิร์ฟเวอร์ฟรีมีจำกัด',
+  Strings.appCouldBeSimpler: 'แอปอาจจะง่ายกว่านี้ได้',
+  Strings.sometimesDisconnects: 'บางครั้งยกเลิกการเชื่อมต่อ',
+  Strings.nothingSpecial: 'ไม่มีอะไรพิเศษ',
+  Strings.easyToUse: 'ใช้งานง่าย',
+  Strings.fastConnection: 'เชื่อมต่อเร็ว',
+  Strings.stablePerformance: 'ประสิทธิภาพเสถียร',
+  Strings.usefulFreeVersion: 'เวอร์ชันฟรีมีประโยชน์',
+  Strings.satisfiedOverall: 'พอใจโดยรวม',
+  Strings.fastAndStable: 'เชื่อมต่อเร็วและเสถียร',
+  Strings.greatUserExperience: 'ประสบการณ์ผู้ใช้ที่ยอดเยี่ยม',
+  Strings.excellentPremiumFeatures: 'ฟีเจอร์พรีเมียมยอดเยี่ยม',
+  Strings.worthRecommending: 'คุ้มค่าที่จะแนะนำ',
+  Strings.loveTheDesign: 'ฉันชอบดีไซน์',
+  Strings.changePassword: 'เปลี่ยนรหัสผ่าน',
+  Strings.changePasswordDescription: 'คุณสามารถเปลี่ยนรหัสผ่านได้ทุกเมื่อเพื่อความปลอดภัย ไม่จำกัดจำนวนครั้งในการเปลี่ยนรหัสผ่าน',
+  Strings.enterNewPassword: 'ป้อนรหัสผ่านใหม่',
+  Strings.enterConfirmPassword: 'ป้อนยืนยันรหัสผ่าน',
+  Strings.confirmPasswordMustBeTheSame: 'รหัสผ่านที่ป้อนสองครั้งไม่ตรงกัน',
+  Strings.yes: 'ใช่',
+  Strings.signingUp: 'กำลังสมัคร...',
+  Strings.signUpSuccessful: 'สมัครสำเร็จ',
+  Strings.loggingIn: 'กำลังเข้าสู่ระบบ...',
+  Strings.loginSuccessful: 'เข้าสู่ระบบสำเร็จ',
+  Strings.loggingOut: 'กำลังออกจากระบบ...',
+  Strings.logoutSuccessful: 'ออกจากระบบสำเร็จ',
+  Strings.changingPassword: 'กำลังเปลี่ยนรหัสผ่าน...',
+  Strings.changePasswordSuccessful: 'เปลี่ยนรหัสผ่านสำเร็จ',
+  Strings.deletingAccount: 'กำลังลบบัญชี...',
+  Strings.deleteAccountSuccessful: 'ลบบัญชีสำเร็จ',
+  Strings.deleteAccountConfirmMessage: 'การลบบัญชีของคุณจะลบข้อมูลและข้อมูลสมาชิกของคุณอย่างถาวร การดำเนินการนี้ไม่สามารถย้อนกลับได้',
+  Strings.deleteAccountConfirmButton: 'ลบ',
+  Strings.pushNotifications: 'การแจ้งเตือนแบบพุช',
+  Strings.upgradeNow: 'อัปเกรดตอนนี้',
+  Strings.enLang: 'English',
+  Strings.esLang: 'Español',
+  Strings.frLang: 'Français',
+  Strings.deLang: 'Deutsch',
+  Strings.jaLang: '日本語',
+  Strings.koLang: '한국어',
+  Strings.faLang: 'فارسی',
+  Strings.myLang: 'မြန်မာဘာသာ',
+  Strings.arLang: 'عربي',
+  Strings.ruLang: 'Русский',
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
+};
+

+ 423 - 0
lib/config/translations/tk_TM/tk_tm_translation.dart

@@ -0,0 +1,423 @@
+import '../strings_enum.dart';
+
+Map<String, String> tkTM = {
+  Strings.someThingWentWorng: 'Bir zat ýalňyş gitdi',
+  Strings.retry: 'Täzeden synanyşyň',
+  //profile
+  Strings.settings: 'Sazlamalar',
+  Strings.language: 'Dil',
+  Strings.termsOfService: 'Hyzmat şertleri',
+  Strings.privacyPolicy: 'Gizlinlik syýasaty',
+  Strings.version: 'Wersiýa',
+
+  Strings.ok: 'Bolýar',
+  Strings.cancel: 'Ýatyr',
+  Strings.oops: 'Wah',
+  Strings.copied: 'Göçürildi',
+  Strings.later: 'Soňra',
+  Strings.noData: 'Maglumat ýok',
+
+  //empty error update
+  Strings.refresh: 'Täzele',
+  Strings.unableToConnectNetwork: 'Internet baglanyşygyňyzy barlaň',
+  Strings.unableToConnectServer:
+      'Serwer wagtlaýyn elýeterli däl, soňra gaýtadan synanyşyň',
+  Strings.regionRestricted:
+      'Ýerli kanunlar we düzgünler sebäpli, FKey hyzmaty siziň sebitiňizde elýeterli däl.',
+  Strings.updateNow: 'Häzir täzele',
+  Strings.newVersionAvailable: 'Täze wersiýa bar',
+
+  // util error
+  Strings.eUtilOpenEmail: 'E-poçta açmakda ýalňyşlyk',
+  Strings.eUtilOpenBrowser: 'Brauzeri açmakda ýalňyşlyk',
+  Strings.eUtilOpenGooglePlay: 'Google Play açmakda ýalňyşlyk',
+
+  Strings.error: 'Ýalňyşlyk',
+
+  // Privacy policy
+  Strings.terms: 'Şertler',
+  Strings.privacy: 'Gizlinlik',
+  Strings.termsAgreementPrefix: 'Hasaba alyş ýa-da dowam etmek bilen, biziň ',
+  Strings.termsAgreementConnector: ' we ',
+
+  // Account page
+  Strings.account: 'Hasap',
+
+  // Dialog texts
+  Strings.processing: 'Gaýtadan işlenýär...',
+  Strings.success: 'Üstünlik',
+  Strings.unknownError: 'Näbelli ýalňyşlyk',
+  Strings.failed: 'Şowsuz',
+
+  // exit
+  Strings.exit: 'Çykmak',
+
+  // feedback
+  Strings.feedback: 'Seslenme',
+
+  // setting page
+  Strings.networkSection: 'Tor',
+  Strings.securitySection: 'Howpsuzlyk',
+  Strings.myPreCode: 'Meniň Pre Kodum',
+  Strings.validTerm: 'Möhleti',
+  Strings.freeTime: 'Mugt wagt',
+  Strings.deviceAuthorization: 'Enjam ygtyýarnamasy',
+  Strings.routingMode: 'Ugrukdyryş rejesi',
+  Strings.splitTunneling: 'Bölünen tunel',
+  Strings.autoReconnect: 'Awtomatik täzeden baglanmak',
+  Strings.restoreDefault: 'Başlangyç ýagdaýa getir',
+  Strings.deleteAccount: 'Hasaby poz',
+  Strings.logout: 'Çykmak',
+
+  // media location page
+  Strings.connecting: 'Baglanylýar...',
+  Strings.connected: 'Baglandy',
+  Strings.disconnected: 'Aýryldy',
+  Strings.open: 'Aç',
+  Strings.disconnect: 'Aýyr',
+  Strings.connect: 'Baglan',
+  Strings.opening: 'Açylýar',
+  Strings.connectedSuccessfully: 'Üstünlikli baglandy',
+  Strings.willOpenSoon: 'ýakyn wagtda açylar',
+  Strings.netflix: 'Netflix',
+  Strings.youtube: 'YouTube',
+  Strings.amazon: 'Amazon',
+  Strings.hulu: 'hulu',
+  Strings.niftyStreaming: 'Nifty Streaming',
+  Strings.youtubeStreaming: 'YouTube Streaming',
+  Strings.amazonStreaming: 'Amazon Streaming',
+  Strings.huluStreaming: 'hulu Streaming',
+
+  // split tunneling page
+  Strings.excludeSelectedAppsFromVPN: 'Saýlanan programmalary VPN-den aýyr',
+  Strings.useVPNForSelectedAppsOnly:
+      'VPN-i diňe saýlanan programmalar üçin ulan',
+  Strings.selectApps: 'Programmalary saýla',
+  Strings.customizeYourVPN: 'VPN-i sazla',
+
+  // subscription page
+  Strings.subscription: 'Abunalyk',
+  Strings.currentSubscription: 'Häzirki abunalyk',
+  Strings.upgradeToPremium: 'Premium-a geç',
+  Strings.activatePreCode: 'Pre Kody işjeňleşdir',
+  Strings.preCodeHint:
+      'Pre kodyňyz bar bolsa, Pre artykmaçlyklaryny almak üçin giriziň.',
+  Strings.planChangeInfo: 'Meýilnama üýtgetme maglumaty',
+  Strings.whenItStarts: 'Haçan başlar',
+  Strings.whatHappensToYourBalance: 'Balansyňyza näme bolar',
+  Strings.extraTime: 'Goşmaça wagt',
+  Strings.yourNewPlanBeginsRightAway: 'Täze meýilnamaňyz derrew başlar.',
+  Strings.anyUnusedAmountFromYourOldPlan:
+      'Köne meýilnamaňyzdaky ulanylmadyk mukdar täzesine goşular.',
+  Strings.youllGetExtraDays: 'Galan balansyňyza görä goşmaça günler alarsyňyz.',
+  Strings.premiumsIncluded: 'Premium-a girizilen',
+  Strings.unlockAllFreeLocations: 'Ähli mugt ýerleri aç',
+  Strings.unlockSmartMode: 'Akylly rejäni aç',
+  Strings.unlockMultiHopMode: 'Köp hoppy rejäni aç',
+  Strings.premiumCanShareXDevices: 'Premium X enjam paýlaşyp biler',
+  Strings.ownYourOwnPrivateServer: 'Öz hususy serweriňiz bolsun',
+  Strings.closeAds: 'Mahabatlary ýap',
+  Strings.confirmChange: 'Üýtgetmäni tassykla',
+  Strings.restorePurchases: 'Satyn almalary dikelt',
+  Strings.paymentIssue: 'Töleg meselesi',
+  Strings.yearlyAutoRenewCancelAnytime:
+      'Ýyllyk awtomatik täzelenme. Islän wagtyňyz ýatyryp bilersiňiz',
+
+  // home page
+  Strings.recent: 'Soňky',
+  Strings.moviesAndTV: 'Filmler we teleýaýlym',
+  Strings.social: 'Sosial',
+  Strings.support: 'Goldaw',
+  Strings.sport: 'Sport',
+  Strings.music: 'Saz',
+  Strings.game: 'Oýun',
+
+  // country restricted
+  Strings.sorry: 'Bagyşlaň',
+  Strings.unableToLoadData: 'Maglumatlary ýükläp bolmady',
+  Strings.dueLawsAndRegulations:
+      'Ýerli kanunlar we düzgünler sebäpli, \nNOMOVPN hyzmatlary häzirki sebitiňizde \nelýeterli däl.',
+
+  // more pages
+  Strings.sendPreCodeToEmail: 'Pre Kody e-poçta iber',
+  Strings.selectServer: 'Serwer saýla',
+
+  // Dialog messages
+  Strings.premiumActivated: 'Premium üstünlikli işjeňleşdirildi!',
+  Strings.premiumActivatedMessage:
+      'Premium-a geçdiňiz. Ähli ösen aýratynlyklardan we gowulandyrylan görmek tejribesinden lezzet alyň.',
+  Strings.gotIt: 'Düşündim',
+  Strings.emailSent: 'E-poçta üstünlikli iberildi',
+  Strings.emailSentMessage:
+      'Pre Kodyňyz e-poçtaňyza iberildi.\nGelen hatlar bukjasyny (we spam bukjasyny) barlaň.',
+  Strings.noInternetConnection: 'Internet baglanyşygy ýok',
+  Strings.noInternetMessage:
+      'Onlaýn däl ýaly görünýärsiňiz. Internet baglanyşygyňyzy barlaň we täzeden synanyşyň.',
+  Strings.logOut: 'Çykmak',
+  Strings.logOutConfirmMessage:
+      'Çykmak isleýärsiňizmi? Premium aýratynlyklaryna girmek üçin täzeden girmeli bolarsyňyz.',
+  Strings.thankYouFeedback: 'Seslenmeleriňiz üçin sag boluň!',
+  Strings.feedbackMessage:
+      'Tejribäňizden lezzet almaýandygyňyza gynandyk. Ýakyn wagtda gowulandyrmaga synanyşarys.',
+  Strings.done: 'Tamam',
+  Strings.whatIsUid: 'UID näme?',
+  Strings.uidMessage:
+      'Enjam ID (UID) Bu enjamyňyzyň ýeke-täk kesgitleýijisidir. Bu ID-ni bermek goldaw toparymyza enjamyňyzy tassyklamaga we meseleriňizi çalt çözmäge kömek edýär.',
+  Strings.confirm: 'Tassykla',
+
+  // Device Authorization
+  Strings.copy: 'Göçür',
+  Strings.pleaseKeepPageOpen: 'Bu sahypany açyk saklaň.',
+  Strings.authorizationCode: 'Ygtyýarnama kody',
+  Strings.authorizationCodeDesc:
+      'Bu 6 sanly kod VIP ulanyjysynyň enjamyňyzy baglanyşdyrmagyna mümkinçilik berýär. Her 15 minutda täzelenýär.',
+  Strings.shareWithPreUser: 'Pre ulanyjysy bilen paýlaş',
+  Strings.shareWithPreUserDesc:
+      'VIP ulanyjysyna bu kody aýdyň, ol öz enjamynda girizip sizi ygtyýarlandyrar.',
+  Strings.waitingForAuthorization: 'Ygtyýarlandyrma garaşylýar',
+  Strings.waitingForAuthorizationDesc:
+      'Bu sahypany açyk saklaň.\nTassyklanandan soň, hasabyňyz awtomatiki täzelener we täzeden baglanar.',
+  Strings.enterCode: 'Kody giriziň',
+  Strings.enterCodeDesc:
+      'Beýleki enjamda (mugt ulanyjy) görkezilen 6 sanly kody giriziň. Bu kod her 15 minutda täzelenýär.',
+  Strings.verifyDevice: 'Enjamy tassykla',
+  Strings.verifyDeviceDesc:
+      'Girilen kodun ygtyýarlandyrma garaşýan işjeň enjam bilen gabat gelýändigini barlarys.',
+  Strings.authorizationSuccessful: 'Ygtyýarlandyrma üstünlikli',
+  Strings.authorizationSuccessfulDesc:
+      'Tassyklanandan soň, enjam awtomatiki täzelener we hasabyňyza baglanar.',
+  Strings.deviceLimitReached: 'Enjam çägine ýetildi',
+  Strings.deviceLimitMessage: 'Diňe şu mukdarda ygtyýarlandyryp bilersiňiz:',
+  Strings.devices: 'enjam',
+  Strings.deviceAuthorized: 'Enjam ygtyýarlandyryldy',
+  Strings.deviceAuthorizedMessage: 'Täze enjam üstünlikli ygtyýarlandyryldy',
+  Strings.relieveDevice: 'Enjamy aýyr',
+  Strings.relieveDeviceMessage: 'Aýyrmak isleýärsiňizmi',
+  Strings.relieveDeviceLoseAccess: 'Bu enjam Premium girişini ýitirer.',
+  Strings.deviceRelieved: 'Enjam aýryldy',
+  Strings.deviceRelievedMessage: 'ygtyýarlandyrylan enjamlardan aýryldy',
+  Strings.currentDevice: 'Häzirki enjam',
+  Strings.androidDevices: 'Android enjamlary',
+  Strings.authCodeCopied: 'Ygtyýarnama kody göçürildi',
+  Strings.invalidAuthorizationCode: 'Nädogry ygtyýarnama kody',
+  Strings.invalidAuthorizationCodeMessage:
+      'Girizen kodyňyz nädogry ýa-da möhleti geçen.\nBeýleki enjamda 6 sanly kody barlaň we täzeden synanyşyň.',
+  Strings.invalidAuthorizationCodeButton: 'Täzeden synanyşyň',
+
+  // Pre Code Email
+  Strings.codeBackedUpMessage: 'Kodyňyz bu e-poçta ätiýaçlanar.',
+  Strings.enterYourEmail: 'E-poçtaňyzy giriziň',
+  Strings.sendYourEmail: 'E-poçtaňyzy iberiň',
+  Strings.yourPreCredential: 'Pre şahadatnamaňyz',
+  Strings.yourPreCredentialDesc:
+      'Bu VIP şahadatnamaňyz. Howpsuz saklaň we hiç kim bilen paýlaşmaň.',
+  Strings.secureEmailBackup: 'Howpsuz e-poçta ätiýaçlama',
+  Strings.secureEmailBackupDesc:
+      'Bu şahadatnamany görkezilen e-poçta salgyňyza howpsuz saklamak üçin ibereris.',
+  Strings.sendAndSave: 'Iber we sakla',
+  Strings.sendAndSaveDesc:
+      'E-poçta iberilenden soň, bu şahadatnamany enjamyňyzda howpsuz ýere hem saklamagy maslahat berýäris.',
+
+  // Routing Mode
+  Strings.smart: 'Akylly',
+  Strings.smartModeDesc:
+      'Ýerli we VPN torlary bilelikde hereket edýär, iň gowy ugur akylly saýlanýar.',
+  Strings.global: 'Global',
+  Strings.globalModeDesc:
+      'Ähli traffik iň ýokary gizlinligi we howpsuzlygy üpjün etmek üçin VPN serweri arkaly ugrukdyrylýar.',
+
+  // Subscription Plans
+  Strings.perYear: 'Her ýyl',
+  Strings.yearlyPlan: 'Ýyllyk meýilnama',
+  Strings.mostlyChoose: 'Köplenç saýlanýar',
+  Strings.once: 'bir gezek',
+  Strings.lifeTime: 'Ömürlik',
+  Strings.monthPlan: 'Aýlyk meýilnama',
+  Strings.perWeek: 'Her hepde',
+  Strings.weekPlan: 'Hepdelik meýilnama',
+  Strings.limitedTime: 'Çäkli wagt',
+  Strings.subscriptionChanged: 'Abunalyk meýilnamasy üstünlikli üýtgedildi',
+  Strings.restoringPurchases: 'Satyn almalar dikeldilýär...',
+  Strings.openingPaymentSupport: 'Töleg goldawy açylýar...',
+  Strings.info: 'Maglumat',
+
+  // Other messages
+  Strings.vpnConnectionError: 'VPN baglanyşyk ýalňyşlygy',
+  Strings.vpnServiceDisconnected: 'VPN hyzmaty garaşylmadyk ýagdaýda aýryldy',
+  Strings.failedCaptureScreenshot: 'Ekran suratyny almak başartmady',
+  Strings.imageSavedToAlbum: 'Surat ýerli albomyňyza ýatda saklandy',
+  Strings.failedSaveImage: 'Suraty galereýa ýatda saklamak başartmady',
+  Strings.failedToSave: 'Ýatda saklamak başartmady',
+  Strings.failedSendEmail: 'E-poçta ibermek başartmady',
+
+  // Connection status
+  Strings.activeTime: 'Işjeň wagt',
+  Strings.yearPlanPrice: 'Ýyllyk meýilnama her ýyl @price',
+
+  // Connecting status carousel texts
+  Strings.securingData: 'Maglumatlar goralýar…',
+  Strings.encryptingTraffic: 'Traffik şifirlenýär…',
+  Strings.protectingPrivacy: 'Gizlinlik goralýar…',
+  Strings.safeConnection: 'Howpsuz baglanyşyk…',
+  Strings.yourDataIsSafe: 'Maglumatlaryňyz howpsuz…',
+
+  // Login & Signup
+  Strings.login: 'Girmek',
+  Strings.loginButton: 'Gir',
+  Strings.loginDescription:
+      'Üstünlikli girişden soň, mugt synagyňyz ulanylar we galan agzalyk ähli bagly enjamlarda ulanmak üçin hasabyňyza sinhronlanar.',
+  Strings.signup: 'NOMO-a hasaba al',
+  Strings.signupButton: 'Hasaba al',
+  Strings.signupDescription:
+      'Hasaba alynandan soň, mugt synagyňyz aýrylar we beýleki agzalyk wagty köp enjam üçin hasabyňyza geçiriler.',
+  Strings.username: 'Ulanyjy ady',
+  Strings.password: 'Parol',
+  Strings.usernamePasswordRule: '6-20 simwol (harplar ýa-da sanlar)',
+  Strings.noAccount: 'Hasabyňyz ýokmy? ',
+  Strings.registerNow: ' Häzir hasaba alyň',
+  Strings.alreadyHaveAccount: 'Eýýäm hasabyňyz barmy? ',
+  Strings.loginNow: ' Häzir giriň',
+
+  // Feedback
+  Strings.feedbackPlaceholder: 'Meseläňizi ýa-da teklibiňizi beýan ediň...',
+  Strings.emailAddressForReply: '• E-poçta salgyňyz (jogabymyz üçin)',
+  Strings.send: 'Iber',
+
+  // Account page additions
+  Strings.changeSubscription: 'Abunalygy üýtget',
+  Strings.awaitingActivation: 'Işjeňleşdirmä garaşylýar',
+  Strings.relieve: 'Aýyr',
+  Strings.configureAuthorizedDevices: 'Ygtyýarlandyrylan enjamlary sazla...',
+  Strings.authorizeUpTo4DevicesAsPremium:
+      '@max enjama çenli Premium hökmünde ygtyýarlandyryň (@current/@max)',
+  Strings.youCanAuthorizeOtherDevices:
+      'Beýleki enjamlary Premium ulanyjy hökmünde ygtyýarlandyryp bilersiňiz (@current/@max)',
+
+  // Pre Code page
+  Strings.preCodeInfoMessage:
+      'Pre Kod premium ulanyjy şahadatnamaňyzdyr.\nArtykmaçlyklary işjeňleşdirmek ýa-da hasabyňyzy\nbeýleki enjamlarda sinhronlamak üçin ulanyň.',
+  Strings.pleaseStoreSecurely: 'Howpsuz ýerde saklaň!',
+  Strings.sendPreCodeEmailDesc:
+      'Pre Kodyňyzy hasaba alnan e-poçta salgyňyza iberiň',
+  Strings.storeLocalCopyDesc: 'Pre Kodyňyzyň nusgasyny bu enjamda saklaň',
+  Strings.preview: 'Öňünden gör',
+  Strings.hide: 'Gizle',
+  Strings.sendToEmail: 'E-poçta iber',
+  Strings.saveLocalCopy: 'Ýerli nusgany sakla',
+
+  // Splash page
+  Strings.secureYourConnection: 'Baglanyşygyňyzy goraň',
+  Strings.secureYourConnectionDesc:
+      'Dürli enjamlarda agzalygy paýlaşmak üçin giriş ýa-da hasaba alyp bilersiňiz.',
+
+  // Pre Code Save Dialog
+  Strings.save: 'Sakla',
+
+  // Split Tunneling
+  Strings.onlyOneModeActive: 'Bir wagtda diňe bir rejim işjeň bolup biler.',
+  Strings.chooseAppsExcludeDesc:
+      'VPN ulanmazdan göni birikjek programmalary saýlaň.',
+  Strings.chooseAppsIncludeDesc:
+      'VPN ulanjaklar we beýlekileriň kadaly birikjek programmalaryny saýlaň.',
+  Strings.splitTunnelingDesc:
+      'Bölünen tunel haýsy programmalaryň VPN baglanyşygyny ulanýandygyny we haýsysynyň göni birikýändigini dolandyrmaga mümkinçilik berýär. Giňişlik giňligini dolandyrmaga we VPN-i öçürmezden ýerli ýa-da daşary ýurt mazmunyna girmäge kömek edýär.',
+  Strings.selectAppsExclude: 'VPN ulanmajak programmalary saýlaň',
+  Strings.selectAppsInclude: 'VPN ulanjak programmalary saýlaň',
+  Strings.deselectAll: 'Hemmesini aýyr',
+  Strings.allApps: 'Ähli programmalar',
+
+  // Feedback Bottom Sheet
+  Strings.howExperience: 'Şu wagta çenli\ntejribäňiz nähili?',
+  Strings.wedLoveToKnow: 'bilmek isleýäris!',
+
+  // Feedback Tags - Bad 😡
+  Strings.vpnConnectionFailed: 'VPN baglanyşygy şowsuz',
+  Strings.internetTooSlow: 'Internet gaty haýal',
+  Strings.keepsDisconnecting: 'Yzygiderli aýrylýar',
+  Strings.appCrashes: 'Programma ýykylýar ýa-da doňýar',
+  Strings.otherIssues: 'Beýleki meseleler',
+
+  // Feedback Tags - Poor 😥
+  Strings.connectionUnstable: 'Baglanyşyk durnuksyz',
+  Strings.speedNotExpected: 'Tizlik garaşylyşy ýaly däl',
+  Strings.hardToUse: 'Ulanmak kyn / bulaşyk UI',
+
+  // Feedback Tags - Okay 🤭
+  Strings.worksFineNotFast: 'Gowy işleýär ýöne ýeterlik çalt däl',
+  Strings.limitedFreeServers: 'Çäkli mugt serwerler',
+  Strings.appCouldBeSimpler: 'Programma has ýönekeý bolup biler',
+  Strings.sometimesDisconnects: 'Käwagt aýrylýar',
+  Strings.nothingSpecial: 'Aýratyn zat ýok',
+
+  // Feedback Tags - Good 😏
+  Strings.easyToUse: 'Ulanmak aňsat',
+  Strings.fastConnection: 'Çalt baglanyşyk',
+  Strings.stablePerformance: 'Durnukly öndürijilik',
+  Strings.usefulFreeVersion: 'Peýdaly mugt wersiýa',
+  Strings.satisfiedOverall: 'Umuman kanagatlanýan',
+
+  // Feedback Tags - Excellent 🥰
+  Strings.fastAndStable: 'Çalt we durnukly baglanyşyk',
+  Strings.greatUserExperience: 'Ajaýyp ulanyjy tejribesi',
+  Strings.excellentPremiumFeatures: 'Ajaýyp premium aýratynlyklar',
+  Strings.worthRecommending: 'Maslahat bermäge mynasyp',
+  Strings.loveTheDesign: 'Dizaýny gowy görýärin',
+
+  // Change Password
+  Strings.changePassword: 'Paroly üýtget',
+  Strings.changePasswordDescription:
+      'Howpsuzlygy üpjün etmek üçin paroly islän wagtyňyz üýtgedip bilersiňiz. Parol üýtgetme çägi ýok',
+  Strings.enterNewPassword: 'Täze paroly giriziň',
+  Strings.enterConfirmPassword: 'Tassyklamak parolyny giriziň',
+  Strings.confirmPasswordMustBeTheSame:
+      'Iki gezek girizen parollar gabat gelmeýär',
+  Strings.yes: 'Hawa',
+
+  // Signup
+  Strings.signingUp: 'Hasaba alynýar...',
+  Strings.signUpSuccessful: 'Hasaba alyş üstünlikli',
+
+  // login
+  Strings.loggingIn: 'Girilýär...',
+  Strings.loginSuccessful: 'Giriş üstünlikli',
+
+  // logout
+  Strings.loggingOut: 'Çykylýar...',
+  Strings.logoutSuccessful: 'Çykış üstünlikli',
+
+  // change password
+  Strings.changingPassword: 'Parol üýtgedilýär...',
+  Strings.changePasswordSuccessful: 'Parol üstünlikli üýtgedildi',
+
+  // delete account
+  Strings.deletingAccount: 'Hasap pozulýar...',
+  Strings.deleteAccountSuccessful: 'Hasap üstünlikli pozuldy',
+  Strings.deleteAccountConfirmMessage:
+      'Hasabyňyzy pozmak maglumatlaryňyzy we agzalyk maglumatlaryňyzy hemişelik aýyrar. Bu hereket yzyna alnyp bilinmez.',
+  Strings.deleteAccountConfirmButton: 'Poz',
+
+  // Push Notifications
+  Strings.pushNotifications: 'Push bildirişleri',
+  Strings.upgradeNow: 'Häzir täzele',
+
+  // 语言
+  Strings.enLang: 'English',
+  Strings.esLang: 'Español',
+  Strings.frLang: 'Français',
+  Strings.deLang: 'Deutsch',
+  Strings.jaLang: '日本語',
+  Strings.koLang: '한국어',
+  Strings.faLang: 'فارسی',
+  Strings.myLang: 'မြန်မာဘာသာ',
+  Strings.arLang: 'عربي',
+  Strings.ruLang: 'Русский',
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
+};

+ 297 - 0
lib/config/translations/tl_PH/tl_ph_translation.dart

@@ -0,0 +1,297 @@
+import '../strings_enum.dart';
+
+Map<String, String> tlPH = {
+  Strings.someThingWentWorng: 'May nangyaring mali',
+  Strings.retry: 'Subukan muli',
+  Strings.settings: 'Mga Setting',
+  Strings.language: 'Wika',
+  Strings.termsOfService: 'Mga Tuntunin ng Serbisyo',
+  Strings.privacyPolicy: 'Patakaran sa Privacy',
+  Strings.version: 'Bersyon',
+  Strings.ok: 'OK',
+  Strings.cancel: 'Kanselahin',
+  Strings.oops: 'Oops',
+  Strings.copied: 'Nakopya',
+  Strings.later: 'Mamaya',
+  Strings.noData: 'Walang data',
+  Strings.refresh: 'I-refresh',
+  Strings.unableToConnectNetwork: 'Pakisuri ang iyong koneksyon sa internet',
+  Strings.unableToConnectServer: 'Pansamantalang hindi available ang server, subukan muli mamaya',
+  Strings.regionRestricted: 'Dahil sa mga lokal na batas at regulasyon, hindi available ang serbisyo ng FKey sa iyong rehiyon.',
+  Strings.updateNow: 'I-update ngayon',
+  Strings.newVersionAvailable: 'May bagong bersyon',
+  Strings.eUtilOpenEmail: 'Error sa pagbukas ng email',
+  Strings.eUtilOpenBrowser: 'Error sa pagbukas ng browser',
+  Strings.eUtilOpenGooglePlay: 'Error sa pagbukas ng Google Play',
+  Strings.error: 'Error',
+  Strings.terms: 'Mga Tuntunin',
+  Strings.privacy: 'Privacy',
+  Strings.termsAgreementPrefix: 'Sa pag-sign up o pagpapatuloy, sumasang-ayon ka sa aming ',
+  Strings.termsAgreementConnector: ' at ',
+  Strings.account: 'Account',
+  Strings.processing: 'Pinoproseso...',
+  Strings.success: 'Tagumpay',
+  Strings.unknownError: 'Hindi kilalang error',
+  Strings.failed: 'Nabigo',
+  Strings.exit: 'Lumabas',
+  Strings.feedback: 'Feedback',
+  Strings.networkSection: 'Network',
+  Strings.securitySection: 'Seguridad',
+  Strings.myPreCode: 'Aking Pre Code',
+  Strings.validTerm: 'Panahon ng Bisa',
+  Strings.freeTime: 'Libreng oras',
+  Strings.deviceAuthorization: 'Awtorisasyon ng device',
+  Strings.routingMode: 'Routing mode',
+  Strings.splitTunneling: 'Split tunneling',
+  Strings.autoReconnect: 'Auto reconnect',
+  Strings.restoreDefault: 'Ibalik sa default',
+  Strings.deleteAccount: 'Burahin ang account',
+  Strings.logout: 'Mag-logout',
+  Strings.connecting: 'Kumokonekta...',
+  Strings.connected: 'Nakakonekta',
+  Strings.disconnected: 'Nadiskonekta',
+  Strings.open: 'Buksan',
+  Strings.disconnect: 'Idiskonekta',
+  Strings.connect: 'Kumonekta',
+  Strings.opening: 'Binubuksan',
+  Strings.connectedSuccessfully: 'Matagumpay na nakakonekta',
+  Strings.willOpenSoon: 'malapit nang magbukas',
+  Strings.netflix: 'Netflix',
+  Strings.youtube: 'YouTube',
+  Strings.amazon: 'Amazon',
+  Strings.hulu: 'hulu',
+  Strings.niftyStreaming: 'Nifty Streaming',
+  Strings.youtubeStreaming: 'YouTube Streaming',
+  Strings.amazonStreaming: 'Amazon Streaming',
+  Strings.huluStreaming: 'hulu Streaming',
+  Strings.excludeSelectedAppsFromVPN: 'Ibukod ang napiling apps mula sa VPN',
+  Strings.useVPNForSelectedAppsOnly: 'Gamitin lang ang VPN para sa napiling apps',
+  Strings.selectApps: 'Pumili ng apps',
+  Strings.customizeYourVPN: 'I-customize ang iyong VPN',
+  Strings.subscription: 'Subscription',
+  Strings.currentSubscription: 'Kasalukuyang subscription',
+  Strings.upgradeToPremium: 'I-upgrade sa Premium',
+  Strings.activatePreCode: 'I-activate ang Pre Code',
+  Strings.preCodeHint: 'Kung mayroon kang Pre code, ilagay ito para makuha ang iyong Pre benefits.',
+  Strings.planChangeInfo: 'Impormasyon ng pagbabago ng plan',
+  Strings.whenItStarts: 'Kailan magsisimula',
+  Strings.whatHappensToYourBalance: 'Ano ang mangyayari sa iyong balanse',
+  Strings.extraTime: 'Dagdag na oras',
+  Strings.yourNewPlanBeginsRightAway: 'Magsisimula agad ang iyong bagong plan.',
+  Strings.anyUnusedAmountFromYourOldPlan: 'Ang anumang hindi nagamit na halaga mula sa lumang plan ay idadagdag sa bago.',
+  Strings.youllGetExtraDays: 'Makakakuha ka ng dagdag na araw batay sa natitirang balanse.',
+  Strings.premiumsIncluded: 'Kasama sa Premium',
+  Strings.unlockAllFreeLocations: 'I-unlock ang lahat ng libreng lokasyon',
+  Strings.unlockSmartMode: 'I-unlock ang smart mode',
+  Strings.unlockMultiHopMode: 'I-unlock ang Multi-hop mode',
+  Strings.premiumCanShareXDevices: 'Maaaring ibahagi ng Premium ang X devices',
+  Strings.ownYourOwnPrivateServer: 'Magkaroon ng sariling private server',
+  Strings.closeAds: 'Isara ang ads',
+  Strings.confirmChange: 'Kumpirmahin ang pagbabago',
+  Strings.restorePurchases: 'Ibalik ang mga binili',
+  Strings.paymentIssue: 'Isyu sa pagbabayad',
+  Strings.yearlyAutoRenewCancelAnytime: 'Taunang auto-renew. Kanselahin anumang oras',
+  Strings.recent: 'Kamakailan',
+  Strings.moviesAndTV: 'Mga Pelikula at TV',
+  Strings.social: 'Social',
+  Strings.support: 'Suporta',
+  Strings.sport: 'Sports',
+  Strings.music: 'Musika',
+  Strings.game: 'Laro',
+  Strings.sorry: 'Paumanhin',
+  Strings.unableToLoadData: 'Hindi makapag-load ng data',
+  Strings.dueLawsAndRegulations: 'Dahil sa mga lokal na batas at regulasyon, \nhindi available ang mga serbisyo ng NOMOVPN sa \niyong kasalukuyang rehiyon.',
+  Strings.sendPreCodeToEmail: 'Ipadala ang Pre Code sa Email',
+  Strings.selectServer: 'Pumili ng server',
+  Strings.premiumActivated: 'Matagumpay na na-activate ang Premium!',
+  Strings.premiumActivatedMessage: 'Na-upgrade ka na sa Premium. Masiyahan sa lahat ng advanced features at pinahusay na karanasan sa pag-browse.',
+  Strings.gotIt: 'Naintindihan',
+  Strings.emailSent: 'Matagumpay na naipadala ang email',
+  Strings.emailSentMessage: 'Naipadala na ang iyong Pre Code sa iyong email.\nPakisuri ang iyong inbox (at spam folder).',
+  Strings.noInternetConnection: 'Walang koneksyon sa internet',
+  Strings.noInternetMessage: 'Mukhang offline ka. Pakisuri ang iyong koneksyon sa internet at subukan muli.',
+  Strings.logOut: 'Mag-log Out',
+  Strings.logOutConfirmMessage: 'Sigurado ka bang gusto mong mag-log out? Kailangan mong mag-sign in ulit para ma-access ang iyong Premium features.',
+  Strings.thankYouFeedback: 'Salamat sa iyong feedback!',
+  Strings.feedbackMessage: 'Ikinalulungkot namin na hindi mo nae-enjoy ang iyong karanasan. Gagawin namin ang aming makakaya para mapabuti ito.',
+  Strings.done: 'Tapos na',
+  Strings.whatIsUid: 'Ano ang UID?',
+  Strings.uidMessage: 'Device ID (UID) Ito ang unique identifier ng iyong device. Ang pagbibigay ng ID na ito ay tumutulong sa aming support team na i-verify ang iyong device at mas mabilis na malutas ang iyong mga isyu.',
+  Strings.confirm: 'Kumpirmahin',
+  Strings.copy: 'Kopyahin',
+  Strings.pleaseKeepPageOpen: 'Panatilihing bukas ang page na ito.',
+  Strings.authorizationCode: 'Authorization Code',
+  Strings.authorizationCodeDesc: 'Ang 6-digit code na ito ay nagpapahintulot sa VIP user na i-link ang iyong device. Nagre-refresh ito tuwing 15 minuto.',
+  Strings.shareWithPreUser: 'Ibahagi sa Pre User',
+  Strings.shareWithPreUserDesc: 'Sabihin sa VIP user ang code na ito para ma-enter nila ito sa kanilang device para ma-authorize ka.',
+  Strings.waitingForAuthorization: 'Naghihintay ng Authorization',
+  Strings.waitingForAuthorizationDesc: 'Panatilihing bukas ang page na ito.\nKapag na-approve, awtomatikong mag-upgrade at muling makokonekta ang iyong account.',
+  Strings.enterCode: 'Ilagay ang Code',
+  Strings.enterCodeDesc: 'Ilagay ang 6-digit code na ipinapakita sa ibang device (free user). Nagre-refresh ang code na ito tuwing 15 minuto.',
+  Strings.verifyDevice: 'I-verify ang Device',
+  Strings.verifyDeviceDesc: 'Titingnan namin kung ang inilagay na code ay tumutugma sa aktibong device na naghihintay ng authorization.',
+  Strings.authorizationSuccessful: 'Matagumpay ang Authorization',
+  Strings.authorizationSuccessfulDesc: 'Kapag nakumpirma, awtomatikong mag-upgrade ang device at mali-link sa iyong account.',
+  Strings.deviceLimitReached: 'Naabot na ang Device Limit',
+  Strings.deviceLimitMessage: 'Maaari ka lang mag-authorize ng hanggang',
+  Strings.devices: 'devices',
+  Strings.deviceAuthorized: 'Na-authorize ang Device',
+  Strings.deviceAuthorizedMessage: 'Matagumpay na na-authorize ang bagong device',
+  Strings.relieveDevice: 'Alisin ang Device',
+  Strings.relieveDeviceMessage: 'Sigurado ka bang gusto mong alisin',
+  Strings.relieveDeviceLoseAccess: 'Mawawalan ng Premium access ang device na ito.',
+  Strings.deviceRelieved: 'Naalis ang Device',
+  Strings.deviceRelievedMessage: 'ay naalis na sa mga authorized devices',
+  Strings.currentDevice: 'Kasalukuyang Device',
+  Strings.androidDevices: 'Android devices',
+  Strings.authCodeCopied: 'Nakopya ang authorization code',
+  Strings.invalidAuthorizationCode: 'Invalid na Authorization Code',
+  Strings.invalidAuthorizationCodeMessage: 'Ang inilagay mong code ay mali o nag-expire na.\nPakisuri ang 6-digit code sa ibang device at subukan muli.',
+  Strings.invalidAuthorizationCodeButton: 'Subukan muli',
+  Strings.codeBackedUpMessage: 'Iba-back up ang iyong code sa email na ito.',
+  Strings.enterYourEmail: 'Ilagay ang iyong email',
+  Strings.sendYourEmail: 'Ipadala ang iyong Email',
+  Strings.yourPreCredential: 'Ang Iyong Pre Credential',
+  Strings.yourPreCredentialDesc: 'Ito ang iyong VIP credential. Itago ito ng ligtas at huwag ibahagi sa kahit sino.',
+  Strings.secureEmailBackup: 'Secure Email Backup',
+  Strings.secureEmailBackupDesc: 'Magpapadala kami ng email na naglalaman ng credential na ito sa iyong tinukoy na email address para sa safekeeping.',
+  Strings.sendAndSave: 'Ipadala at I-save',
+  Strings.sendAndSaveDesc: 'Pagkatapos maipadala ang email, inirerekomenda naming i-save mo rin ang credential na ito sa isang secure na lokasyon sa iyong device.',
+  Strings.smart: 'Smart',
+  Strings.smartModeDesc: 'Magkasabay ang local at VPN networks, at matalinong pinipili ang pinakamainam na ruta.',
+  Strings.global: 'Global',
+  Strings.globalModeDesc: 'Lahat ng traffic ay dina-route sa pamamagitan ng VPN server para tiyakin ang maximum na privacy at seguridad.',
+  Strings.perYear: 'Bawat taon',
+  Strings.yearlyPlan: 'Taunang Plan',
+  Strings.mostlyChoose: 'Pinaka pinipili',
+  Strings.once: 'isang beses',
+  Strings.lifeTime: 'Habambuhay',
+  Strings.monthPlan: 'Buwanang Plan',
+  Strings.perWeek: 'Bawat linggo',
+  Strings.weekPlan: 'Lingguhang Plan',
+  Strings.limitedTime: 'Limitadong Oras',
+  Strings.subscriptionChanged: 'Matagumpay na nabago ang subscription plan',
+  Strings.restoringPurchases: 'Ibinabalik ang mga binili...',
+  Strings.openingPaymentSupport: 'Binubuksan ang payment support...',
+  Strings.info: 'Impormasyon',
+  Strings.vpnConnectionError: 'Error sa VPN connection',
+  Strings.vpnServiceDisconnected: 'Hindi inaasahang nadiskonekta ang VPN service',
+  Strings.failedCaptureScreenshot: 'Nabigong kumuha ng screenshot',
+  Strings.imageSavedToAlbum: 'Nai-save na ang larawan sa iyong album',
+  Strings.failedSaveImage: 'Nabigong i-save ang larawan sa gallery',
+  Strings.failedToSave: 'Nabigong i-save',
+  Strings.failedSendEmail: 'Nabigong ipadala ang email',
+  Strings.activeTime: 'Aktibong oras',
+  Strings.yearPlanPrice: 'Taunang Plan @price bawat taon',
+  Strings.securingData: 'Sine-secure ang data…',
+  Strings.encryptingTraffic: 'Ine-encrypt ang traffic…',
+  Strings.protectingPrivacy: 'Pinoprotektahan ang privacy…',
+  Strings.safeConnection: 'Ligtas na koneksyon…',
+  Strings.yourDataIsSafe: 'Ligtas ang iyong data…',
+  Strings.login: 'Mag-log in',
+  Strings.loginButton: 'Mag-Log In',
+  Strings.loginDescription: 'Pagkatapos ng matagumpay na login, maa-apply ang iyong free trial, at masi-sync ang natitirang membership sa iyong account para magamit sa lahat ng naka-link na devices.',
+  Strings.signup: 'Mag-sign up sa NOMO',
+  Strings.signupButton: 'Mag-Sign Up',
+  Strings.signupDescription: 'Pagkatapos ng registration, iba-bawas ang iyong free trial, at iba-shift ang ibang membership time sa iyong account para sa multi-device use.',
+  Strings.username: 'Username',
+  Strings.password: 'Password',
+  Strings.usernamePasswordRule: '6-20 characters (letters o numbers)',
+  Strings.noAccount: 'Walang account? ',
+  Strings.registerNow: ' Mag-register ngayon',
+  Strings.alreadyHaveAccount: 'May account na? ',
+  Strings.loginNow: ' Mag-login ngayon',
+  Strings.feedbackPlaceholder: 'Ilarawan ang iyong isyu o suhestyon...',
+  Strings.emailAddressForReply: '• Ang iyong email address (para sa aming sagot)',
+  Strings.send: 'Ipadala',
+  Strings.changeSubscription: 'Baguhin ang Subscription',
+  Strings.awaitingActivation: 'Naghihintay ng Activation',
+  Strings.relieve: 'Alisin',
+  Strings.configureAuthorizedDevices: 'I-configure ang authorized devices...',
+  Strings.authorizeUpTo4DevicesAsPremium: 'Mag-authorize ng hanggang @max devices bilang Premium (@current/@max)',
+  Strings.youCanAuthorizeOtherDevices: 'Maaari mong i-authorize ang ibang devices bilang Premium users (@current/@max)',
+  Strings.preCodeInfoMessage: 'Ang Pre Code ay ang iyong premium user credential.\nGamitin ito para ma-activate ang benefits o ma-sync ang iyong account\nsa ibang devices.',
+  Strings.pleaseStoreSecurely: 'Pakitago ng ligtas!',
+  Strings.sendPreCodeEmailDesc: 'Ipadala ang iyong Pre Code sa iyong registered email address',
+  Strings.storeLocalCopyDesc: 'Mag-store ng kopya ng iyong Pre Code sa device na ito',
+  Strings.preview: 'Preview',
+  Strings.hide: 'Itago',
+  Strings.sendToEmail: 'Ipadala sa Email',
+  Strings.saveLocalCopy: 'I-save ang Local Copy',
+  Strings.secureYourConnection: 'I-secure ang Iyong Koneksyon',
+  Strings.secureYourConnectionDesc: 'Maaari kang mag-log in o mag-register ng account para ibahagi ang membership sa iba\'t ibang devices.',
+  Strings.save: 'I-save',
+  Strings.onlyOneModeActive: 'Isang mode lang ang maaaring aktibo sa isang pagkakataon.',
+  Strings.chooseAppsExcludeDesc: 'Pumili ng apps na direktang kokonekta nang hindi gumagamit ng VPN.',
+  Strings.chooseAppsIncludeDesc: 'Pumili ng apps na gagamit ng VPN habang ang iba ay normal na kokonekta.',
+  Strings.splitTunnelingDesc: 'Ang split tunneling ay nagpapahintulot sa iyo na kontrolin kung aling apps ang gagamit ng VPN connection at alin ang direktang kokonekta. Nakakatulong ito sa pamamahala ng bandwidth at pag-access ng local o foreign content nang hindi nino-off ang VPN.',
+  Strings.selectAppsExclude: 'Pumili ng apps na hindi gagamit ng VPN',
+  Strings.selectAppsInclude: 'Pumili ng apps na gagamit ng VPN',
+  Strings.deselectAll: 'I-deselect lahat',
+  Strings.allApps: 'Lahat ng apps',
+  Strings.howExperience: 'Kumusta ang iyong\nkaranasan sa ngayon?',
+  Strings.wedLoveToKnow: 'gusto naming malaman!',
+  Strings.vpnConnectionFailed: 'Nabigo ang VPN connection',
+  Strings.internetTooSlow: 'Masyadong mabagal ang internet',
+  Strings.keepsDisconnecting: 'Patuloy na nadidiskonekta',
+  Strings.appCrashes: 'Nag-crash o nag-freeze ang app',
+  Strings.otherIssues: 'Ibang mga isyu',
+  Strings.connectionUnstable: 'Hindi stable ang koneksyon',
+  Strings.speedNotExpected: 'Hindi inaasahan ang bilis',
+  Strings.hardToUse: 'Mahirap gamitin / nakakalitong UI',
+  Strings.worksFineNotFast: 'Gumagana naman pero hindi sapat ang bilis',
+  Strings.limitedFreeServers: 'Limitado ang libreng servers',
+  Strings.appCouldBeSimpler: 'Maaaring gawing mas simple ang app',
+  Strings.sometimesDisconnects: 'Minsan nadidiskonekta',
+  Strings.nothingSpecial: 'Walang espesyal',
+  Strings.easyToUse: 'Madaling gamitin',
+  Strings.fastConnection: 'Mabilis na koneksyon',
+  Strings.stablePerformance: 'Stable na performance',
+  Strings.usefulFreeVersion: 'Kapaki-pakinabang na libreng bersyon',
+  Strings.satisfiedOverall: 'Overall na satisfied',
+  Strings.fastAndStable: 'Mabilis at stable na koneksyon',
+  Strings.greatUserExperience: 'Mahusay na karanasan ng user',
+  Strings.excellentPremiumFeatures: 'Napakagaling na premium features',
+  Strings.worthRecommending: 'Worth irekomenda',
+  Strings.loveTheDesign: 'Gusto ko ang design',
+  Strings.changePassword: 'Baguhin ang Password',
+  Strings.changePasswordDescription: 'Maaari mong baguhin ang iyong password anumang oras para masigurado ang seguridad. Walang limit sa pagbabago ng password',
+  Strings.enterNewPassword: 'Ilagay ang bagong password',
+  Strings.enterConfirmPassword: 'Ilagay ang confirm password',
+  Strings.confirmPasswordMustBeTheSame: 'Hindi magkatugma ang dalawang password na inilagay',
+  Strings.yes: 'Oo',
+  Strings.signingUp: 'Nagsa-sign up...',
+  Strings.signUpSuccessful: 'Matagumpay ang sign up',
+  Strings.loggingIn: 'Nagla-log in...',
+  Strings.loginSuccessful: 'Matagumpay ang login',
+  Strings.loggingOut: 'Nagla-log out...',
+  Strings.logoutSuccessful: 'Matagumpay ang logout',
+  Strings.changingPassword: 'Binabago ang password...',
+  Strings.changePasswordSuccessful: 'Matagumpay na nabago ang password',
+  Strings.deletingAccount: 'Binubura ang account...',
+  Strings.deleteAccountSuccessful: 'Matagumpay na nabura ang account',
+  Strings.deleteAccountConfirmMessage: 'Ang pagbura ng iyong account ay permanenteng mag-aalis ng iyong data at membership information. Hindi na ito maaaring i-undo.',
+  Strings.deleteAccountConfirmButton: 'Burahin',
+  Strings.pushNotifications: 'Push Notifications',
+  Strings.upgradeNow: 'I-upgrade Ngayon',
+  Strings.enLang: 'English',
+  Strings.esLang: 'Español',
+  Strings.frLang: 'Français',
+  Strings.deLang: 'Deutsch',
+  Strings.jaLang: '日本語',
+  Strings.koLang: '한국어',
+  Strings.faLang: 'فارسی',
+  Strings.myLang: 'မြန်မာဘာသာ',
+  Strings.arLang: 'عربي',
+  Strings.ruLang: 'Русский',
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
+};
+

+ 297 - 0
lib/config/translations/tr_TR/tr_tr_translation.dart

@@ -0,0 +1,297 @@
+import '../strings_enum.dart';
+
+Map<String, String> trTR = {
+  Strings.someThingWentWorng: 'Bir şeyler yanlış gitti',
+  Strings.retry: 'Tekrar dene',
+  Strings.settings: 'Ayarlar',
+  Strings.language: 'Dil',
+  Strings.termsOfService: 'Hizmet Şartları',
+  Strings.privacyPolicy: 'Gizlilik Politikası',
+  Strings.version: 'Sürüm',
+  Strings.ok: 'Tamam',
+  Strings.cancel: 'İptal',
+  Strings.oops: 'Hay aksi',
+  Strings.copied: 'Kopyalandı',
+  Strings.later: 'Sonra',
+  Strings.noData: 'Veri yok',
+  Strings.refresh: 'Yenile',
+  Strings.unableToConnectNetwork: 'Lütfen internet bağlantınızı kontrol edin',
+  Strings.unableToConnectServer: 'Sunucu geçici olarak kullanılamıyor, lütfen daha sonra tekrar deneyin',
+  Strings.regionRestricted: 'Yerel yasalar ve düzenlemeler nedeniyle, FKey hizmeti bölgenizde kullanılamıyor.',
+  Strings.updateNow: 'Şimdi güncelle',
+  Strings.newVersionAvailable: 'Yeni sürüm mevcut',
+  Strings.eUtilOpenEmail: 'E-posta açılırken hata',
+  Strings.eUtilOpenBrowser: 'Tarayıcı açılırken hata',
+  Strings.eUtilOpenGooglePlay: 'Google Play açılırken hata',
+  Strings.error: 'Hata',
+  Strings.terms: 'Şartlar',
+  Strings.privacy: 'Gizlilik',
+  Strings.termsAgreementPrefix: 'Kaydolarak veya devam ederek, ',
+  Strings.termsAgreementConnector: ' ve ',
+  Strings.account: 'Hesap',
+  Strings.processing: 'İşleniyor...',
+  Strings.success: 'Başarılı',
+  Strings.unknownError: 'Bilinmeyen hata',
+  Strings.failed: 'Başarısız',
+  Strings.exit: 'Çıkış',
+  Strings.feedback: 'Geri bildirim',
+  Strings.networkSection: 'Ağ',
+  Strings.securitySection: 'Güvenlik',
+  Strings.myPreCode: 'Pre Kodum',
+  Strings.validTerm: 'Geçerlilik Süresi',
+  Strings.freeTime: 'Ücretsiz süre',
+  Strings.deviceAuthorization: 'Cihaz yetkilendirme',
+  Strings.routingMode: 'Yönlendirme modu',
+  Strings.splitTunneling: 'Bölünmüş tünel',
+  Strings.autoReconnect: 'Otomatik yeniden bağlan',
+  Strings.restoreDefault: 'Varsayılana sıfırla',
+  Strings.deleteAccount: 'Hesabı sil',
+  Strings.logout: 'Çıkış yap',
+  Strings.connecting: 'Bağlanıyor...',
+  Strings.connected: 'Bağlandı',
+  Strings.disconnected: 'Bağlantı kesildi',
+  Strings.open: 'Aç',
+  Strings.disconnect: 'Bağlantıyı kes',
+  Strings.connect: 'Bağlan',
+  Strings.opening: 'Açılıyor',
+  Strings.connectedSuccessfully: 'Başarıyla bağlandı',
+  Strings.willOpenSoon: 'yakında açılacak',
+  Strings.netflix: 'Netflix',
+  Strings.youtube: 'YouTube',
+  Strings.amazon: 'Amazon',
+  Strings.hulu: 'hulu',
+  Strings.niftyStreaming: 'Nifty Streaming',
+  Strings.youtubeStreaming: 'YouTube Streaming',
+  Strings.amazonStreaming: 'Amazon Streaming',
+  Strings.huluStreaming: 'hulu Streaming',
+  Strings.excludeSelectedAppsFromVPN: 'Seçili uygulamaları VPN\'den hariç tut',
+  Strings.useVPNForSelectedAppsOnly: 'VPN\'i yalnızca seçili uygulamalar için kullan',
+  Strings.selectApps: 'Uygulamaları seç',
+  Strings.customizeYourVPN: 'VPN\'inizi özelleştirin',
+  Strings.subscription: 'Abonelik',
+  Strings.currentSubscription: 'Mevcut abonelik',
+  Strings.upgradeToPremium: 'Premium\'a yükselt',
+  Strings.activatePreCode: 'Pre Kodu etkinleştir',
+  Strings.preCodeHint: 'Pre kodunuz varsa, Pre avantajlarınızı almak için lütfen girin.',
+  Strings.planChangeInfo: 'Plan değişikliği bilgisi',
+  Strings.whenItStarts: 'Ne zaman başlar',
+  Strings.whatHappensToYourBalance: 'Bakiyenize ne olur',
+  Strings.extraTime: 'Ekstra süre',
+  Strings.yourNewPlanBeginsRightAway: 'Yeni planınız hemen başlar.',
+  Strings.anyUnusedAmountFromYourOldPlan: 'Eski planınızdan kullanılmayan miktar yenisine eklenecektir.',
+  Strings.youllGetExtraDays: 'Kalan bakiyenize göre ekstra günler alacaksınız.',
+  Strings.premiumsIncluded: 'Premium\'a dahil',
+  Strings.unlockAllFreeLocations: 'Tüm ücretsiz konumların kilidini aç',
+  Strings.unlockSmartMode: 'Akıllı modun kilidini aç',
+  Strings.unlockMultiHopMode: 'Multi-hop modunun kilidini aç',
+  Strings.premiumCanShareXDevices: 'Premium X cihaz paylaşabilir',
+  Strings.ownYourOwnPrivateServer: 'Kendi özel sunucunuza sahip olun',
+  Strings.closeAds: 'Reklamları kapat',
+  Strings.confirmChange: 'Değişikliği onayla',
+  Strings.restorePurchases: 'Satın alımları geri yükle',
+  Strings.paymentIssue: 'Ödeme sorunu',
+  Strings.yearlyAutoRenewCancelAnytime: 'Yıllık otomatik yenileme. İstediğiniz zaman iptal edin',
+  Strings.recent: 'Son',
+  Strings.moviesAndTV: 'Film ve TV',
+  Strings.social: 'Sosyal',
+  Strings.support: 'Destek',
+  Strings.sport: 'Spor',
+  Strings.music: 'Müzik',
+  Strings.game: 'Oyun',
+  Strings.sorry: 'Üzgünüz',
+  Strings.unableToLoadData: 'Veriler yüklenemiyor',
+  Strings.dueLawsAndRegulations: 'Yerel yasalar ve düzenlemeler nedeniyle, \nNOMOVPN hizmetleri mevcut bölgenizde \nkullanılamıyor.',
+  Strings.sendPreCodeToEmail: 'Pre Kodu E-postaya gönder',
+  Strings.selectServer: 'Sunucu seç',
+  Strings.premiumActivated: 'Premium başarıyla etkinleştirildi!',
+  Strings.premiumActivatedMessage: 'Premium\'a yükseltildiniz. Tüm gelişmiş özelliklerden ve geliştirilmiş tarama deneyiminden yararlanın.',
+  Strings.gotIt: 'Anladım',
+  Strings.emailSent: 'E-posta başarıyla gönderildi',
+  Strings.emailSentMessage: 'Pre Kodunuz e-postanıza gönderildi.\nLütfen gelen kutunuzu (ve spam klasörünü) kontrol edin.',
+  Strings.noInternetConnection: 'İnternet bağlantısı yok',
+  Strings.noInternetMessage: 'Çevrimdışı görünüyorsunuz. Lütfen internet bağlantınızı kontrol edin ve tekrar deneyin.',
+  Strings.logOut: 'Çıkış Yap',
+  Strings.logOutConfirmMessage: 'Çıkış yapmak istediğinizden emin misiniz? Premium özelliklerinize erişmek için tekrar giriş yapmanız gerekecek.',
+  Strings.thankYouFeedback: 'Geri bildiriminiz için teşekkürler!',
+  Strings.feedbackMessage: 'Deneyiminizden memnun olmadığınız için üzgünüz. En kısa sürede iyileştirmek için elimizden geleni yapacağız.',
+  Strings.done: 'Tamam',
+  Strings.whatIsUid: 'UID nedir?',
+  Strings.uidMessage: 'Cihaz Kimliği (UID) Bu, cihazınızın benzersiz tanımlayıcısıdır. Bu kimliği sağlamak, destek ekibimizin cihazınızı doğrulamasına ve sorunlarınızı daha hızlı çözmesine yardımcı olur.',
+  Strings.confirm: 'Onayla',
+  Strings.copy: 'Kopyala',
+  Strings.pleaseKeepPageOpen: 'Lütfen bu sayfayı açık tutun.',
+  Strings.authorizationCode: 'Yetkilendirme kodu',
+  Strings.authorizationCodeDesc: 'Bu 6 haneli kod, bir VIP kullanıcının cihazınızı bağlamasına izin verir. Her 15 dakikada bir yenilenir.',
+  Strings.shareWithPreUser: 'Pre kullanıcısıyla paylaş',
+  Strings.shareWithPreUserDesc: 'VIP kullanıcıya bu kodu söyleyin, böylece sizi yetkilendirmek için kendi cihazında girebilir.',
+  Strings.waitingForAuthorization: 'Yetkilendirme bekleniyor',
+  Strings.waitingForAuthorizationDesc: 'Lütfen bu sayfayı açık tutun.\nOnaylandıktan sonra hesabınız otomatik olarak yükseltilecek ve yeniden bağlanacaktır.',
+  Strings.enterCode: 'Kodu girin',
+  Strings.enterCodeDesc: 'Diğer cihazda (ücretsiz kullanıcı) gösterilen 6 haneli kodu girin. Bu kod her 15 dakikada bir yenilenir.',
+  Strings.verifyDevice: 'Cihazı doğrula',
+  Strings.verifyDeviceDesc: 'Girilen kodun yetkilendirme bekleyen aktif bir cihazla eşleşip eşleşmediğini kontrol edeceğiz.',
+  Strings.authorizationSuccessful: 'Yetkilendirme başarılı',
+  Strings.authorizationSuccessfulDesc: 'Onaylandıktan sonra cihaz otomatik olarak yükseltilecek ve hesabınıza bağlanacaktır.',
+  Strings.deviceLimitReached: 'Cihaz limitine ulaşıldı',
+  Strings.deviceLimitMessage: 'Yalnızca şu kadar yetkilendirebilirsiniz:',
+  Strings.devices: 'cihaz',
+  Strings.deviceAuthorized: 'Cihaz yetkilendirildi',
+  Strings.deviceAuthorizedMessage: 'Yeni cihaz başarıyla yetkilendirildi',
+  Strings.relieveDevice: 'Cihazı kaldır',
+  Strings.relieveDeviceMessage: 'Kaldırmak istediğinizden emin misiniz',
+  Strings.relieveDeviceLoseAccess: 'Bu cihaz Premium erişimini kaybedecek.',
+  Strings.deviceRelieved: 'Cihaz kaldırıldı',
+  Strings.deviceRelievedMessage: 'yetkili cihazlardan kaldırıldı',
+  Strings.currentDevice: 'Mevcut cihaz',
+  Strings.androidDevices: 'Android cihazlar',
+  Strings.authCodeCopied: 'Yetkilendirme kodu kopyalandı',
+  Strings.invalidAuthorizationCode: 'Geçersiz yetkilendirme kodu',
+  Strings.invalidAuthorizationCodeMessage: 'Girdiğiniz kod yanlış veya süresi dolmuş.\nLütfen diğer cihazdaki 6 haneli kodu kontrol edin ve tekrar deneyin.',
+  Strings.invalidAuthorizationCodeButton: 'Tekrar dene',
+  Strings.codeBackedUpMessage: 'Kodunuz bu e-postaya yedeklenecek.',
+  Strings.enterYourEmail: 'E-postanızı girin',
+  Strings.sendYourEmail: 'E-postanızı gönderin',
+  Strings.yourPreCredential: 'Pre Kimlik Bilgileriniz',
+  Strings.yourPreCredentialDesc: 'Bu sizin VIP kimlik bilgilerinizdir. Lütfen güvenli bir şekilde saklayın ve kimseyle paylaşmayın.',
+  Strings.secureEmailBackup: 'Güvenli e-posta yedekleme',
+  Strings.secureEmailBackupDesc: 'Bu kimlik bilgilerini içeren bir e-postayı güvenli saklama için belirttiğiniz e-posta adresine göndereceğiz.',
+  Strings.sendAndSave: 'Gönder ve kaydet',
+  Strings.sendAndSaveDesc: 'E-posta gönderildikten sonra, bu kimlik bilgilerini cihazınızda güvenli bir konuma da kaydetmenizi öneririz.',
+  Strings.smart: 'Akıllı',
+  Strings.smartModeDesc: 'Yerel ve VPN ağları bir arada bulunur ve en uygun rota akıllıca seçilir.',
+  Strings.global: 'Global',
+  Strings.globalModeDesc: 'Maksimum gizlilik ve güvenlik sağlamak için tüm trafik VPN sunucusu üzerinden yönlendirilir.',
+  Strings.perYear: 'Yıllık',
+  Strings.yearlyPlan: 'Yıllık plan',
+  Strings.mostlyChoose: 'En çok tercih edilen',
+  Strings.once: 'bir kez',
+  Strings.lifeTime: 'Ömür boyu',
+  Strings.monthPlan: 'Aylık plan',
+  Strings.perWeek: 'Haftalık',
+  Strings.weekPlan: 'Haftalık plan',
+  Strings.limitedTime: 'Sınırlı süre',
+  Strings.subscriptionChanged: 'Abonelik planı başarıyla değiştirildi',
+  Strings.restoringPurchases: 'Satın almalar geri yükleniyor...',
+  Strings.openingPaymentSupport: 'Ödeme desteği açılıyor...',
+  Strings.info: 'Bilgi',
+  Strings.vpnConnectionError: 'VPN bağlantı hatası',
+  Strings.vpnServiceDisconnected: 'VPN servisi beklenmedik şekilde kesildi',
+  Strings.failedCaptureScreenshot: 'Ekran görüntüsü alınamadı',
+  Strings.imageSavedToAlbum: 'Görsel yerel albümünüze kaydedildi',
+  Strings.failedSaveImage: 'Görsel galeriye kaydedilemedi',
+  Strings.failedToSave: 'Kaydedilemedi',
+  Strings.failedSendEmail: 'E-posta gönderilemedi',
+  Strings.activeTime: 'Aktif süre',
+  Strings.yearPlanPrice: 'Yıllık plan yılda @price',
+  Strings.securingData: 'Veriler güvenli hale getiriliyor…',
+  Strings.encryptingTraffic: 'Trafik şifreleniyor…',
+  Strings.protectingPrivacy: 'Gizlilik korunuyor…',
+  Strings.safeConnection: 'Güvenli bağlantı…',
+  Strings.yourDataIsSafe: 'Verileriniz güvende…',
+  Strings.login: 'Giriş yap',
+  Strings.loginButton: 'Giriş Yap',
+  Strings.loginDescription: 'Başarılı giriş sonrasında, ücretsiz deneme süreniz uygulanacak ve kalan üyelik tüm bağlı cihazlarda kullanım için hesabınızla senkronize edilecektir.',
+  Strings.signup: 'NOMO\'ya kaydol',
+  Strings.signupButton: 'Kaydol',
+  Strings.signupDescription: 'Kayıt sonrasında, ücretsiz deneme süreniz düşülecek ve diğer üyelik süreleri çoklu cihaz kullanımı için hesabınıza aktarılacaktır.',
+  Strings.username: 'Kullanıcı adı',
+  Strings.password: 'Şifre',
+  Strings.usernamePasswordRule: '6-20 karakter (harf veya rakam)',
+  Strings.noAccount: 'Hesabınız yok mu? ',
+  Strings.registerNow: ' Şimdi kaydol',
+  Strings.alreadyHaveAccount: 'Zaten hesabınız var mı? ',
+  Strings.loginNow: ' Şimdi giriş yap',
+  Strings.feedbackPlaceholder: 'Sorununuzu veya önerinizi açıklayın...',
+  Strings.emailAddressForReply: '• E-posta adresiniz (yanıtımız için)',
+  Strings.send: 'Gönder',
+  Strings.changeSubscription: 'Aboneliği değiştir',
+  Strings.awaitingActivation: 'Aktivasyon bekleniyor',
+  Strings.relieve: 'Kaldır',
+  Strings.configureAuthorizedDevices: 'Yetkili cihazları yapılandır...',
+  Strings.authorizeUpTo4DevicesAsPremium: 'Premium olarak @max cihaza kadar yetkilendir (@current/@max)',
+  Strings.youCanAuthorizeOtherDevices: 'Diğer cihazları Premium kullanıcı olarak yetkilendirebilirsiniz (@current/@max)',
+  Strings.preCodeInfoMessage: 'Pre Kod, premium kullanıcı kimlik bilgilerinizdir.\nAvantajları etkinleştirmek veya hesabınızı\ndiğer cihazlarda senkronize etmek için kullanın.',
+  Strings.pleaseStoreSecurely: 'Lütfen güvenli bir şekilde saklayın!',
+  Strings.sendPreCodeEmailDesc: 'Pre Kodunuzu kayıtlı e-posta adresinize gönderin',
+  Strings.storeLocalCopyDesc: 'Pre Kodunuzun bir kopyasını bu cihazda saklayın',
+  Strings.preview: 'Önizleme',
+  Strings.hide: 'Gizle',
+  Strings.sendToEmail: 'E-postaya gönder',
+  Strings.saveLocalCopy: 'Yerel kopya kaydet',
+  Strings.secureYourConnection: 'Bağlantınızı güvence altına alın',
+  Strings.secureYourConnectionDesc: 'Farklı cihazlarda üyelik paylaşmak için giriş yapabilir veya hesap kaydedebilirsiniz.',
+  Strings.save: 'Kaydet',
+  Strings.onlyOneModeActive: 'Aynı anda yalnızca bir mod aktif olabilir.',
+  Strings.chooseAppsExcludeDesc: 'VPN kullanmadan doğrudan bağlanacak uygulamaları seçin.',
+  Strings.chooseAppsIncludeDesc: 'VPN kullanacak uygulamaları seçin, diğerleri normal şekilde bağlanır.',
+  Strings.splitTunnelingDesc: 'Bölünmüş tünel, hangi uygulamaların VPN bağlantısını kullanacağını ve hangilerinin doğrudan bağlanacağını kontrol etmenizi sağlar. Bant genişliğini yönetmenize ve VPN\'i kapatmadan yerel veya yabancı içeriğe erişmenize yardımcı olur.',
+  Strings.selectAppsExclude: 'VPN kullanmayacak uygulamaları seçin',
+  Strings.selectAppsInclude: 'VPN kullanacak uygulamaları seçin',
+  Strings.deselectAll: 'Tümünü kaldır',
+  Strings.allApps: 'Tüm uygulamalar',
+  Strings.howExperience: 'Şu ana kadar\ndeneyiminiz nasıl?',
+  Strings.wedLoveToKnow: 'bilmek isteriz!',
+  Strings.vpnConnectionFailed: 'VPN bağlantısı başarısız',
+  Strings.internetTooSlow: 'İnternet çok yavaş',
+  Strings.keepsDisconnecting: 'Sürekli bağlantı kesiliyor',
+  Strings.appCrashes: 'Uygulama çöküyor veya donuyor',
+  Strings.otherIssues: 'Diğer sorunlar',
+  Strings.connectionUnstable: 'Bağlantı kararsız',
+  Strings.speedNotExpected: 'Hız beklenen gibi değil',
+  Strings.hardToUse: 'Kullanımı zor / kafa karıştırıcı UI',
+  Strings.worksFineNotFast: 'İyi çalışıyor ama yeterince hızlı değil',
+  Strings.limitedFreeServers: 'Sınırlı ücretsiz sunucular',
+  Strings.appCouldBeSimpler: 'Uygulama daha basit olabilir',
+  Strings.sometimesDisconnects: 'Bazen bağlantı kesiliyor',
+  Strings.nothingSpecial: 'Özel bir şey yok',
+  Strings.easyToUse: 'Kullanımı kolay',
+  Strings.fastConnection: 'Hızlı bağlantı',
+  Strings.stablePerformance: 'Kararlı performans',
+  Strings.usefulFreeVersion: 'Kullanışlı ücretsiz sürüm',
+  Strings.satisfiedOverall: 'Genel olarak memnun',
+  Strings.fastAndStable: 'Hızlı ve kararlı bağlantı',
+  Strings.greatUserExperience: 'Harika kullanıcı deneyimi',
+  Strings.excellentPremiumFeatures: 'Mükemmel premium özellikler',
+  Strings.worthRecommending: 'Tavsiye etmeye değer',
+  Strings.loveTheDesign: 'Tasarımı seviyorum',
+  Strings.changePassword: 'Şifre değiştir',
+  Strings.changePasswordDescription: 'Güvenliği sağlamak için şifrenizi istediğiniz zaman değiştirebilirsiniz. Şifre değiştirme limiti yok',
+  Strings.enterNewPassword: 'Yeni şifreyi girin',
+  Strings.enterConfirmPassword: 'Şifreyi onaylayın',
+  Strings.confirmPasswordMustBeTheSame: 'İki kez girilen şifreler eşleşmiyor',
+  Strings.yes: 'Evet',
+  Strings.signingUp: 'Kaydolunuyor...',
+  Strings.signUpSuccessful: 'Kayıt başarılı',
+  Strings.loggingIn: 'Giriş yapılıyor...',
+  Strings.loginSuccessful: 'Giriş başarılı',
+  Strings.loggingOut: 'Çıkış yapılıyor...',
+  Strings.logoutSuccessful: 'Çıkış başarılı',
+  Strings.changingPassword: 'Şifre değiştiriliyor...',
+  Strings.changePasswordSuccessful: 'Şifre başarıyla değiştirildi',
+  Strings.deletingAccount: 'Hesap siliniyor...',
+  Strings.deleteAccountSuccessful: 'Hesap başarıyla silindi',
+  Strings.deleteAccountConfirmMessage: 'Hesabınızı silmek, verilerinizi ve üyelik bilgilerinizi kalıcı olarak kaldıracaktır. Bu işlem geri alınamaz.',
+  Strings.deleteAccountConfirmButton: 'Sil',
+  Strings.pushNotifications: 'Anlık bildirimler',
+  Strings.upgradeNow: 'Şimdi yükselt',
+  Strings.enLang: 'English',
+  Strings.esLang: 'Español',
+  Strings.frLang: 'Français',
+  Strings.deLang: 'Deutsch',
+  Strings.jaLang: '日本語',
+  Strings.koLang: '한국어',
+  Strings.faLang: 'فارسی',
+  Strings.myLang: 'မြန်မာဘာသာ',
+  Strings.arLang: 'عربي',
+  Strings.ruLang: 'Русский',
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
+};
+

+ 297 - 0
lib/config/translations/vi_VN/vi_vn_translation.dart

@@ -0,0 +1,297 @@
+import '../strings_enum.dart';
+
+Map<String, String> viVN = {
+  Strings.someThingWentWorng: 'Đã xảy ra lỗi',
+  Strings.retry: 'Thử lại',
+  Strings.settings: 'Cài đặt',
+  Strings.language: 'Ngôn ngữ',
+  Strings.termsOfService: 'Điều khoản dịch vụ',
+  Strings.privacyPolicy: 'Chính sách bảo mật',
+  Strings.version: 'Phiên bản',
+  Strings.ok: 'OK',
+  Strings.cancel: 'Hủy',
+  Strings.oops: 'Ôi',
+  Strings.copied: 'Đã sao chép',
+  Strings.later: 'Sau',
+  Strings.noData: 'Không có dữ liệu',
+  Strings.refresh: 'Làm mới',
+  Strings.unableToConnectNetwork: 'Vui lòng kiểm tra kết nối internet',
+  Strings.unableToConnectServer: 'Máy chủ tạm thời không khả dụng, vui lòng thử lại sau',
+  Strings.regionRestricted: 'Do luật pháp và quy định địa phương, dịch vụ FKey không khả dụng ở khu vực của bạn.',
+  Strings.updateNow: 'Cập nhật ngay',
+  Strings.newVersionAvailable: 'Có phiên bản mới',
+  Strings.eUtilOpenEmail: 'Lỗi khi mở email',
+  Strings.eUtilOpenBrowser: 'Lỗi khi mở trình duyệt',
+  Strings.eUtilOpenGooglePlay: 'Lỗi khi mở Google Play',
+  Strings.error: 'Lỗi',
+  Strings.terms: 'Điều khoản',
+  Strings.privacy: 'Bảo mật',
+  Strings.termsAgreementPrefix: 'Bằng việc đăng ký hoặc tiếp tục, bạn đồng ý với ',
+  Strings.termsAgreementConnector: ' và ',
+  Strings.account: 'Tài khoản',
+  Strings.processing: 'Đang xử lý...',
+  Strings.success: 'Thành công',
+  Strings.unknownError: 'Lỗi không xác định',
+  Strings.failed: 'Thất bại',
+  Strings.exit: 'Thoát',
+  Strings.feedback: 'Phản hồi',
+  Strings.networkSection: 'Mạng',
+  Strings.securitySection: 'Bảo mật',
+  Strings.myPreCode: 'Pre Code của tôi',
+  Strings.validTerm: 'Thời hạn',
+  Strings.freeTime: 'Thời gian miễn phí',
+  Strings.deviceAuthorization: 'Ủy quyền thiết bị',
+  Strings.routingMode: 'Chế độ định tuyến',
+  Strings.splitTunneling: 'Chia tách đường hầm',
+  Strings.autoReconnect: 'Tự động kết nối lại',
+  Strings.restoreDefault: 'Khôi phục mặc định',
+  Strings.deleteAccount: 'Xóa tài khoản',
+  Strings.logout: 'Đăng xuất',
+  Strings.connecting: 'Đang kết nối...',
+  Strings.connected: 'Đã kết nối',
+  Strings.disconnected: 'Đã ngắt kết nối',
+  Strings.open: 'Mở',
+  Strings.disconnect: 'Ngắt kết nối',
+  Strings.connect: 'Kết nối',
+  Strings.opening: 'Đang mở',
+  Strings.connectedSuccessfully: 'Kết nối thành công',
+  Strings.willOpenSoon: 'sẽ sớm mở',
+  Strings.netflix: 'Netflix',
+  Strings.youtube: 'YouTube',
+  Strings.amazon: 'Amazon',
+  Strings.hulu: 'hulu',
+  Strings.niftyStreaming: 'Nifty Streaming',
+  Strings.youtubeStreaming: 'YouTube Streaming',
+  Strings.amazonStreaming: 'Amazon Streaming',
+  Strings.huluStreaming: 'hulu Streaming',
+  Strings.excludeSelectedAppsFromVPN: 'Loại trừ ứng dụng đã chọn khỏi VPN',
+  Strings.useVPNForSelectedAppsOnly: 'Chỉ sử dụng VPN cho ứng dụng đã chọn',
+  Strings.selectApps: 'Chọn ứng dụng',
+  Strings.customizeYourVPN: 'Tùy chỉnh VPN của bạn',
+  Strings.subscription: 'Đăng ký',
+  Strings.currentSubscription: 'Đăng ký hiện tại',
+  Strings.upgradeToPremium: 'Nâng cấp lên Premium',
+  Strings.activatePreCode: 'Kích hoạt Pre Code',
+  Strings.preCodeHint: 'Nếu bạn có Pre code, vui lòng nhập để nhận quyền lợi Pre.',
+  Strings.planChangeInfo: 'Thông tin thay đổi gói',
+  Strings.whenItStarts: 'Khi nào bắt đầu',
+  Strings.whatHappensToYourBalance: 'Điều gì xảy ra với số dư của bạn',
+  Strings.extraTime: 'Thời gian thêm',
+  Strings.yourNewPlanBeginsRightAway: 'Gói mới của bạn bắt đầu ngay.',
+  Strings.anyUnusedAmountFromYourOldPlan: 'Bất kỳ số tiền chưa sử dụng từ gói cũ sẽ được thêm vào gói mới.',
+  Strings.youllGetExtraDays: 'Bạn sẽ nhận được thêm ngày dựa trên số dư còn lại.',
+  Strings.premiumsIncluded: 'Bao gồm trong Premium',
+  Strings.unlockAllFreeLocations: 'Mở khóa tất cả vị trí miễn phí',
+  Strings.unlockSmartMode: 'Mở khóa chế độ thông minh',
+  Strings.unlockMultiHopMode: 'Mở khóa chế độ Multi-hop',
+  Strings.premiumCanShareXDevices: 'Premium có thể chia sẻ X thiết bị',
+  Strings.ownYourOwnPrivateServer: 'Sở hữu máy chủ riêng của bạn',
+  Strings.closeAds: 'Tắt quảng cáo',
+  Strings.confirmChange: 'Xác nhận thay đổi',
+  Strings.restorePurchases: 'Khôi phục mua hàng',
+  Strings.paymentIssue: 'Vấn đề thanh toán',
+  Strings.yearlyAutoRenewCancelAnytime: 'Tự động gia hạn hàng năm. Hủy bất cứ lúc nào',
+  Strings.recent: 'Gần đây',
+  Strings.moviesAndTV: 'Phim & TV',
+  Strings.social: 'Xã hội',
+  Strings.support: 'Hỗ trợ',
+  Strings.sport: 'Thể thao',
+  Strings.music: 'Âm nhạc',
+  Strings.game: 'Trò chơi',
+  Strings.sorry: 'Xin lỗi',
+  Strings.unableToLoadData: 'Không thể tải dữ liệu',
+  Strings.dueLawsAndRegulations: 'Do luật pháp và quy định địa phương, \ndịch vụ NOMOVPN không khả dụng ở \nkhu vực hiện tại của bạn.',
+  Strings.sendPreCodeToEmail: 'Gửi Pre Code qua Email',
+  Strings.selectServer: 'Chọn máy chủ',
+  Strings.premiumActivated: 'Premium đã kích hoạt thành công!',
+  Strings.premiumActivatedMessage: 'Bạn đã được nâng cấp lên Premium. Tận hưởng tất cả tính năng nâng cao và trải nghiệm duyệt web được cải thiện.',
+  Strings.gotIt: 'Đã hiểu',
+  Strings.emailSent: 'Email đã gửi thành công',
+  Strings.emailSentMessage: 'Pre Code của bạn đã được gửi đến email.\nVui lòng kiểm tra hộp thư đến (và thư rác).',
+  Strings.noInternetConnection: 'Không có kết nối internet',
+  Strings.noInternetMessage: 'Có vẻ như bạn đang ngoại tuyến. Vui lòng kiểm tra kết nối internet và thử lại.',
+  Strings.logOut: 'Đăng xuất',
+  Strings.logOutConfirmMessage: 'Bạn có chắc muốn đăng xuất? Bạn sẽ cần đăng nhập lại để truy cập các tính năng Premium.',
+  Strings.thankYouFeedback: 'Cảm ơn phản hồi của bạn!',
+  Strings.feedbackMessage: 'Chúng tôi rất tiếc vì bạn không hài lòng với trải nghiệm. Chúng tôi sẽ cố gắng cải thiện sớm.',
+  Strings.done: 'Xong',
+  Strings.whatIsUid: 'UID là gì?',
+  Strings.uidMessage: 'ID thiết bị (UID) Đây là mã định danh duy nhất của thiết bị của bạn. Cung cấp ID này giúp đội ngũ hỗ trợ xác minh thiết bị và giải quyết vấn đề nhanh hơn.',
+  Strings.confirm: 'Xác nhận',
+  Strings.copy: 'Sao chép',
+  Strings.pleaseKeepPageOpen: 'Vui lòng giữ trang này mở.',
+  Strings.authorizationCode: 'Mã ủy quyền',
+  Strings.authorizationCodeDesc: 'Mã 6 chữ số này cho phép người dùng VIP liên kết thiết bị của bạn. Nó làm mới mỗi 15 phút.',
+  Strings.shareWithPreUser: 'Chia sẻ với người dùng Pre',
+  Strings.shareWithPreUserDesc: 'Cho người dùng VIP biết mã này để họ có thể nhập trên thiết bị của họ để ủy quyền cho bạn.',
+  Strings.waitingForAuthorization: 'Đang chờ ủy quyền',
+  Strings.waitingForAuthorizationDesc: 'Vui lòng giữ trang này mở.\nSau khi được phê duyệt, tài khoản của bạn sẽ tự động nâng cấp và kết nối lại.',
+  Strings.enterCode: 'Nhập mã',
+  Strings.enterCodeDesc: 'Nhập mã 6 chữ số hiển thị trên thiết bị khác (người dùng miễn phí). Mã này làm mới mỗi 15 phút.',
+  Strings.verifyDevice: 'Xác minh thiết bị',
+  Strings.verifyDeviceDesc: 'Chúng tôi sẽ kiểm tra xem mã đã nhập có khớp với thiết bị đang chờ ủy quyền không.',
+  Strings.authorizationSuccessful: 'Ủy quyền thành công',
+  Strings.authorizationSuccessfulDesc: 'Sau khi xác nhận, thiết bị sẽ tự động nâng cấp và liên kết với tài khoản của bạn.',
+  Strings.deviceLimitReached: 'Đã đạt giới hạn thiết bị',
+  Strings.deviceLimitMessage: 'Bạn chỉ có thể ủy quyền tối đa',
+  Strings.devices: 'thiết bị',
+  Strings.deviceAuthorized: 'Thiết bị đã được ủy quyền',
+  Strings.deviceAuthorizedMessage: 'Thiết bị mới đã được ủy quyền thành công',
+  Strings.relieveDevice: 'Gỡ bỏ thiết bị',
+  Strings.relieveDeviceMessage: 'Bạn có chắc muốn gỡ bỏ',
+  Strings.relieveDeviceLoseAccess: 'Thiết bị này sẽ mất quyền truy cập Premium.',
+  Strings.deviceRelieved: 'Thiết bị đã được gỡ bỏ',
+  Strings.deviceRelievedMessage: 'đã được gỡ bỏ khỏi các thiết bị được ủy quyền',
+  Strings.currentDevice: 'Thiết bị hiện tại',
+  Strings.androidDevices: 'Thiết bị Android',
+  Strings.authCodeCopied: 'Mã ủy quyền đã được sao chép',
+  Strings.invalidAuthorizationCode: 'Mã ủy quyền không hợp lệ',
+  Strings.invalidAuthorizationCodeMessage: 'Mã bạn nhập không chính xác hoặc đã hết hạn.\nVui lòng kiểm tra mã 6 chữ số trên thiết bị khác và thử lại.',
+  Strings.invalidAuthorizationCodeButton: 'Thử lại',
+  Strings.codeBackedUpMessage: 'Mã của bạn sẽ được sao lưu vào email này.',
+  Strings.enterYourEmail: 'Nhập email của bạn',
+  Strings.sendYourEmail: 'Gửi email của bạn',
+  Strings.yourPreCredential: 'Thông tin xác thực Pre của bạn',
+  Strings.yourPreCredentialDesc: 'Đây là thông tin xác thực VIP của bạn. Vui lòng lưu trữ an toàn và không chia sẻ với bất kỳ ai.',
+  Strings.secureEmailBackup: 'Sao lưu email an toàn',
+  Strings.secureEmailBackupDesc: 'Chúng tôi sẽ gửi email chứa thông tin xác thực này đến địa chỉ email bạn chỉ định để lưu giữ an toàn.',
+  Strings.sendAndSave: 'Gửi và lưu',
+  Strings.sendAndSaveDesc: 'Sau khi email được gửi, chúng tôi khuyên bạn cũng nên lưu thông tin xác thực này vào vị trí an toàn trên thiết bị.',
+  Strings.smart: 'Thông minh',
+  Strings.smartModeDesc: 'Mạng cục bộ và VPN cùng tồn tại, và tuyến đường tối ưu được chọn một cách thông minh.',
+  Strings.global: 'Toàn cầu',
+  Strings.globalModeDesc: 'Tất cả lưu lượng được định tuyến qua máy chủ VPN để đảm bảo quyền riêng tư và bảo mật tối đa.',
+  Strings.perYear: 'Mỗi năm',
+  Strings.yearlyPlan: 'Gói hàng năm',
+  Strings.mostlyChoose: 'Được chọn nhiều nhất',
+  Strings.once: 'một lần',
+  Strings.lifeTime: 'Trọn đời',
+  Strings.monthPlan: 'Gói hàng tháng',
+  Strings.perWeek: 'Mỗi tuần',
+  Strings.weekPlan: 'Gói hàng tuần',
+  Strings.limitedTime: 'Giới hạn thời gian',
+  Strings.subscriptionChanged: 'Gói đăng ký đã thay đổi thành công',
+  Strings.restoringPurchases: 'Đang khôi phục mua hàng...',
+  Strings.openingPaymentSupport: 'Đang mở hỗ trợ thanh toán...',
+  Strings.info: 'Thông tin',
+  Strings.vpnConnectionError: 'Lỗi kết nối VPN',
+  Strings.vpnServiceDisconnected: 'Dịch vụ VPN bị ngắt bất ngờ',
+  Strings.failedCaptureScreenshot: 'Không thể chụp ảnh màn hình',
+  Strings.imageSavedToAlbum: 'Hình ảnh đã được lưu vào album của bạn',
+  Strings.failedSaveImage: 'Không thể lưu hình ảnh vào thư viện',
+  Strings.failedToSave: 'Không thể lưu',
+  Strings.failedSendEmail: 'Không thể gửi email',
+  Strings.activeTime: 'Thời gian hoạt động',
+  Strings.yearPlanPrice: 'Gói năm @price mỗi năm',
+  Strings.securingData: 'Đang bảo mật dữ liệu…',
+  Strings.encryptingTraffic: 'Đang mã hóa lưu lượng…',
+  Strings.protectingPrivacy: 'Đang bảo vệ quyền riêng tư…',
+  Strings.safeConnection: 'Kết nối an toàn…',
+  Strings.yourDataIsSafe: 'Dữ liệu của bạn an toàn…',
+  Strings.login: 'Đăng nhập',
+  Strings.loginButton: 'Đăng nhập',
+  Strings.loginDescription: 'Sau khi đăng nhập thành công, thời gian dùng thử miễn phí sẽ được áp dụng và thời gian thành viên còn lại sẽ được đồng bộ với tài khoản để sử dụng trên tất cả thiết bị liên kết.',
+  Strings.signup: 'Đăng ký NOMO',
+  Strings.signupButton: 'Đăng ký',
+  Strings.signupDescription: 'Sau khi đăng ký, thời gian dùng thử miễn phí sẽ bị trừ và thời gian thành viên khác sẽ chuyển sang tài khoản để sử dụng nhiều thiết bị.',
+  Strings.username: 'Tên đăng nhập',
+  Strings.password: 'Mật khẩu',
+  Strings.usernamePasswordRule: '6-20 ký tự (chữ cái hoặc số)',
+  Strings.noAccount: 'Chưa có tài khoản? ',
+  Strings.registerNow: ' Đăng ký ngay',
+  Strings.alreadyHaveAccount: 'Đã có tài khoản? ',
+  Strings.loginNow: ' Đăng nhập ngay',
+  Strings.feedbackPlaceholder: 'Mô tả vấn đề hoặc đề xuất của bạn...',
+  Strings.emailAddressForReply: '• Địa chỉ email của bạn (để chúng tôi trả lời)',
+  Strings.send: 'Gửi',
+  Strings.changeSubscription: 'Thay đổi đăng ký',
+  Strings.awaitingActivation: 'Đang chờ kích hoạt',
+  Strings.relieve: 'Gỡ bỏ',
+  Strings.configureAuthorizedDevices: 'Cấu hình thiết bị được ủy quyền...',
+  Strings.authorizeUpTo4DevicesAsPremium: 'Ủy quyền tối đa @max thiết bị là Premium (@current/@max)',
+  Strings.youCanAuthorizeOtherDevices: 'Bạn có thể ủy quyền các thiết bị khác là người dùng Premium (@current/@max)',
+  Strings.preCodeInfoMessage: 'Pre Code là thông tin xác thực người dùng premium.\nSử dụng nó để kích hoạt quyền lợi hoặc đồng bộ tài khoản\ntrên các thiết bị khác.',
+  Strings.pleaseStoreSecurely: 'Vui lòng lưu trữ an toàn!',
+  Strings.sendPreCodeEmailDesc: 'Gửi Pre Code đến địa chỉ email đã đăng ký',
+  Strings.storeLocalCopyDesc: 'Lưu bản sao Pre Code trên thiết bị này',
+  Strings.preview: 'Xem trước',
+  Strings.hide: 'Ẩn',
+  Strings.sendToEmail: 'Gửi qua email',
+  Strings.saveLocalCopy: 'Lưu bản sao cục bộ',
+  Strings.secureYourConnection: 'Bảo mật kết nối của bạn',
+  Strings.secureYourConnectionDesc: 'Bạn có thể đăng nhập hoặc đăng ký tài khoản để chia sẻ thành viên trên các thiết bị khác nhau.',
+  Strings.save: 'Lưu',
+  Strings.onlyOneModeActive: 'Chỉ một chế độ có thể hoạt động tại một thời điểm.',
+  Strings.chooseAppsExcludeDesc: 'Chọn các ứng dụng sẽ kết nối trực tiếp mà không sử dụng VPN.',
+  Strings.chooseAppsIncludeDesc: 'Chọn các ứng dụng sẽ sử dụng VPN trong khi các ứng dụng khác kết nối bình thường.',
+  Strings.splitTunnelingDesc: 'Chia tách đường hầm cho phép bạn kiểm soát ứng dụng nào sử dụng kết nối VPN và ứng dụng nào kết nối trực tiếp. Nó giúp quản lý băng thông và truy cập nội dung địa phương hoặc nước ngoài mà không cần tắt VPN.',
+  Strings.selectAppsExclude: 'Chọn ứng dụng không sử dụng VPN',
+  Strings.selectAppsInclude: 'Chọn ứng dụng sử dụng VPN',
+  Strings.deselectAll: 'Bỏ chọn tất cả',
+  Strings.allApps: 'Tất cả ứng dụng',
+  Strings.howExperience: 'Trải nghiệm của bạn\nthế nào?',
+  Strings.wedLoveToKnow: 'chúng tôi rất muốn biết!',
+  Strings.vpnConnectionFailed: 'Kết nối VPN thất bại',
+  Strings.internetTooSlow: 'Internet quá chậm',
+  Strings.keepsDisconnecting: 'Liên tục ngắt kết nối',
+  Strings.appCrashes: 'Ứng dụng bị treo hoặc đóng băng',
+  Strings.otherIssues: 'Vấn đề khác',
+  Strings.connectionUnstable: 'Kết nối không ổn định',
+  Strings.speedNotExpected: 'Tốc độ không như mong đợi',
+  Strings.hardToUse: 'Khó sử dụng / giao diện khó hiểu',
+  Strings.worksFineNotFast: 'Hoạt động tốt nhưng không đủ nhanh',
+  Strings.limitedFreeServers: 'Máy chủ miễn phí hạn chế',
+  Strings.appCouldBeSimpler: 'Ứng dụng có thể đơn giản hơn',
+  Strings.sometimesDisconnects: 'Đôi khi bị ngắt kết nối',
+  Strings.nothingSpecial: 'Không có gì đặc biệt',
+  Strings.easyToUse: 'Dễ sử dụng',
+  Strings.fastConnection: 'Kết nối nhanh',
+  Strings.stablePerformance: 'Hiệu suất ổn định',
+  Strings.usefulFreeVersion: 'Phiên bản miễn phí hữu ích',
+  Strings.satisfiedOverall: 'Hài lòng tổng thể',
+  Strings.fastAndStable: 'Kết nối nhanh và ổn định',
+  Strings.greatUserExperience: 'Trải nghiệm người dùng tuyệt vời',
+  Strings.excellentPremiumFeatures: 'Tính năng premium xuất sắc',
+  Strings.worthRecommending: 'Đáng giới thiệu',
+  Strings.loveTheDesign: 'Tôi yêu thiết kế này',
+  Strings.changePassword: 'Đổi mật khẩu',
+  Strings.changePasswordDescription: 'Bạn có thể đổi mật khẩu bất cứ lúc nào để đảm bảo an toàn. Không giới hạn số lần đổi mật khẩu',
+  Strings.enterNewPassword: 'Nhập mật khẩu mới',
+  Strings.enterConfirmPassword: 'Nhập xác nhận mật khẩu',
+  Strings.confirmPasswordMustBeTheSame: 'Mật khẩu nhập hai lần không khớp',
+  Strings.yes: 'Có',
+  Strings.signingUp: 'Đang đăng ký...',
+  Strings.signUpSuccessful: 'Đăng ký thành công',
+  Strings.loggingIn: 'Đang đăng nhập...',
+  Strings.loginSuccessful: 'Đăng nhập thành công',
+  Strings.loggingOut: 'Đang đăng xuất...',
+  Strings.logoutSuccessful: 'Đăng xuất thành công',
+  Strings.changingPassword: 'Đang đổi mật khẩu...',
+  Strings.changePasswordSuccessful: 'Đổi mật khẩu thành công',
+  Strings.deletingAccount: 'Đang xóa tài khoản...',
+  Strings.deleteAccountSuccessful: 'Xóa tài khoản thành công',
+  Strings.deleteAccountConfirmMessage: 'Xóa tài khoản sẽ xóa vĩnh viễn dữ liệu và thông tin thành viên của bạn. Hành động này không thể hoàn tác.',
+  Strings.deleteAccountConfirmButton: 'Xóa',
+  Strings.pushNotifications: 'Thông báo đẩy',
+  Strings.upgradeNow: 'Nâng cấp ngay',
+  Strings.enLang: 'English',
+  Strings.esLang: 'Español',
+  Strings.frLang: 'Français',
+  Strings.deLang: 'Deutsch',
+  Strings.jaLang: '日本語',
+  Strings.koLang: '한국어',
+  Strings.faLang: 'فارسی',
+  Strings.myLang: 'မြန်မာဘာသာ',
+  Strings.arLang: 'عربي',
+  Strings.ruLang: 'Русский',
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
+};
+

+ 389 - 0
lib/config/translations/zh_TW/zh_tw_translation.dart

@@ -0,0 +1,389 @@
+import '../strings_enum.dart';
+
+Map<String, String> zhTW = {
+  Strings.someThingWentWorng: '發生錯誤',
+  Strings.retry: '重試',
+  //profile
+  Strings.settings: '設定',
+  Strings.language: '語言',
+  Strings.termsOfService: '服務條款',
+  Strings.privacyPolicy: '隱私政策',
+  Strings.version: '版本',
+
+  Strings.ok: '確定',
+  Strings.cancel: '取消',
+  Strings.oops: '糟糕',
+  Strings.copied: '已複製',
+  Strings.later: '稍後',
+  Strings.noData: '無資料',
+
+  //empty error update
+  Strings.refresh: '重新整理',
+  Strings.unableToConnectNetwork: '請檢查您的網路連線',
+  Strings.unableToConnectServer: '伺服器暫時無法使用,請稍後再試',
+  Strings.regionRestricted: '由於當地法律和法規限制,FKey 服務在您所在地區不可用。',
+  Strings.updateNow: '立即更新',
+  Strings.newVersionAvailable: '新版本可用',
+
+  // util error
+  Strings.eUtilOpenEmail: '開啟郵件時發生錯誤',
+  Strings.eUtilOpenBrowser: '開啟瀏覽器時發生錯誤',
+  Strings.eUtilOpenGooglePlay: '開啟 Google Play 時發生錯誤',
+
+  Strings.error: '錯誤',
+
+  // Privacy policy
+  Strings.terms: '條款',
+  Strings.privacy: '隱私',
+  Strings.termsAgreementPrefix: '註冊或繼續即表示您同意我們的',
+  Strings.termsAgreementConnector: '和',
+
+  // Account page
+  Strings.account: '帳戶',
+
+  // Dialog texts
+  Strings.processing: '處理中...',
+  Strings.success: '成功',
+  Strings.unknownError: '未知錯誤',
+  Strings.failed: '失敗',
+
+  // exit
+  Strings.exit: '退出',
+
+  // feedback
+  Strings.feedback: '意見回饋',
+
+  // setting page
+  Strings.networkSection: '網路',
+  Strings.securitySection: '安全',
+  Strings.myPreCode: '我的 Pre Code',
+  Strings.validTerm: '有效期限',
+  Strings.freeTime: '免費時間',
+  Strings.deviceAuthorization: '裝置授權',
+  Strings.routingMode: '路由模式',
+  Strings.splitTunneling: '分流',
+  Strings.autoReconnect: '自動重連',
+  Strings.restoreDefault: '恢復預設',
+  Strings.deleteAccount: '刪除帳戶',
+  Strings.logout: '登出',
+
+  // media location page
+  Strings.connecting: '連線中...',
+  Strings.connected: '已連線',
+  Strings.disconnected: '已斷線',
+  Strings.open: '開啟',
+  Strings.disconnect: '斷開連線',
+  Strings.connect: '連線',
+  Strings.opening: '開啟中',
+  Strings.connectedSuccessfully: '連線成功',
+  Strings.willOpenSoon: '即將開啟',
+  Strings.netflix: 'Netflix',
+  Strings.youtube: 'YouTube',
+  Strings.amazon: 'Amazon',
+  Strings.hulu: 'hulu',
+  Strings.niftyStreaming: 'Nifty 串流',
+  Strings.youtubeStreaming: 'YouTube 串流',
+  Strings.amazonStreaming: 'Amazon 串流',
+  Strings.huluStreaming: 'hulu 串流',
+
+  // split tunneling page
+  Strings.excludeSelectedAppsFromVPN: '將選定的應用程式排除在 VPN 之外',
+  Strings.useVPNForSelectedAppsOnly: '僅對選定的應用程式使用 VPN',
+  Strings.selectApps: '選擇應用程式',
+  Strings.customizeYourVPN: '自訂您的 VPN',
+
+  // subscription page
+  Strings.subscription: '訂閱',
+  Strings.currentSubscription: '目前訂閱',
+  Strings.upgradeToPremium: '升級至 Premium',
+  Strings.activatePreCode: '啟用 Pre Code',
+  Strings.preCodeHint: '如果您有 Pre code,請輸入以領取您的 Pre 權益。',
+  Strings.planChangeInfo: '方案變更資訊',
+  Strings.whenItStarts: '何時開始',
+  Strings.whatHappensToYourBalance: '您的餘額會怎樣',
+  Strings.extraTime: '額外時間',
+  Strings.yourNewPlanBeginsRightAway: '您的新方案將立即開始。',
+  Strings.anyUnusedAmountFromYourOldPlan: '您舊方案中未使用的金額將添加到新方案中。',
+  Strings.youllGetExtraDays: '您將根據剩餘餘額獲得額外天數。',
+  Strings.premiumsIncluded: 'Premium 包含',
+  Strings.unlockAllFreeLocations: '解鎖所有免費位置',
+  Strings.unlockSmartMode: '解鎖智慧模式',
+  Strings.unlockMultiHopMode: '解鎖多跳模式',
+  Strings.premiumCanShareXDevices: 'Premium 可分享 X 台裝置',
+  Strings.ownYourOwnPrivateServer: '擁有您自己的私人伺服器',
+  Strings.closeAds: '關閉廣告',
+  Strings.confirmChange: '確認變更',
+  Strings.restorePurchases: '恢復購買',
+  Strings.paymentIssue: '付款問題',
+  Strings.yearlyAutoRenewCancelAnytime: '年度自動續訂,可隨時取消',
+
+  // home page
+  Strings.recent: '最近',
+  Strings.moviesAndTV: '電影和電視',
+  Strings.social: '社交',
+  Strings.support: '支援',
+  Strings.sport: '體育',
+  Strings.music: '音樂',
+  Strings.game: '遊戲',
+
+  // country restricted
+  Strings.sorry: '抱歉',
+  Strings.unableToLoadData: '無法載入資料',
+  Strings.dueLawsAndRegulations: '由於當地法律法規,\nNOMOVPN 服務在您目前所在地區\n不可用。',
+
+  // more pages
+  Strings.sendPreCodeToEmail: '將 Pre Code 發送至電子郵件',
+  Strings.selectServer: '選擇伺服器',
+
+  // Dialog messages
+  Strings.premiumActivated: 'Premium 啟用成功!',
+  Strings.premiumActivatedMessage: '您已升級至 Premium。享受所有進階功能和增強的瀏覽體驗。',
+  Strings.gotIt: '知道了',
+  Strings.emailSent: '電子郵件發送成功',
+  Strings.emailSentMessage: '您的 Pre Code 已發送至您的電子郵件。\n請檢查您的收件匣(和垃圾郵件資料夾)。',
+  Strings.noInternetConnection: '無網路連線',
+  Strings.noInternetMessage: '您似乎已離線。請檢查您的網路連線,然後重試。',
+  Strings.logOut: '登出',
+  Strings.logOutConfirmMessage: '您確定要登出嗎?您需要重新登入才能使用您的 Premium 功能。',
+  Strings.thankYouFeedback: '感謝您的意見回饋!',
+  Strings.feedbackMessage: '很抱歉您的使用體驗不佳。我們會盡快改進。',
+  Strings.done: '完成',
+  Strings.whatIsUid: '什麼是 UID?',
+  Strings.uidMessage:
+      '裝置 ID (UID) 這是您裝置的唯一識別碼。提供此 ID 可幫助我們的支援團隊驗證您的裝置並更快地解決您的問題。',
+  Strings.confirm: '確認',
+
+  // Device Authorization
+  Strings.copy: '複製',
+  Strings.pleaseKeepPageOpen: '請保持此頁面開啟。',
+  Strings.authorizationCode: '授權碼',
+  Strings.authorizationCodeDesc: '此 6 位數代碼允許 VIP 用戶連結您的裝置。它每 15 分鐘刷新一次。',
+  Strings.shareWithPreUser: '與 Pre 用戶分享',
+  Strings.shareWithPreUserDesc: '將此代碼告知 VIP 用戶,以便他們在其裝置上輸入以授權您。',
+  Strings.waitingForAuthorization: '等待授權',
+  Strings.waitingForAuthorizationDesc: '請保持此頁面開啟。\n一旦獲得批准,您的帳戶將自動升級並重新連線。',
+  Strings.enterCode: '輸入代碼',
+  Strings.enterCodeDesc: '輸入其他裝置(免費用戶)上顯示的 6 位數代碼。此代碼每 15 分鐘刷新一次。',
+  Strings.verifyDevice: '驗證裝置',
+  Strings.verifyDeviceDesc: '我們將檢查輸入的代碼是否與等待授權的活躍裝置匹配。',
+  Strings.authorizationSuccessful: '授權成功',
+  Strings.authorizationSuccessfulDesc: '確認後,該裝置將自動升級並連結到您的帳戶。',
+  Strings.deviceLimitReached: '已達裝置限制',
+  Strings.deviceLimitMessage: '您最多只能授權',
+  Strings.devices: '台裝置',
+  Strings.deviceAuthorized: '裝置已授權',
+  Strings.deviceAuthorizedMessage: '新裝置已成功授權',
+  Strings.relieveDevice: '解除裝置',
+  Strings.relieveDeviceMessage: '您確定要解除',
+  Strings.relieveDeviceLoseAccess: '此裝置將失去 Premium 存取權限。',
+  Strings.deviceRelieved: '裝置已解除',
+  Strings.deviceRelievedMessage: '已從已授權裝置中移除',
+  Strings.currentDevice: '目前裝置',
+  Strings.androidDevices: 'Android 裝置',
+  Strings.authCodeCopied: '授權碼已複製到剪貼簿',
+  Strings.invalidAuthorizationCode: '無效的授權碼',
+  Strings.invalidAuthorizationCodeMessage:
+      '您輸入的代碼不正確或已過期。\n請檢查其他裝置上的 6 位數代碼,然後重試。',
+  Strings.invalidAuthorizationCodeButton: '重試',
+
+  // Pre Code Email
+  Strings.codeBackedUpMessage: '您的代碼將備份到此電子郵件。',
+  Strings.enterYourEmail: '輸入您的電子郵件',
+  Strings.sendYourEmail: '發送您的電子郵件',
+  Strings.yourPreCredential: '您的 Pre 憑證',
+  Strings.yourPreCredentialDesc: '這是您的 VIP 憑證。請妥善保管,不要與任何人分享。',
+  Strings.secureEmailBackup: '安全電子郵件備份',
+  Strings.secureEmailBackupDesc: '我們將發送一封包含此憑證的電子郵件到您指定的電子郵件地址以妥善保管。',
+  Strings.sendAndSave: '發送並儲存',
+  Strings.sendAndSaveDesc: '電子郵件發送後,我們建議您也將此憑證儲存到裝置上的安全位置。',
+
+  // Routing Mode
+  Strings.smart: '智慧',
+  Strings.smartModeDesc: '本地和 VPN 網路共存,智慧選擇最佳路由。',
+  Strings.global: '全域',
+  Strings.globalModeDesc: '所有流量都通過 VPN 伺服器路由,以確保最大的隱私和安全。',
+
+  // Subscription Plans
+  Strings.perYear: '每年',
+  Strings.yearlyPlan: '年度方案',
+  Strings.mostlyChoose: '最多選擇',
+  Strings.once: '一次性',
+  Strings.lifeTime: '終身',
+  Strings.monthPlan: '月度方案',
+  Strings.perWeek: '每週',
+  Strings.weekPlan: '週方案',
+  Strings.limitedTime: '限時',
+  Strings.subscriptionChanged: '訂閱方案變更成功',
+  Strings.restoringPurchases: '恢復購買中...',
+  Strings.openingPaymentSupport: '開啟付款支援...',
+  Strings.info: '資訊',
+
+  // Other messages
+  Strings.vpnConnectionError: 'VPN 連線錯誤',
+  Strings.vpnServiceDisconnected: 'VPN 服務意外斷開',
+  Strings.failedCaptureScreenshot: '截圖失敗',
+  Strings.imageSavedToAlbum: '圖片已儲存到您的本地相簿',
+  Strings.failedSaveImage: '儲存圖片到相簿失敗',
+  Strings.failedToSave: '儲存失敗',
+  Strings.failedSendEmail: '發送電子郵件失敗',
+
+  // Connection status
+  Strings.activeTime: '已連線時間',
+  Strings.yearPlanPrice: '年度方案 每年 @price',
+
+  // Connecting status carousel texts
+  Strings.securingData: '保護資料中…',
+  Strings.encryptingTraffic: '加密流量中…',
+  Strings.protectingPrivacy: '保護隱私中…',
+  Strings.safeConnection: '安全連線中…',
+  Strings.yourDataIsSafe: '您的資料是安全的…',
+
+  // Login & Signup
+  Strings.login: '登入',
+  Strings.loginButton: '登入',
+  Strings.loginDescription: '成功登入後,您的免費試用將被套用,剩餘的會員資格將同步到您的帳戶,以便在所有連結的裝置上使用。',
+  Strings.signup: '註冊 NOMO',
+  Strings.signupButton: '註冊',
+  Strings.signupDescription: '註冊後,您的免費試用將被扣除,其他會員時間將轉移到您的帳戶以供多裝置使用。',
+  Strings.username: '用戶名',
+  Strings.password: '密碼',
+  Strings.usernamePasswordRule: '6-20 個字元(字母或數字)',
+  Strings.noAccount: '沒有帳戶?',
+  Strings.registerNow: '立即註冊',
+  Strings.alreadyHaveAccount: '已有帳戶?',
+  Strings.loginNow: '立即登入',
+
+  // Feedback
+  Strings.feedbackPlaceholder: '描述您的問題或建議...',
+  Strings.emailAddressForReply: '• 您的電子郵件地址(用於我們的回覆)',
+  Strings.send: '發送',
+
+  // Account page additions
+  Strings.changeSubscription: '變更訂閱',
+  Strings.awaitingActivation: '等待啟用',
+  Strings.relieve: '解除',
+  Strings.configureAuthorizedDevices: '配置已授權裝置...',
+  Strings.authorizeUpTo4DevicesAsPremium:
+      '最多授權 @max 台裝置為 Premium(@current/@max)',
+  Strings.youCanAuthorizeOtherDevices: '您可以授權其他裝置為 Premium 用戶(@current/@max)',
+
+  // Pre Code page
+  Strings.preCodeInfoMessage: 'Pre Code 是您的高級用戶憑證。\n使用它來啟用權益或在其他裝置上\n同步您的帳戶。',
+  Strings.pleaseStoreSecurely: '請妥善保管!',
+  Strings.sendPreCodeEmailDesc: '將您的 Pre Code 發送到您的註冊電子郵件地址',
+  Strings.storeLocalCopyDesc: '在此裝置上儲存您的 Pre Code 副本',
+  Strings.preview: '預覽',
+  Strings.hide: '隱藏',
+  Strings.sendToEmail: '發送到電子郵件',
+  Strings.saveLocalCopy: '儲存本地副本',
+
+  // Splash page
+  Strings.secureYourConnection: '保護您的連線',
+  Strings.secureYourConnectionDesc: '您可以登入或註冊帳戶,以在不同裝置之間共享會員資格。',
+
+  // Pre Code Save Dialog
+  Strings.save: '儲存',
+
+  // Split Tunneling
+  Strings.onlyOneModeActive: '一次只能啟用一種模式。',
+  Strings.chooseAppsExcludeDesc: '選擇將直接連線而不使用 VPN 的應用程式。',
+  Strings.chooseAppsIncludeDesc: '選擇將使用 VPN 而其他應用程式正常連線的應用程式。',
+  Strings.splitTunnelingDesc:
+      '分流讓您可以控制哪些應用程式使用 VPN 連線,哪些直接連線。它可以幫助您管理頻寬並在不關閉 VPN 的情況下存取本地或外國內容。',
+  Strings.selectAppsExclude: '選擇不使用 VPN 的應用程式',
+  Strings.selectAppsInclude: '選擇使用 VPN 的應用程式',
+  Strings.deselectAll: '取消全選',
+  Strings.allApps: '所有應用程式',
+
+  // Feedback Bottom Sheet
+  Strings.howExperience: '到目前為止\n您的體驗如何?',
+  Strings.wedLoveToKnow: '我們很想知道!',
+
+  // Feedback Tags - Bad 😡
+  Strings.vpnConnectionFailed: 'VPN 連線失敗',
+  Strings.internetTooSlow: '網路太慢',
+  Strings.keepsDisconnecting: '持續斷線',
+  Strings.appCrashes: '應用程式崩潰或當機',
+  Strings.otherIssues: '其他問題',
+
+  // Feedback Tags - Poor 😥
+  Strings.connectionUnstable: '連線不穩定',
+  Strings.speedNotExpected: '速度未達預期',
+  Strings.hardToUse: '難以使用/介面混亂',
+
+  // Feedback Tags - Okay 🤭
+  Strings.worksFineNotFast: '運作正常但不夠快',
+  Strings.limitedFreeServers: '免費伺服器有限',
+  Strings.appCouldBeSimpler: '應用程式可以更簡單',
+  Strings.sometimesDisconnects: '有時會斷線',
+  Strings.nothingSpecial: '沒什麼特別',
+
+  // Feedback Tags - Good 😏
+  Strings.easyToUse: '易於使用',
+  Strings.fastConnection: '連線快速',
+  Strings.stablePerformance: '效能穩定',
+  Strings.usefulFreeVersion: '免費版本實用',
+  Strings.satisfiedOverall: '整體滿意',
+
+  // Feedback Tags - Excellent 🥰
+  Strings.fastAndStable: '連線快速穩定',
+  Strings.greatUserExperience: '優秀的用戶體驗',
+  Strings.excellentPremiumFeatures: '出色的高級功能',
+  Strings.worthRecommending: '值得推薦',
+  Strings.loveTheDesign: '我喜歡這個設計',
+
+  // Change Password
+  Strings.changePassword: '變更密碼',
+  Strings.changePasswordDescription: '您可以隨時變更密碼以確保安全。密碼變更次數無限制',
+  Strings.enterNewPassword: '輸入新密碼',
+  Strings.enterConfirmPassword: '輸入確認密碼',
+  Strings.confirmPasswordMustBeTheSame: '兩次輸入的密碼不一致',
+  Strings.yes: '是',
+
+  // Signup
+  Strings.signingUp: '註冊中...',
+  Strings.signUpSuccessful: '註冊成功',
+
+  // login
+  Strings.loggingIn: '登入中...',
+  Strings.loginSuccessful: '登入成功',
+
+  // logout
+  Strings.loggingOut: '登出中...',
+  Strings.logoutSuccessful: '登出成功',
+
+  // change password
+  Strings.changingPassword: '變更密碼中...',
+  Strings.changePasswordSuccessful: '密碼變更成功',
+
+  // delete account
+  Strings.deletingAccount: '刪除帳戶中...',
+  Strings.deleteAccountSuccessful: '帳戶刪除成功',
+  Strings.deleteAccountConfirmMessage: '刪除您的帳戶將永久移除您的資料和會員資訊。此操作無法撤銷。',
+  Strings.deleteAccountConfirmButton: '刪除',
+
+  // Push Notifications
+  Strings.pushNotifications: '推播通知',
+  Strings.upgradeNow: '立即升級',
+
+  // 语言
+  Strings.enLang: 'English',
+  Strings.esLang: 'Español',
+  Strings.frLang: 'Français',
+  Strings.deLang: 'Deutsch',
+  Strings.jaLang: '日本語',
+  Strings.koLang: '한국어',
+  Strings.faLang: 'فارسی',
+  Strings.myLang: 'မြန်မာဘာသာ',
+  Strings.arLang: 'عربي',
+  Strings.ruLang: 'Русский',
+  Strings.zhTWLang: '繁體中文',
+  Strings.tkLang: 'Türkmençe',
+  Strings.ptBRLang: 'Português (Brasil)',
+  Strings.viLang: 'Tiếng Việt',
+  Strings.idLang: 'Bahasa Indonesia',
+  Strings.tlLang: 'Filipino',
+  Strings.thLang: 'ไทย',
+  Strings.hiLang: 'हिन्दी',
+  Strings.trLang: 'Türkçe',
+};