l10n: Basic setup with en language
This commit is contained in:
parent
44464d8c85
commit
def66ee3cc
11 changed files with 194 additions and 5 deletions
3
l10n.yaml
Normal file
3
l10n.yaml
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
arb-dir: lib/l10n
|
||||||
|
template-arb-file: app_en.arb
|
||||||
|
output-localization-file: app_localizations.dart
|
63
lib/generated/intl/messages_all.dart
Normal file
63
lib/generated/intl/messages_all.dart
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
|
||||||
|
// This is a library that looks up messages for specific locales by
|
||||||
|
// delegating to the appropriate library.
|
||||||
|
|
||||||
|
// Ignore issues from commonly used lints in this file.
|
||||||
|
// ignore_for_file:implementation_imports, file_names, unnecessary_new
|
||||||
|
// ignore_for_file:unnecessary_brace_in_string_interps, directives_ordering
|
||||||
|
// ignore_for_file:argument_type_not_assignable, invalid_assignment
|
||||||
|
// ignore_for_file:prefer_single_quotes, prefer_generic_function_type_aliases
|
||||||
|
// ignore_for_file:comment_references
|
||||||
|
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:intl/message_lookup_by_library.dart';
|
||||||
|
import 'package:intl/src/intl_helpers.dart';
|
||||||
|
|
||||||
|
import 'messages_en.dart' as messages_en;
|
||||||
|
|
||||||
|
typedef Future<dynamic> LibraryLoader();
|
||||||
|
Map<String, LibraryLoader> _deferredLibraries = {
|
||||||
|
'en': () => new Future.value(null),
|
||||||
|
};
|
||||||
|
|
||||||
|
MessageLookupByLibrary _findExact(String localeName) {
|
||||||
|
switch (localeName) {
|
||||||
|
case 'en':
|
||||||
|
return messages_en.messages;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// User programs should call this before using [localeName] for messages.
|
||||||
|
Future<bool> initializeMessages(String localeName) async {
|
||||||
|
var availableLocale = Intl.verifiedLocale(
|
||||||
|
localeName,
|
||||||
|
(locale) => _deferredLibraries[locale] != null,
|
||||||
|
onFailure: (_) => null);
|
||||||
|
if (availableLocale == null) {
|
||||||
|
return new Future.value(false);
|
||||||
|
}
|
||||||
|
var lib = _deferredLibraries[availableLocale];
|
||||||
|
await (lib == null ? new Future.value(false) : lib());
|
||||||
|
initializeInternalMessageLookup(() => new CompositeMessageLookup());
|
||||||
|
messageLookup.addLocale(availableLocale, _findGeneratedMessagesFor);
|
||||||
|
return new Future.value(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _messagesExistFor(String locale) {
|
||||||
|
try {
|
||||||
|
return _findExact(locale) != null;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageLookupByLibrary _findGeneratedMessagesFor(String locale) {
|
||||||
|
var actualLocale = Intl.verifiedLocale(locale, _messagesExistFor,
|
||||||
|
onFailure: (_) => null);
|
||||||
|
if (actualLocale == null) return null;
|
||||||
|
return _findExact(actualLocale);
|
||||||
|
}
|
26
lib/generated/intl/messages_en.dart
Normal file
26
lib/generated/intl/messages_en.dart
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart
|
||||||
|
// This is a library that provides messages for a en locale. All the
|
||||||
|
// messages from the main program should be duplicated here with the same
|
||||||
|
// function name.
|
||||||
|
|
||||||
|
// Ignore issues from commonly used lints in this file.
|
||||||
|
// ignore_for_file:unnecessary_brace_in_string_interps, unnecessary_new
|
||||||
|
// ignore_for_file:prefer_single_quotes,comment_references, directives_ordering
|
||||||
|
// ignore_for_file:annotate_overrides,prefer_generic_function_type_aliases
|
||||||
|
// ignore_for_file:unused_import, file_names
|
||||||
|
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:intl/message_lookup_by_library.dart';
|
||||||
|
|
||||||
|
final messages = new MessageLookup();
|
||||||
|
|
||||||
|
typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
|
||||||
|
|
||||||
|
class MessageLookup extends MessageLookupByLibrary {
|
||||||
|
String get localeName => 'en';
|
||||||
|
|
||||||
|
final messages = _notInlinedMessages(_notInlinedMessages);
|
||||||
|
static _notInlinedMessages(_) => <String, Function> {
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
67
lib/generated/l10n.dart
Normal file
67
lib/generated/l10n.dart
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
import 'intl/messages_all.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// Generator: Flutter Intl IDE plugin
|
||||||
|
// Made by Localizely
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
// ignore_for_file: non_constant_identifier_names, lines_longer_than_80_chars
|
||||||
|
// ignore_for_file: join_return_with_assignment, prefer_final_in_for_each
|
||||||
|
// ignore_for_file: avoid_redundant_argument_values
|
||||||
|
|
||||||
|
class S {
|
||||||
|
S();
|
||||||
|
|
||||||
|
static S current;
|
||||||
|
|
||||||
|
static const AppLocalizationDelegate delegate =
|
||||||
|
AppLocalizationDelegate();
|
||||||
|
|
||||||
|
static Future<S> load(Locale locale) {
|
||||||
|
final name = (locale.countryCode?.isEmpty ?? false) ? locale.languageCode : locale.toString();
|
||||||
|
final localeName = Intl.canonicalizedLocale(name);
|
||||||
|
return initializeMessages(localeName).then((_) {
|
||||||
|
Intl.defaultLocale = localeName;
|
||||||
|
S.current = S();
|
||||||
|
|
||||||
|
return S.current;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
static S of(BuildContext context) {
|
||||||
|
return Localizations.of<S>(context, S);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class AppLocalizationDelegate extends LocalizationsDelegate<S> {
|
||||||
|
const AppLocalizationDelegate();
|
||||||
|
|
||||||
|
List<Locale> get supportedLocales {
|
||||||
|
return const <Locale>[
|
||||||
|
Locale.fromSubtags(languageCode: 'en'),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool isSupported(Locale locale) => _isSupported(locale);
|
||||||
|
@override
|
||||||
|
Future<S> load(Locale locale) => S.load(locale);
|
||||||
|
@override
|
||||||
|
bool shouldReload(AppLocalizationDelegate old) => false;
|
||||||
|
|
||||||
|
bool _isSupported(Locale locale) {
|
||||||
|
if (locale != null) {
|
||||||
|
for (var supportedLocale in supportedLocales) {
|
||||||
|
if (supportedLocale.languageCode == locale.languageCode) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
7
lib/l10n/app_en.arb
Normal file
7
lib/l10n/app_en.arb
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"sign_up": "sign up",
|
||||||
|
"@sign_up": {
|
||||||
|
"description": "Text on the sign up button used during registration"
|
||||||
|
},
|
||||||
|
"log_in": "log in"
|
||||||
|
}
|
7
lib/l10n/l10n.dart
Normal file
7
lib/l10n/l10n.dart
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
|
class L10n {
|
||||||
|
static final all = [
|
||||||
|
const Locale('en'),
|
||||||
|
];
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import 'package:background_fetch/background_fetch.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
import 'package:flutter_easyloading/flutter_easyloading.dart';
|
||||||
|
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||||
import 'package:in_app_purchase/in_app_purchase.dart';
|
import 'package:in_app_purchase/in_app_purchase.dart';
|
||||||
import 'package:logging/logging.dart';
|
import 'package:logging/logging.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
@ -27,6 +28,9 @@ import 'package:photos/utils/crypto_util.dart';
|
||||||
import 'package:photos/utils/file_uploader.dart';
|
import 'package:photos/utils/file_uploader.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:super_logging/super_logging.dart';
|
import 'package:super_logging/super_logging.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
|
import 'l10n/l10n.dart';
|
||||||
|
|
||||||
final _logger = Logger("main");
|
final _logger = Logger("main");
|
||||||
|
|
||||||
|
@ -241,6 +245,13 @@ class _EnteAppState extends State<EnteApp> with WidgetsBindingObserver {
|
||||||
home: EnteApp._homeWidget,
|
home: EnteApp._homeWidget,
|
||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
builder: EasyLoading.init(),
|
builder: EasyLoading.init(),
|
||||||
|
supportedLocales: L10n.all,
|
||||||
|
localizationsDelegates: [
|
||||||
|
AppLocalizations.delegate,
|
||||||
|
GlobalMaterialLocalizations.delegate,
|
||||||
|
GlobalCupertinoLocalizations.delegate,
|
||||||
|
GlobalWidgetsLocalizations.delegate,
|
||||||
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ import 'package:photos/ui/web_page.dart';
|
||||||
import 'package:photos/utils/data_util.dart';
|
import 'package:photos/utils/data_util.dart';
|
||||||
import 'package:photos/utils/dialog_util.dart';
|
import 'package:photos/utils/dialog_util.dart';
|
||||||
import 'package:photos/utils/email_util.dart';
|
import 'package:photos/utils/email_util.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class EmailEntryPage extends StatefulWidget {
|
class EmailEntryPage extends StatefulWidget {
|
||||||
EmailEntryPage({Key key}) : super(key: key);
|
EmailEntryPage({Key key}) : super(key: key);
|
||||||
|
@ -65,7 +66,7 @@ class _EmailEntryPageState extends State<EmailEntryPage> {
|
||||||
child: Material(
|
child: Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: Text(
|
child: Text(
|
||||||
"sign up",
|
AppLocalizations.of(context).sign_up,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
letterSpacing: 0.6,
|
letterSpacing: 0.6,
|
||||||
|
|
|
@ -8,6 +8,8 @@ import 'package:photos/ui/password_entry_page.dart';
|
||||||
import 'package:photos/ui/password_reentry_page.dart';
|
import 'package:photos/ui/password_reentry_page.dart';
|
||||||
import 'package:photos/ui/payment/subscription.dart';
|
import 'package:photos/ui/payment/subscription.dart';
|
||||||
import 'package:photos/ui/payment/subscription_page.dart';
|
import 'package:photos/ui/payment/subscription_page.dart';
|
||||||
|
import 'package:photos/ui/subscription_page.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class LandingPageWidget extends StatefulWidget {
|
class LandingPageWidget extends StatefulWidget {
|
||||||
const LandingPageWidget({Key key}) : super(key: key);
|
const LandingPageWidget({Key key}) : super(key: key);
|
||||||
|
@ -110,7 +112,7 @@ class _LandingPageWidgetState extends State<LandingPageWidget> {
|
||||||
child: Material(
|
child: Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: Text(
|
child: Text(
|
||||||
"log in",
|
AppLocalizations.of(context).log_in,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontWeight: FontWeight.bold,
|
fontWeight: FontWeight.bold,
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
|
|
|
@ -8,6 +8,7 @@ import 'package:photos/ui/common_elements.dart';
|
||||||
import 'package:photos/ui/web_page.dart';
|
import 'package:photos/ui/web_page.dart';
|
||||||
import 'package:photos/utils/dialog_util.dart';
|
import 'package:photos/utils/dialog_util.dart';
|
||||||
import 'package:photos/utils/email_util.dart';
|
import 'package:photos/utils/email_util.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class LoginPage extends StatefulWidget {
|
class LoginPage extends StatefulWidget {
|
||||||
LoginPage({Key key}) : super(key: key);
|
LoginPage({Key key}) : super(key: key);
|
||||||
|
@ -35,7 +36,7 @@ class _LoginPageState extends State<LoginPage> {
|
||||||
child: Material(
|
child: Material(
|
||||||
type: MaterialType.transparency,
|
type: MaterialType.transparency,
|
||||||
child: Text(
|
child: Text(
|
||||||
"log in",
|
AppLocalizations.of(context).log_in,
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
letterSpacing: 0.6,
|
letterSpacing: 0.6,
|
||||||
|
@ -137,7 +138,7 @@ class _LoginPageState extends State<LoginPage> {
|
||||||
height: 64,
|
height: 64,
|
||||||
padding: const EdgeInsets.fromLTRB(80, 0, 80, 0),
|
padding: const EdgeInsets.fromLTRB(80, 0, 80, 0),
|
||||||
child: button(
|
child: button(
|
||||||
"log in",
|
AppLocalizations.of(context).log_in,
|
||||||
onPressed: _email != null && _email.isNotEmpty
|
onPressed: _email != null && _email.isNotEmpty
|
||||||
? () {
|
? () {
|
||||||
if (!isValidEmail(_email)) {
|
if (!isValidEmail(_email)) {
|
||||||
|
|
|
@ -7,6 +7,7 @@ import 'package:photos/events/subscription_purchased_event.dart';
|
||||||
import 'package:photos/ui/common_elements.dart';
|
import 'package:photos/ui/common_elements.dart';
|
||||||
import 'package:photos/ui/recovery_page.dart';
|
import 'package:photos/ui/recovery_page.dart';
|
||||||
import 'package:photos/utils/dialog_util.dart';
|
import 'package:photos/utils/dialog_util.dart';
|
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
|
|
||||||
class PasswordReentryPage extends StatefulWidget {
|
class PasswordReentryPage extends StatefulWidget {
|
||||||
PasswordReentryPage({Key key}) : super(key: key);
|
PasswordReentryPage({Key key}) : super(key: key);
|
||||||
|
@ -92,7 +93,7 @@ class _PasswordReentryPageState extends State<PasswordReentryPage> {
|
||||||
width: double.infinity,
|
width: double.infinity,
|
||||||
height: 64,
|
height: 64,
|
||||||
child: button(
|
child: button(
|
||||||
"log in",
|
AppLocalizations.of(context).log_in,
|
||||||
fontSize: 18,
|
fontSize: 18,
|
||||||
onPressed: _passwordController.text.isNotEmpty
|
onPressed: _passwordController.text.isNotEmpty
|
||||||
? () async {
|
? () async {
|
||||||
|
|
Loading…
Add table
Reference in a new issue