🙂 İNSANLARIN EN HAYIRLISI INSANLARA FAYDALI OLANDIR 🙂

Ramazan HABER / FLUTTER / Çoklu dil desteği ekleme localizations kullanımı tr en de ru easy localization ile

1-) FLUTTER - Çoklu dil desteği ekleme localizations kullanımı tr en de ru easy localization ile

 

EKRAN GÖRÜNTÜSÜ

 

 

 

UYARI GETX İLE KULLANIYORSAN EXTENSİON OLUŞTUR

 

1. ADIM StringLocalization.dart diye dosya oluştur ve title: Text('MyApp'.localized), //şeklide kullan

 

 

import 'package:easy_localization/easy_localization.dart';

extension StringLocalization on String {
  
String get trLocalized => this.tr();
}

kullanımı

title: Text('MyApp'.trLocalized), //şeklide kullan

 

 

 

 

1-) pubspec.yaml

 

easy_localization: ^3.0.0     # bu kütüphane ile yapıcaz ama  flutter_localizations danda yararlancaz

dropdown_button2: ^1.2.1  # dropdownbutton ile bayrak seçmek için

 

dev_dependencies:
  
flutter_test:
    
sdk: flutter

  
flutter_localizations: # yararlancaz

    sdk: flutter

 

 

assets:
  - assets/images/    
# yolları tanıtmayı unutma

  - assets/languages/   # yolları tanıtmaya unutma

 

2-)  assets/languages/ klasörü

 

 

tr_TR.json

 

{
  
"hello": "Merhaba"
}

 

 

 

en_US.json

 

{
  
"hello": "Hello"
}

 

 

 

3-) LocaleKeys.dart

 

import 'dart:ui';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'AppConstant.dart';
import 'CustomButtonTest.dart';

abstract class LocaleKeys {
  
static const hello= 'hello';

  static String suankiDil = "assets/images/turkce.png";

 

static setLocale(BuildContext context, MenuItem item) {
  
switch (item) {
    
case MenuItems.turkce:
      
LocaleKeys.suankiDil = "assets/images/turkce.png";
      context.setLocale(
AppConstant.TR_LOCALE);
      
break;
    
case MenuItems.ingilizce:
      
LocaleKeys.suankiDil = "assets/images/ingilizce.png";
      context.setLocale(
AppConstant.EN_LOCALE);
      
break;
    
case MenuItems.rusca:
      
LocaleKeys.suankiDil = "assets/images/rusca.png";
      context.setLocale(
AppConstant.RU_LOCALE);
      
break;
    
case MenuItems.almanca:
      
LocaleKeys.suankiDil = "assets/images/almanca.png";
      context.setLocale(
AppConstant.DE_LOCALE);
      
break;
  }
}

 

static Locale? varsayilanTelefonunDili(
    
Locale? locale, Iterable<Locale> supportedLocales) {
  
// Aktif edilecek parametre
  /// [locale]: Cihazın dili null değilse
  
if (locale != null) {
    
switch (locale.languageCode) {
      
case "tr":
        
LocaleKeys.suankiDil = "assets/images/turkce.png";
        
break;
      
case "en":
        
LocaleKeys.suankiDil = "assets/images/ingilizce.png";
        
break;
      
case "de":
        
LocaleKeys.suankiDil = "assets/images/almanca.png";
        
break;
      
case "ru":
        
LocaleKeys.suankiDil = "assets/images/rusca.png";
        
break;
    }

    
debugPrint(
        
"Algılanan cihaz dili: Dil Kodu: ${locale.languageCode}, Ülke Kodu: ${locale.countryCode}");

    
for (var supportedLocale in supportedLocales) {
      
/// Cihazın dil kodu desteklenen diller arasındaki dil kodlarının içinde var mı?
      
if (supportedLocale.languageCode == locale.languageCode) {
        
/// Varsa desteklenen dili döndür

        
switch (locale.languageCode) {
          
case "tr":
            
return AppConstant.TR_LOCALE;
          
case "en":
            
return AppConstant.EN_LOCALE;
          
case "de":
            
return AppConstant.DE_LOCALE;
          
case "ru":
            
return AppConstant.RU_LOCALE;
        }
      }
    }
  }
  
debugPrint("Algılanan cihaz dili desteklenen diller arasında bulunmuyor.");

  
/// [locale]: Cihazın dili null ise
  /// Yoksa [supportedLocales] Listesindeki ilk sonucu döndür.
  
debugPrint(
      
"Uygulamanın başlatılması istenen dil: Dil Kodu: ${supportedLocales.first.languageCode}, Ülke Kodu: ${supportedLocales.first.countryCode}");
  
return AppConstant.TR_LOCALE;
}

 

 

}

 

 

4-) CustomButtonTest.dart

 

import 'package:dropdown_button2/dropdown_button2.dart';
import 'package:flutter/material.dart';

import 'LocaleKeys.dart';

class CustomButtonTest extends StatefulWidget {
  
const CustomButtonTest({Key? key}) : super(key: key);

  
@override
  
State<CustomButtonTest> createState() => _CustomButtonTestState();
}

class _CustomButtonTestState extends State<CustomButtonTest> {
  
@override
  
void initState() {
    
// TODO: implement initState
    
super.initState();
  }

  
@override
  
Widget build(BuildContext context) {
    
return DropdownButtonHideUnderline(
      child:
DropdownButton2(
        customButton:
Container(
          alignment:
Alignment.center,
          
          child:
Padding(
            padding:
EdgeInsets.all(5),
            child:
Row(children: [
              
Image.asset(LocaleKeys.suankiDil),
              
Icon(Icons.arrow_downward)
            ],),
          ),
        ),
        customItemsIndexes:
const [4],
        customItemsHeight:
8,
        items: [
          ...
MenuItems.firstItems.map(
            (item) =>
DropdownMenuItem<MenuItem>(
              value: item,
              child:
MenuItems.buildItem(item),
            ),
          ),

        ],
        onChanged: (value) {
          
MenuItems.onChanged(context, value as MenuItem);
        },
        itemHeight:
55,
        itemPadding:
const EdgeInsets.only(left: 16, right: 16),
        dropdownWidth:
180,
        dropdownPadding:
const EdgeInsets.symmetric(vertical: 6),
        dropdownDecoration:
BoxDecoration(
          borderRadius:
BorderRadius.circular(4),
          color:
Colors.white,
        ),
        dropdownElevation:
8,
        offset:
const Offset(0, 8),
      ),
    );
  }
}

class MenuItem {
  
final String text;
  
final String logo;

  
const MenuItem({
    
required this.text,
    
required this.logo,
  });
}

class MenuItems {
  
static const List<MenuItem> firstItems = [turkce, ingilizce, almanca,rusca];

  
static const turkce =
      
MenuItem(text: 'Türkçe', logo: "assets/images/turkce.png");
  
static const ingilizce =
      
MenuItem(text: 'English', logo: "assets/images/ingilizce.png");
  
static const almanca =
      
MenuItem(text: 'Deutsche', logo: "assets/images/almanca.png");
  
static const rusca =
      
MenuItem(text: 'русский', logo: "assets/images/rusca.png");

  
static Widget buildItem(MenuItem item) {
    
return Row(
      children: [
        
Container(
          width:
42,
          height:
30,
          decoration:
BoxDecoration(
            color:
Colors.orange,
            shape:
BoxShape.rectangle,
            image:
new DecorationImage(
              image:
AssetImage(item.logo),
              fit:
BoxFit.cover,
            ),
          ),
        ),
        
const SizedBox(
          width:
10,
        ),
        
Text(
          item.
text,
          style:
const TextStyle(
              color:
Colors.black, fontWeight: FontWeight.bold, fontSize: 13),
        ),
      ],
    );
  }

  
static onChanged(BuildContext context, MenuItem item) {
   
LocaleKeys.setLocale(context, item);
  }
}

 

5-) AppConstant.dart

 

import 'package:flutter/widgets.dart';

class AppConstant {
  
static const TR_LOCALE = Locale("tr", "TR");
  
static const EN_LOCALE = Locale("en", "US");
  
static const RU_LOCALE = Locale("ru", "RU");
  
static const DE_LOCALE = Locale("de", "DE");
  
static const LANG_PATH = "assets/languages";

  
static const SUPPORTED_LOCALE = [
    
AppConstant.EN_LOCALE,
    
AppConstant.TR_LOCALE,
    
AppConstant.DE_LOCALE,
    
AppConstant.RU_LOCALE,
  ];
}

 

6-) main.dart

 

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:rmosflutterguest/langs/LocaleKeys.dart';
import 'langs/AppConstant.dart';

Future<void> main() async {
  
WidgetsFlutterBinding.ensureInitialized();
  
await EasyLocalization.ensureInitialized();

  runApp(
    
EasyLocalization(
      supportedLocales:
AppConstant.SUPPORTED_LOCALE,
      path:
AppConstant.LANG_PATH,
      
//fallbackLocale: Locale('tr','TR'),
      
child: MyApp(),
    ),
  );
}

 

class MyApp extends StatefulWidget {
  
const MyApp({Key? key}) : super(key: key);
  
static const String _title = 'Flutter Code Sample';
  
@override
  
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
  
@override
  
Widget build(BuildContext context) {
    
return MaterialApp(
      debugShowCheckedModeBanner:
false,
      localizationsDelegates: context.
localizationDelegates,
      supportedLocales: context.
supportedLocales,
      title:
MyApp._title,
      locale: context.
locale,
      home:
Row(
                      children: [
                      
SizedBox(
                                    width:
20,
                              ),
                                  
Card(
                       child:
Container(
                              child:
CustomButtonTest(),
                            ),
                         ),

                        ],
                           ),
      
//BottomNavigationPage(), // LoginPage1()
      
builder: EasyLoading.init(),
      localeResolutionCallback:
LocaleKeys.varsayilanTelefonunDili,
    );
  }
}

 

 

7-) BAYRAKLAR

 

bayraklar : https://github.com/madebybowtie/FlagKit/blob/master/Assets/Flags.md

 

 

         

 

8-) KULLANIMI

 

KULLANIMI : Text(LocaleKeys.hello.tr())   veya Text('hello').tr() veya   tr('hello')  veya print('hello'.tr());

DİL DEĞİŞTİRMEK İÇİN : onPressed: () {LocaleKeys.setLocale(context, item); } veya context.setLocale(AppConstant.EN_LOCALE);

VARSAYILAN TELEFONUN DİLİ : LocaleKeys.varsayilanTelefonunDili

 

9-) KAYNAK

 

kaynak : https://www.mobiler.dev/post/flutter-da-coklu-dil-destegi-localization

 

kaynak : https://pub.dev/packages/easy_localization/example

 

 

 

 2023 Nisan 12 Çarşamba
 547