Commit 12f0799c authored by lxnhan's avatar lxnhan

commit

parents
## 0.0.1
* TODO: Describe initial release.
TODO: Add your license here.
## Giới thiệu
Package localization cung cấp việc sử dụng đa ngôn ngữ và việc thay đổi ngôn ngữ cho ứng dụng.
Localization được được base trên flutter version 2.10.1 , dart 2.16.1 hỗ trợ null safety
## Version note
version 1
## Cách import package vào 1 dự án
B1: tạo 1 thư mục chứa các package được cắm từ bên ngoài vào ngang cấp với các thư mục assets hoặc android và ios.
B2: import package vào thư mục vừa được tạo ở bước 1
B3: khai báo packagae như 1 thư viện vào pubspect.yaml của project
#### Ví Dụ:
localizations:
path: ./tên thư mục được tạo ở bước 1/localizations
## Khởi tạo và sử dụng trong project
Khi import package thành công vào bên trong project ta sẽ thực hiện khởi tạo và sử dụng trong project bằng các bước.
### B1: Khởi tạo tại hàm main.dart trong widget MaterialApp()
#### Ví dụ:
```dart
@override
Widget build(BuildContext context) {
return MultiProvider(
child: MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
AppLocalizations.delegate,
],
localeResolutionCallback: (locale, supportedLocales) {
for (var supportedLocale in supportedLocales) {
if (supportedLocale.languageCode == locale!.languageCode &&
supportedLocale.countryCode == locale.countryCode) {
return supportedLocale;
}
}
return supportedLocales.first;
},
supportedLocales: const [
Locale('vi', 'VN'),
Locale('en', 'US'),
],
),
);
}
```
### B2: gọi và sử dụng các biến
#### bất cứ đâu cần sử dụng các biến trong localizations ta chỉ cần sử dụng câu lệnh sau đây với đầu vào là 1 key,
```dart
AppLocalizations.of(context)!.translate('key');
```
### Để thêm 1 biến vào locaization chúng ta khai báo biến theo dạng key_value bên trong các file .../localizations/assets/lang
### lưu ý 1 biến được tạo cho nhiều ngôn ngữ bên trong localization đều phải đặt tên key giống nhau chỉ có thể khác các giá trị.
include: package:flutter_lints/flutter.yaml
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
{
"user_name": "User name",
"password": "Password"
}
\ No newline at end of file
{
"user_name": "Tên đăng nhập",
"password": "Mật khẩu"
}
\ No newline at end of file
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
class AppLocalizations {
late Locale locale;
AppLocalizations(this.locale);
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static const LocalizationsDelegate<AppLocalizations>delegate = _AppLocalizationsDelegate();
late Map<String, String> _localizedStrings;
Future<bool> load() async {
String jsonString = await rootBundle.loadString('assets/lang/${locale.languageCode}.json');
Map<String, dynamic> jsonMap = json.decode(jsonString);
_localizedStrings = jsonMap.map((key, value) {
return MapEntry(key, value.toString());
});
return true;
}
String translate(String key) {
return _localizedStrings[key] ?? '';
}
}
class _AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const _AppLocalizationsDelegate();
@override
bool isSupported(Locale locale) {
// TODO: implement isSupported
return ['en', 'vi'].contains(locale.languageCode);
}
@override
Future<AppLocalizations> load(Locale locale) async {
AppLocalizations appLocalizations = new AppLocalizations(locale);
await appLocalizations.load();
return appLocalizations;
}
@override
bool shouldReload(covariant LocalizationsDelegate<AppLocalizations> old) => false;
}
library localizations;
/// A Calculator.
class Calculator {
/// Returns [value] plus 1.
int addOne(int value) => value + 1;
}
name: localizations
description: A new Flutter project.
version: 0.0.1
homepage:
environment:
sdk: ">=2.14.2 <3.0.0"
flutter: ">=1.17.0"
dependencies:
flutter:
sdk: flutter
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^1.0.0
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
uses-material-design: true
assets:
- assets/lang/
# To add assets to your package, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
#
# For details regarding assets in packages, see
# https://flutter.dev/assets-and-images/#from-packages
#
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# To add custom fonts to your package, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts in packages, see
# https://flutter.dev/custom-fonts/#from-packages
import 'package:flutter_test/flutter_test.dart';
import 'package:localizations/localizations.dart';
void main() {
test('adds one to input values', () {
final calculator = Calculator();
expect(calculator.addOne(2), 3);
expect(calculator.addOne(-7), -6);
expect(calculator.addOne(0), 1);
});
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment