SQLite
 sql >> डेटाबेस >  >> RDS >> SQLite

ऑफ़लाइन अंतर्राष्ट्रीयकरण ऐप कैसे बनाएं:कई भाषाओं का समर्थन करें

locale . का एक कॉलम है Sqlite डेटाबेस में जो कई भाषाओं का समर्थन करता है, इसलिए आपको अलग-अलग भाषाओं में डेटा का पता लगाने के लिए केवल Sql क्वेरी शर्तों को बदलने की आवश्यकता है।

संशोधित करें VegetableDao भाषा क्वेरी शर्तों को जोड़ने के लिए

[project_root]/lib/app/data/dao/vegetalbe_dao.dart

import 'package:floor/floor.dart';
import 'package:strapi_flutter_internation_poc/app/data/entity/vegetable.dart';

@dao
abstract class VegetableDao {
  @Query('SELECT * FROM vegetables_v WHERE  locale = :locale')
  Future<List<VegetableV>> findAll(String locale);
}

संशोधन के बाद फ़्लोर कोड जनरेटर को फिर से चलाएँ

flutter packages pub run build_runner build

HomeController

[project_root]/lib/app/modules/home/controllers/home_controller.dart

  Future<void> getAllVegetables() async {
    final result = await DbService.to.db.vegetableDao.findAll('en');
    vegetables.value = result;
  }

इस तरह दिखाया गया डेटा सभी अंग्रेज़ी में है

इसके बाद, GetX की अंतर्राष्ट्रीयकरण सुविधाओं को एकीकृत करें

एक नई भाषा_सेवा बनाएं

[project_root]/lib/app/common/services/language_service.dart

यहां, get_storage डिफ़ॉल्ट भाषा के लिए कैश के रूप में उपयोग किया जाता है। स्पंदन परियोजना में इस पुस्तकालय की निर्भरता बढ़ाना याद रखें। कमांड का उपयोग करें get install get_storage स्थापना को शीघ्र पूरा करने के लिए।

import 'dart:ui' as ui;

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';

class LanguageService extends GetxService {
  static LanguageService get to => Get.find();

  var box = GetStorage();
  var locale = Locale('en', 'US');
  var localeKey = 'en';

  Future<LanguageService> init() async {
    if (box.read('language') != null) {
      if (box.read('language') == 'zh-CN') {
        locale = Locale('zh', 'CN');
        localeKey = 'zh-CN';
      } else {
        locale = Locale('en', 'US');
        localeKey = 'en';
      }
    } else {
      if (ui.window.locale.languageCode == 'zh') {
        locale = Locale('zh', 'CN');
        localeKey = 'zh-CN';
      } else {
        locale = Locale('en', 'US');
        localeKey = 'en';
      }
    }

    return this;
  }

  void changeLocale(l) {
    if (l == Locale('zh', 'CN')) {
      localeKey = 'zh-CN';
      updateLocale(Locale('zh', 'CN'));
    } else if (l == Locale('en', 'US')) {
      localeKey = 'en';
      updateLocale(Locale('en', 'US'));
    }
    box.write('language', localeKey);
  }

  void updateLocale(_l) {
    locale = _l;
    Get.updateLocale(_l);
  }
}

GetX Cli एक JSON फ़ाइल से GetX ढांचे के लिए आवश्यक बहु-भाषा कॉन्फ़िगरेशन को जल्दी से उत्पन्न कर सकता है।

[project_root]/assets/locales . के अंतर्गत दो नई JSON फ़ाइलें बनाएं

en_US.json

{
  "app": {
    "name": "VAF"
  },
  "locale": {
    "title": "Language",
    "zh": "中文",
    "en": "English"
  }
}

zh_CN.json

{
  "app": {
    "name": "蔬果"
  },
  "locale": {
    "title": "语言",
    "zh": "中文",
    "en": "English"
  }
}

Daud

get generate locales assets/locales

आउट[project_root]/lib/generated/locales.g.dart

class AppTranslation {
  static Map<String, Map<String, String>> translations = {
    'zh_CN': Locales.zh_CN,
    'en_US': Locales.en_US,
  };
}

class LocaleKeys {
  LocaleKeys._();
  static const app_name = 'app_name';
  static const locale_title = 'locale_title';
  static const locale_zh = 'locale_zh';
  static const locale_en = 'locale_en';
}

class Locales {
  static const zh_CN = {
    'app_name': '蔬果',
    'locale_title': '语言',
    'locale_zh': '中文',
    'locale_en': 'English',
  };
  static const en_US = {
    'app_name': 'VAF',
    'locale_title': 'Language',
    'locale_zh': '中文',
    'locale_en': 'English',
  };
}

Main.dart . में LanguageService का इनिशियलाइज़ेशन जोड़ें

Future<void> initServices() async {
  print('starting services ...');
  await Get.putAsync(() => DbService().init());
  await Get.putAsync(() => LanguageService().init());
  print('All services started...');
}

संशोधित करें runApp बहु भाषा विन्यास जोड़ने के लिए

  runApp(
    GetMaterialApp(
      title: "Application",
      initialRoute: AppPages.INITIAL,
      getPages: AppPages.routes,
      translationsKeys: AppTranslation.translations,
      locale: LanguageService.to.locale,
      fallbackLocale: Locale('zh', 'CN'),
    ),
  );

नियंत्रक में क्वेरी शर्तों को समायोजित करें

final result = await DbService.to.db.vegetableDao.findAll('en');

सेवा

    final result = await DbService.to.db.vegetableDao
        .findAll(LanguageService.to.localeKey);

बहुभाषी संसाधनों को संदर्भित करने के लिए इंटरफ़ेस में पाठ को संशोधित करें

      appBar: AppBar(
        title: Text('Vegetables'),
        centerTitle: true,
      ),

सेवा

      appBar: AppBar(
        title: Text(LocaleKeys.app_name.tr),
        centerTitle: true,
      ),

चीनी भाषा में डिफ़ॉल्ट इंटरफ़ेस देखने के लिए इसे फिर से चलाएँ

थोड़ा सुधार करें और भाषा बदलने के लिए एक बटन जोड़ें

appBar: AppBar(
        title: Text(LocaleKeys.app_name.tr),
        centerTitle: true,
        actions: [
          IconButton(
              onPressed: () {
                Get.dialog(SimpleDialog(
                  title: Text(LocaleKeys.locale_title.tr),
                  children: <Widget>[
                    SimpleDialogOption(
                      onPressed: () {
                        LanguageService.to.changeLocale(Locale('en', 'US'));
                      },
                      child: Padding(
                        padding: const EdgeInsets.symmetric(vertical: 6),
                        child: Text(LocaleKeys.locale_en.tr),
                      ),
                    ),
                    SimpleDialogOption(
                      onPressed: () {
                        LanguageService.to.changeLocale(Locale('zh', 'CN'));
                      },
                      child: Padding(
                        padding: const EdgeInsets.symmetric(vertical: 6),
                        child: Text(LocaleKeys.locale_zh.tr),
                      ),
                    ),
                  ],
                ));
              },
              icon: Icon(Icons.language))
        ],
      ),

भाषा स्विच को पूरा करने के लिए बहुत सुविधाजनक और तेज़


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे राउंड () SQLite में काम करता है

  2. कैसे जांचें कि SQLite में कोई तालिका मौजूद है या नहीं?

  3. SQLite समूह द्वारा

  4. मुझे क्या चुनना चाहिए - JSON या SQLite?

  5. कर्सर के साथ फ़ील्ड मान प्राप्त करें