forked from baron/baron-sso
feat: i18n 개선 및 userfront 로그인/로케일 보완
This commit is contained in:
@@ -1,40 +1,18 @@
|
||||
import 'dart:ui';
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
|
||||
import 'i18n_data.dart';
|
||||
final _koreanPattern = RegExp(r'[가-힣]');
|
||||
|
||||
const _defaultLocale = 'ko';
|
||||
const _supportedLocales = ['ko', 'en'];
|
||||
|
||||
String _resolveLocale() {
|
||||
final locale = PlatformDispatcher.instance.locale;
|
||||
final code = locale.languageCode.toLowerCase();
|
||||
if (_supportedLocales.contains(code)) {
|
||||
return code;
|
||||
String tr(String key, {String? fallback, Map<String, String>? params}) {
|
||||
try {
|
||||
if (fallback != null && _koreanPattern.hasMatch(fallback)) {
|
||||
fallback = null;
|
||||
}
|
||||
final translated = key.tr(namedArgs: params);
|
||||
if (translated == key && fallback != null && fallback.isNotEmpty) {
|
||||
return fallback;
|
||||
}
|
||||
return translated;
|
||||
} catch (_) {
|
||||
return fallback ?? key;
|
||||
}
|
||||
return _defaultLocale;
|
||||
}
|
||||
|
||||
String _formatTemplate(String template, Map<String, String>? params) {
|
||||
if (params == null || params.isEmpty) {
|
||||
return template;
|
||||
}
|
||||
var result = template;
|
||||
params.forEach((key, value) {
|
||||
result = result.replaceAll('{{$key}}', value);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
String tr(
|
||||
String key, {
|
||||
String? fallback,
|
||||
Map<String, String>? params,
|
||||
}) {
|
||||
final locale = _resolveLocale();
|
||||
final map = locale == 'en' ? enStrings : koStrings;
|
||||
final value = map[key];
|
||||
final template = (value != null && value.isNotEmpty)
|
||||
? value
|
||||
: (fallback ?? key);
|
||||
return _formatTemplate(template, params);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user