Skip to content
This repository was archived by the owner on Nov 22, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
.buildlog/
.history
.svn/
.vscode

# IntelliJ related
*.iml
Expand Down
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,9 @@

## [4.1.0]

- Upgraded packages and SDK version
- Upgraded packages and SDK version

## [4.1.2]

- Upgraded packages and SDK version
- Fixed [breaking change](https://docs.flutter.dev/release/breaking-changes/asset-manifest-dot-json) from Flutter
23 changes: 10 additions & 13 deletions lib/src/constants/constants.dart
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
class Constants
{
static const String assetManifestFilename = 'AssetManifest.json';
class Constants {
static const String localizedAssetsPath = 'assets/i18n';

static const String localizedAssetsPath = 'assets/i18n';
static const String pluralZero = 'zero';
static const String pluralOne = 'one';
static const String pluralTwo = 'two';
static const String pluralFew = 'few';
static const String pluralMany = 'many';
static const String pluralOther = 'other';

static const String pluralZero = 'zero';
static const String pluralOne = 'one';
static const String pluralTwo = 'two';
static const String pluralFew = 'few';
static const String pluralMany = 'many';
static const String pluralOther = 'other';

static const String pluralValueArg = '{{value}}';
}
static const String pluralValueArg = '{{value}}';
}
87 changes: 39 additions & 48 deletions lib/src/services/locale_file_service.dart
Original file line number Diff line number Diff line change
@@ -1,69 +1,60 @@
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:flutter_translate/src/constants/constants.dart';

class LocaleFileService
{
static Future<Map<String, String>> getLocaleFiles(List<String> locales, String basePath) async
{
var localizedFiles = await _getAllLocaleFiles(basePath);
class LocaleFileService {
static Future<Map<String, String>> getLocaleFiles(
List<String> locales, String basePath) async {
var localizedFiles = await _getAllLocaleFiles(basePath);

final files = new Map<String, String>();
final files = new Map<String, String>();

for(final language in locales.toSet())
{
var file = _findLocaleFile(language, localizedFiles, basePath);
for (final language in locales.toSet()) {
var file = _findLocaleFile(language, localizedFiles, basePath);

files[language] = file;
}

return files;
files[language] = file;
}

static Future<String?> getLocaleContent(String file) async
{
final ByteData? data = await rootBundle.load(file);
return files;
}

if (data == null) return null;

return utf8.decode(data.buffer.asUint8List());
}
static Future<String?> getLocaleContent(String file) async {
final ByteData? data = await rootBundle.load(file);

static Future<List<String>> _getAllLocaleFiles(String basePath) async
{
final manifest = await rootBundle.loadString(Constants.assetManifestFilename);
if (data == null) return null;

Map<String, dynamic> map = jsonDecode(manifest);
return utf8.decode(data.buffer.asUint8List());
}

var separator = basePath.endsWith('/') ? '' : '/';
static Future<List<String>> _getAllLocaleFiles(String basePath) async {
final assetManifest = await AssetManifest.loadFromAssetBundle(rootBundle);
final assets = assetManifest.listAssets();

return map.keys.where((x) => x.startsWith('$basePath$separator')).toList();
}
final separator = basePath.endsWith('/') ? '' : '/';

static String _findLocaleFile(String languageCode, List<String> localizedFiles, String basePath)
{
var file = _getFilepath(languageCode, basePath);
return assets.where((x) => x.startsWith('$basePath$separator')).toList();
}

if(!localizedFiles.contains(file))
{
if(languageCode.contains('_'))
{
file = _getFilepath(languageCode.split('_').first, basePath);
}
}
static String _findLocaleFile(
String languageCode, List<String> localizedFiles, String basePath) {
var file = _getFilepath(languageCode, basePath);

if(file == null)
{
throw new Exception('The asset file for the language "$languageCode" was not found.');
}
if (!localizedFiles.contains(file)) {
if (languageCode.contains('_')) {
file = _getFilepath(languageCode.split('_').first, basePath);
}
}

return file;
if (file == null) {
throw new Exception(
'The asset file for the language "$languageCode" was not found.');
}

static String? _getFilepath(String languageCode, String basePath)
{
var separator = basePath.endsWith('/') ? '' : '/';
return file;
}

return '$basePath$separator$languageCode.json';
}
static String? _getFilepath(String languageCode, String basePath) {
var separator = basePath.endsWith('/') ? '' : '/';

return '$basePath$separator$languageCode.json';
}
}
29 changes: 14 additions & 15 deletions lib/src/utils/device_locale.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,22 @@ import 'package:flutter/widgets.dart';
import 'package:universal_io/io.dart';

/// Returns the current device locale
Locale? getCurrentLocale()
{
return _localeFromString(Platform.localeName);
Locale? getCurrentLocale() {
return _localeFromString(Platform.localeName);
}

Locale? _localeFromString(String code)
{
var separator = code.contains('_') ? '_' : code.contains('-') ? '-' : null;
Locale? _localeFromString(String code) {
var separator = code.contains('_')
? '_'
: code.contains('-')
? '-'
: null;

if (separator != null)
{
var parts = code.split(RegExp(separator));
if (separator != null) {
var parts = code.split(RegExp(separator));

return Locale(parts[0], parts[1]);
}
else
{
return Locale(code);
}
return Locale(parts[0], parts[1]);
} else {
return Locale(code);
}
}
6 changes: 2 additions & 4 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: flutter_translate
description: Flutter Translate is a fully featured localization / internationalization (i18n) library for Flutter.
version: 4.1.0
version: 4.1.2
homepage: https://jesway.com
repository: https://github.com/Jesway/flutter_translate

Expand All @@ -11,10 +11,8 @@ dependencies:
flutter:
sdk: flutter
universal_io: ^2.2.2
intl: ^0.19.0
intl: ^0.20.2

dev_dependencies:
flutter_test:
sdk: flutter

flutter: