切换语言时的国际化问题



我对颤振国际化有一个小错误。 我使用了formTextFields,当验证不满意时,它们会显示一些提示,例如"Insert username"或"insert password"。现在,当我在应用程序中切换语言时,我遇到的问题是这些字符串不会立即更改,但只有在我再次按下登录按钮(并使用验证功能(后,它们才会更改。其他一切都会改变,但这些提示不会改变。

这是我设置国际化的区域设置文件:

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'dart:async';
import 'package:mobile/l10n/messages_all.dart';
class AppLocalizations {
static Future<AppLocalizations> load(Locale locale) {
final String name =
locale.countryCode.isEmpty ? locale.languageCode : locale.toString();

final String localeName = Intl.canonicalizedLocale(name);

return initializeMessages(localeName).then((bool _) {
Intl.defaultLocale = localeName;
return AppLocalizations();
});
}

static AppLocalizations of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}

String get loginText {
return Intl.message('Login',
//name should be the same as the actual variable name because this
//will be the key to associate these values
name: 'loginText',
//The description is optional
desc: "if you see the world 'login', call this one!");
}
String get usernameText{
return Intl.message('Username',
name: 'usernameText',
);
}

String get passwordText{
return Intl.message('Password',
name: 'passwordText'
);
}

String get insertUsernameText{
return Intl.message('Insert username',
name: 'insertUsernameText'
);
}
String get insertPasswordText{
return Intl.message('Insert password',
name: 'insertPasswordText'
);
}

}

class AppLocalizationsDelegate extends LocalizationsDelegate<AppLocalizations> {
const AppLocalizationsDelegate();

@override
bool isSupported(Locale locale) {
// TODO: implement isSupported
return ['en', 'de', 'ja'].contains(locale.languageCode);
}
//calls app locations method created up top
@override
Future<AppLocalizations> load(Locale locale) {
return AppLocalizations.load(locale);
}

@override
shouldReload(AppLocalizationsDelegate old) {
return false;
}
}

这是TextFormField代码

TextFormField( decoration: _fieldDecoration(AppLocalizations.of(context).passwordText, Icons.lock),
onSaved: (val) {
_password = val;
},
validator: (val) => val.isEmpty ? AppLocalizations.of(context).insertPasswordText : null,
),

您应该使用 key 刷新验证消息的语言build从方法中的FormState调用validate方法

创建全局密钥

GlobalKey<FormState> _formKey=GlobalKey<FormState> ();

并将键分配给Form小部件

Form(
key: _formKey,
..
)

并在构建方法中调用验证表单方法

@override
Widget build(BuildContext context) {
if(!isvalidTextFields)
if(_formKey.currentState!=null)
_formKey.currentState.validate();
..
}

这个应用程序本地化代码在我的应用程序中运行良好。根据代码进行一些更改

import 'dart:async';
import 'package:COMO/constants/string_constant.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart' show SynchronousFuture;
class AppLocalizations {
AppLocalizations(this.locale);
final Locale locale;
static AppLocalizations of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
static Map<String, Map<String, String>> _localizedValues = {
'en': {
// Section contains SignIn Strings ;
'Sign in': 'Sign in',
'Email Address': 'Email Address',
'Password': 'Password',
'LOGIN': 'LOGIN',
'Forgot Password?': 'Forgot Password',
'Sign Up': 'Sign Up',
'lbSignUpStr': 'Do not have an account?',
'errorEnterMail': 'Please Enter Email',
'errorEnterPwd': 'Please Enter Password',
'errorInvalidPwd': 'Invalid Password',
'errorInvalidMail': 'Invalid Email',
// Section contains SignUp Strings ;
'First Name': 'First Name',
'Last Name': 'Last Name',
'phoneNo': 'Phone Number(*)',
'createAccount': 'CREATE ACCOUNT',
'signUpAgreementStart': StringConstant.TermsAndConditionStrStart,
'signUpAgreementEnd': StringConstant.TermsAndConditionStrEnd,
'errorEnterFname': 'Please Enter First Name',
'errorEnterLname': 'Please Enter Last Name',
'errorEnterPhoneNo': "Please Enter Phone Number",
// Section contains Drawer Strings ;
'writeToUs': 'Write To Us',
'comoLocation': 'Como Location',
'rateTheApp': 'Rate the App',
'whyComo': 'Why..Como..',
'serviceRate': 'Service Rate',
'followUs': 'Follow us on:',

},
'ar': {
'Sign in': 'تسجيل الدخول',
'Email Address': 'عنوان بريد الكتروني',
'Password': 'كلمه السر',
'LOGIN': 'تسجيل الدخول',
'Forgot Password?': 'هل نسيت كلمة المرور؟',
'Sign Up': 'سجل',
'lbSignUpStr': 'لا تملك حساب؟',
'errorEnterMail': 'الرجاء إدخال البريد الإلكتروني',
'errorEnterPwd': 'من فضلك أدخل كلمة المرور',
'errorInvalidPwd': 'رمز مرور خاطئ',
'errorInvalidMail': 'بريد إلكتروني خاطئ',
'First Name': 'الاسم الاول',
'Last Name': 'الكنية',
'phoneNo': 'رقم الهاتف(*)',
'createAccount': 'إنشاء حساب',
'signUpAgreementStart': 'بإنشاء حسابك ، أنت توافق على موقعنا',
'signUpAgreementEnd': 'البنود و الظروف',
'errorEnterFname': 'الرجاء إدخال الاسم الأول',
'errorEnterLname': 'الرجاء إدخال الاسم الأخير',
'errorEnterPhoneNo': "الرجاء إدخال رقم الهاتف",
// Section contains Drawer Strings ;
'writeToUs': 'اكتب لنا ',
'comoLocation': 'كومو الموقع',
'rateTheApp': 'قيم التطبيق',
'whyComo': 'لماذا .. كومو ..',
'serviceRate': 'معدل خدمة',
'followUs': 'اتبعنا:',
},
};
// Login UI Localization functions
String get lbSignIn {
return _localizedValues[locale.languageCode]['Sign in'];
}
String get errorEnterMail {
return _localizedValues[locale.languageCode]['errorEnterMail'];
}
String get errorEnterPwd {
return _localizedValues[locale.languageCode]['errorEnterPwd'];
}
String get errorInvalidPwd {
return _localizedValues[locale.languageCode]['errorInvalidPwd'];
}
String get errorInvalidMail {
return _localizedValues[locale.languageCode]['errorInvalidMail'];
}
String get emailAddress {
return _localizedValues[locale.languageCode]['Email Address'];
}
String get password {
return _localizedValues[locale.languageCode]['Password'];
}
String get login {
return _localizedValues[locale.languageCode]['LOGIN'];
}
String get forgotPassword {
return _localizedValues[locale.languageCode]['Forgot Password?'];
}
String get signUp {
return _localizedValues[locale.languageCode]['Sign Up'];
}
String get lbSignUpStr {
return _localizedValues[locale.languageCode]['lbSignUpStr'];
}
// Sign Up UI Localization Function
String get firstName {
return _localizedValues[locale.languageCode]['First Name'];
}
String get lastName {
return _localizedValues[locale.languageCode]['Last Name'];
}
String get phoneNo {
return _localizedValues[locale.languageCode]['phoneNo'];
}
String get createAccount {
return _localizedValues[locale.languageCode]['createAccount'];
}
String get signUpAgreementStart {
return _localizedValues[locale.languageCode]['signUpAgreementStart'];
}
String get signUpAgreementEnd {
return _localizedValues[locale.languageCode]['signUpAgreementEnd'];
}
String get errorEnterFirstname {
return _localizedValues[locale.languageCode]['errorEnterFname'];
}
String get errorEnterLastname {
return _localizedValues[locale.languageCode]['errorEnterLname'];
}
String get errorEnterPhoneNo {
return _localizedValues[locale.languageCode]['errorEnterPhoneNo'];
}
// Drawer UI Localization Function
String get writeToUs {
return _localizedValues[locale.languageCode]['writeToUs'];
}
String get comoLocation {
return _localizedValues[locale.languageCode]['comoLocation'];
}
String get rateTheApp {
return _localizedValues[locale.languageCode]['rateTheApp'];
}
String get whyComo {
return _localizedValues[locale.languageCode]['whyComo'];
}
String get serviceRate {
return _localizedValues[locale.languageCode]['serviceRate'];
}
String get followUs {
return _localizedValues[locale.languageCode]['followUs'];
}
}

最新更新