From 1c5553927023397f0b26448fedc6728f341b9082 Mon Sep 17 00:00:00 2001 From: Thea Choem <29684683+theachoem@users.noreply.github.com> Date: Sat, 1 Mar 2025 18:42:16 +0700 Subject: [PATCH] Close #288 add community page (#289) --- assets/images/reddit_logo_500x500.png | Bin 0 -> 31475 bytes bin/localization/data.csv | 10 ++- .../databases/models/story_db_model.g.dart | 2 +- .../remote_config/remote_config_service.dart | 7 ++ lib/gen/assets.gen.dart | 12 +++ lib/views/community/community_content.dart | 59 +++++++++++++ lib/views/community/community_view.dart | 41 +++++++++ lib/views/community/community_view_model.dart | 10 +++ .../local_widgets/community_card.dart | 75 +++++++++++++++++ lib/views/home/home_view.dart | 11 +-- .../home/local_widgets/community_tile.dart | 49 +++++++++++ .../home/local_widgets/home_end_drawer.dart | 57 +------------ .../home/local_widgets/language_tile.dart | 47 +++++++++++ .../local_widgets/more_options_button.dart | 78 ------------------ pubspec.lock | 26 +----- pubspec.yaml | 5 +- translations/ar.json | 6 +- translations/de-DE.json | 6 +- translations/en.json | 10 ++- translations/es-419.json | 8 +- translations/es-ES.json | 8 +- translations/fr-FR.json | 8 +- translations/hi-IN.json | 6 +- translations/id.json | 8 +- translations/it-IT.json | 8 +- translations/ja-JP.json | 6 +- translations/km.json | 8 +- translations/ko-KR.json | 8 +- translations/pl-PL.json | 8 +- translations/pt-BR.json | 8 +- translations/th.json | 6 +- translations/vi-VN.json | 8 +- translations/zh-CN.json | 6 +- 33 files changed, 413 insertions(+), 202 deletions(-) create mode 100644 assets/images/reddit_logo_500x500.png create mode 100644 lib/views/community/community_content.dart create mode 100644 lib/views/community/community_view.dart create mode 100644 lib/views/community/community_view_model.dart create mode 100644 lib/views/community/local_widgets/community_card.dart create mode 100644 lib/views/home/local_widgets/community_tile.dart create mode 100644 lib/views/home/local_widgets/language_tile.dart delete mode 100644 lib/views/home/local_widgets/more_options_button.dart diff --git a/assets/images/reddit_logo_500x500.png b/assets/images/reddit_logo_500x500.png new file mode 100644 index 0000000000000000000000000000000000000000..5d3364edddc54767785d23116f7d83e37c854d26 GIT binary patch literal 31475 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 _$StoryDbModelToJson(StoryDbModel instance) => 'changes': instance.allChanges?.map((e) => e.toJson()).toList(), 'created_at': instance.createdAt.toIso8601String(), 'updated_at': instance.updatedAt.toIso8601String(), - 'preferences': instance.preferences?.toJson(), 'moved_to_bin_at': instance.movedToBinAt?.toIso8601String(), 'last_saved_device_id': instance.lastSavedDeviceId, + 'preferences': instance.preferences?.toJson(), }; const _$PathTypeEnumMap = { diff --git a/lib/core/services/remote_config/remote_config_service.dart b/lib/core/services/remote_config/remote_config_service.dart index 8c7f1070..9f0e76ff 100644 --- a/lib/core/services/remote_config/remote_config_service.dart +++ b/lib/core/services/remote_config/remote_config_service.dart @@ -9,6 +9,7 @@ part './remote_config_object.dart'; class RemoteConfigService { final List<_RemoteConfigObject> _registeredKeys = [ communityUrl, + faqUrl, localizationSupportUrl, policyPrivacyUrl, sourceCodeUrl, @@ -36,6 +37,12 @@ class RemoteConfigService { 'https://www.reddit.com/r/StoryPad', ); + static const faqUrl = _RemoteConfigObject( + 'FAQ_URL', + _RemoteConfigValueType.string, + 'https://storypad.juniorise.com', + ); + static const localizationSupportUrl = _RemoteConfigObject( 'LOCALIZATION_SUPPORT_URL', _RemoteConfigValueType.string, diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index 6bd31a13..a2d39718 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -347,6 +347,17 @@ class $AssetsEmoji64Gen { ]; } +class $AssetsImagesGen { + const $AssetsImagesGen(); + + /// File path: assets/images/reddit_logo_500x500.png + AssetGenImage get redditLogo500x500 => + const AssetGenImage('assets/images/reddit_logo_500x500.png'); + + /// List of all assets + List get values => [redditLogo500x500]; +} + class $AssetsLottiesGen { const $AssetsLottiesGen(); @@ -361,6 +372,7 @@ class Assets { const Assets._(); static const $AssetsEmoji64Gen emoji64 = $AssetsEmoji64Gen(); + static const $AssetsImagesGen images = $AssetsImagesGen(); static const $AssetsLottiesGen lotties = $AssetsLottiesGen(); static const $TranslationsGen translations = $TranslationsGen(); } diff --git a/lib/views/community/community_content.dart b/lib/views/community/community_content.dart new file mode 100644 index 00000000..6be94636 --- /dev/null +++ b/lib/views/community/community_content.dart @@ -0,0 +1,59 @@ +part of 'community_view.dart'; + +class _CommunityContent extends StatelessWidget { + const _CommunityContent(this.viewModel); + + final CommunityViewModel viewModel; + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text(tr('page.community.title')), + ), + body: ListView( + children: [ + SizedBox(height: 8.0), + CommunityCard(), + SizedBox(height: 12.0), + ListTile( + leading: Icon(Icons.question_mark_outlined), + title: Text(tr("list_tile.faq.title")), + onTap: () => UrlOpenerService.openInCustomTab(context, RemoteConfigService.faqUrl.get()), + ), + ListTile( + leading: Icon(Icons.policy_outlined), + title: Text(tr("list_tile.privacy_policy.title")), + onTap: () => UrlOpenerService.openInCustomTab(context, RemoteConfigService.policyPrivacyUrl.get()), + ), + Divider(), + ListTile( + leading: Icon(Icons.code), + title: Text(tr("list_tile.source_code.title")), + subtitle: Text(kPackageInfo.version), + onTap: () => UrlOpenerService.openInCustomTab(context, RemoteConfigService.sourceCodeUrl.get()), + ), + ListTile( + leading: Icon(MdiIcons.license), + title: Text(tr("list_tile.licenses.title")), + onTap: () { + AnalyticsService.instance.logLicenseView(); + showLicensePage( + context: context, + applicationName: kPackageInfo.appName, + applicationLegalese: '©${DateTime.now().year}', + applicationVersion: "${kPackageInfo.version}+${kPackageInfo.buildNumber}", + ); + }, + ), + Divider(), + ListTile( + leading: Icon(Icons.star_border), + title: Text(tr("list_tile.rate.title")), + onTap: () => AppStoreOpenerService.call(), + ), + ], + ), + ); + } +} diff --git a/lib/views/community/community_view.dart b/lib/views/community/community_view.dart new file mode 100644 index 00000000..21666b42 --- /dev/null +++ b/lib/views/community/community_view.dart @@ -0,0 +1,41 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:material_design_icons_flutter/material_design_icons_flutter.dart' show MdiIcons; +import 'package:storypad/core/constants/app_constants.dart'; +import 'package:storypad/core/services/analytics_service.dart'; +import 'package:storypad/core/services/app_store_opener_service.dart' show AppStoreOpenerService; +import 'package:storypad/core/services/remote_config/remote_config_service.dart'; +import 'package:storypad/core/services/url_opener_service.dart'; +import 'package:storypad/views/community/local_widgets/community_card.dart'; +import 'package:storypad/widgets/view/view_model_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:storypad/routes/base_route.dart'; + +import 'community_view_model.dart'; + +part 'community_content.dart'; + +class CommunityRoute extends BaseRoute { + CommunityRoute(); + + @override + Widget buildPage(BuildContext context) => CommunityView(params: this); +} + +class CommunityView extends StatelessWidget { + const CommunityView({ + super.key, + required this.params, + }); + + final CommunityRoute params; + + @override + Widget build(BuildContext context) { + return ViewModelProvider( + create: (context) => CommunityViewModel(params: params), + builder: (context, viewModel, child) { + return _CommunityContent(viewModel); + }, + ); + } +} diff --git a/lib/views/community/community_view_model.dart b/lib/views/community/community_view_model.dart new file mode 100644 index 00000000..ea6c12f3 --- /dev/null +++ b/lib/views/community/community_view_model.dart @@ -0,0 +1,10 @@ +import 'package:storypad/widgets/view/base_view_model.dart'; +import 'community_view.dart'; + +class CommunityViewModel extends BaseViewModel { + final CommunityRoute params; + + CommunityViewModel({ + required this.params, + }); +} diff --git a/lib/views/community/local_widgets/community_card.dart b/lib/views/community/local_widgets/community_card.dart new file mode 100644 index 00000000..a7e03be2 --- /dev/null +++ b/lib/views/community/local_widgets/community_card.dart @@ -0,0 +1,75 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:storypad/core/services/remote_config/remote_config_service.dart'; +import 'package:storypad/core/services/url_opener_service.dart'; +import 'package:storypad/gen/assets.gen.dart'; +import 'package:storypad/widgets/sp_fade_in.dart'; +import 'package:storypad/widgets/sp_tap_effect.dart'; + +class CommunityCard extends StatelessWidget { + const CommunityCard({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return SpTapEffect( + effects: [SpTapEffectType.scaleDown], + onTap: () => UrlOpenerService.openInCustomTab( + context, + RemoteConfigService.communityUrl.get(), + prefersDeepLink: true, + ), + child: Container( + width: double.infinity, + margin: EdgeInsets.symmetric(horizontal: 16.0), + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.0), + color: Theme.of(context).colorScheme.tertiaryContainer, + ), + child: Stack( + children: [ + Positioned( + right: 16, + bottom: 16, + child: SpFadeIn.bound( + delay: Durations.medium1, + child: Assets.images.redditLogo500x500.image( + height: 64, + width: 64, + fit: BoxFit.fitHeight, + ), + ), + ), + Container( + padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 16.0), + margin: EdgeInsets.only(right: 72), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + tr('list_tile.join_reddit.title'), + style: TextTheme.of(context) + .titleMedium + ?.copyWith(color: Theme.of(context).colorScheme.tertiary, fontWeight: FontWeight.bold), + ), + Text( + tr('list_tile.join_reddit.message'), + style: TextTheme.of(context).bodyMedium?.copyWith(color: Theme.of(context).colorScheme.tertiary), + ), + SizedBox(height: 12.0), + ], + ), + ), + Positioned( + top: 16.0, + right: 16.0, + child: Icon(Icons.keyboard_arrow_right), + ), + ], + ), + ), + ); + } +} diff --git a/lib/views/home/home_view.dart b/lib/views/home/home_view.dart index ca7af996..a7b6f9e7 100644 --- a/lib/views/home/home_view.dart +++ b/lib/views/home/home_view.dart @@ -1,23 +1,18 @@ import 'package:easy_localization/easy_localization.dart'; -import 'package:flutter/foundation.dart'; import 'package:lottie/lottie.dart'; -import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:provider/provider.dart'; import 'package:storypad/app_theme.dart'; import 'package:storypad/core/constants/app_constants.dart'; -import 'package:storypad/core/constants/locale_constants.dart'; -import 'package:storypad/views/languages/languages_view.dart'; +import 'package:storypad/views/home/local_widgets/community_tile.dart' show CommunityTile; +import 'package:storypad/views/home/local_widgets/language_tile.dart'; import 'package:storypad/widgets/view/view_model_provider.dart'; import 'package:flutter/material.dart'; import 'package:storypad/core/databases/models/story_db_model.dart'; import 'package:storypad/core/extensions/color_scheme_extension.dart'; import 'package:storypad/core/objects/search_filter_object.dart'; import 'package:storypad/core/services/analytics_service.dart'; -import 'package:storypad/core/services/app_store_opener_service.dart'; import 'package:storypad/core/services/date_format_service.dart'; -import 'package:storypad/core/services/google_drive/google_drive_service.dart'; import 'package:storypad/core/services/remote_config/remote_config_service.dart'; -import 'package:storypad/core/services/url_opener_service.dart'; import 'package:storypad/core/types/path_type.dart'; import 'package:storypad/providers/in_app_update_provider.dart'; import 'package:storypad/providers/backup_provider.dart'; @@ -36,7 +31,6 @@ import 'package:storypad/widgets/sp_fade_in.dart'; import 'package:storypad/widgets/sp_loop_animation_builder.dart'; import 'package:storypad/widgets/sp_measure_size.dart'; import 'package:storypad/widgets/sp_nested_navigation.dart'; -import 'package:storypad/widgets/sp_pop_up_menu_button.dart'; import 'package:storypad/widgets/sp_tap_effect.dart'; import 'package:storypad/widgets/story_list/story_list_timeline_verticle_divider.dart'; import 'package:storypad/widgets/story_list/story_listener_builder.dart'; @@ -54,7 +48,6 @@ part 'local_widgets/home_app_bar_nickname.dart'; part 'local_widgets/home_app_bar_message.dart'; part 'local_widgets/home_empty.dart'; part 'local_widgets/app_update_floating_button.dart'; -part 'local_widgets/more_options_button.dart'; class HomeView extends StatelessWidget { const HomeView({super.key}); diff --git a/lib/views/home/local_widgets/community_tile.dart b/lib/views/home/local_widgets/community_tile.dart new file mode 100644 index 00000000..b8ac8a59 --- /dev/null +++ b/lib/views/home/local_widgets/community_tile.dart @@ -0,0 +1,49 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:storypad/core/extensions/color_scheme_extension.dart'; +import 'package:storypad/views/community/community_view.dart'; + +class CommunityTile extends StatelessWidget { + const CommunityTile({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return ListTile( + leading: const Icon(Icons.forum_outlined), + title: RichText( + textScaler: MediaQuery.textScalerOf(context), + text: TextSpan( + style: Theme.of(context).textTheme.bodyLarge, + text: "${tr("page.community.title")} ", + children: [ + WidgetSpan( + child: Material( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(4.0), + side: BorderSide( + color: ColorScheme.of(context).bootstrap.info.color, + ), + ), + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: MediaQuery.textScalerOf(context).scale(6), + vertical: MediaQuery.textScalerOf(context).scale(1), + ), + child: Text( + tr('general.new'), + style: TextTheme.of(context).labelMedium?.copyWith(color: ColorScheme.of(context).onSurface), + ), + ), + ), + ) + ], + ), + ), + onTap: () async { + CommunityRoute().push(context); + }, + ); + } +} diff --git a/lib/views/home/local_widgets/home_end_drawer.dart b/lib/views/home/local_widgets/home_end_drawer.dart index f2569356..c283d705 100644 --- a/lib/views/home/local_widgets/home_end_drawer.dart +++ b/lib/views/home/local_widgets/home_end_drawer.dart @@ -31,9 +31,6 @@ class _HomeEndDrawer extends StatelessWidget { extendBodyBehindAppBar: true, appBar: AppBar( forceMaterialTransparency: true, - actions: const [ - _MoreOptionsButton(), - ], ), body: ListView( padding: EdgeInsets.only( @@ -57,31 +54,16 @@ class _HomeEndDrawer extends StatelessWidget { const BackupTile(), const Divider(), buildThemeTile(context), - buildLanguageTile(context), - buildBiometricsTile(), + LanguageTile(), if (RemoteConfigService.communityUrl.get().trim().isNotEmpty == true) ...[ const Divider(), - buildCommunityTile(context), + CommunityTile(), ], ], ), ); } - Widget buildCommunityTile(BuildContext context) { - return ListTile( - leading: const Icon(Icons.forum_outlined), - title: Text(tr("list_tile.community.title")), - onTap: () async { - UrlOpenerService.openInCustomTab( - context, - RemoteConfigService.communityUrl.get(), - prefersDeepLink: true, - ); - }, - ); - } - Widget buildSearchTile(BuildContext context) { return ListTile( leading: const Icon(Icons.search), @@ -121,41 +103,6 @@ class _HomeEndDrawer extends StatelessWidget { ); } - Widget buildLanguageTile(BuildContext context) { - return ListTile( - leading: const Icon(Icons.language), - title: RichText( - textScaler: MediaQuery.textScalerOf(context), - text: TextSpan( - style: Theme.of(context).textTheme.bodyLarge, - text: "${tr("page.language.title")} ", - children: [ - WidgetSpan( - child: Material( - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4.0)), - color: ColorScheme.of(context).bootstrap.success.color, - child: Padding( - padding: EdgeInsets.symmetric( - horizontal: MediaQuery.textScalerOf(context).scale(6), - vertical: MediaQuery.textScalerOf(context).scale(1), - ), - child: Text( - tr('general.beta'), - style: TextTheme.of(context) - .labelMedium - ?.copyWith(color: ColorScheme.of(context).bootstrap.success.onColor), - ), - ), - ), - ) - ], - ), - ), - subtitle: Text(kNativeLanguageNames[context.locale.toLanguageTag()]!), - onTap: () => LanguagesRoute().push(context), - ); - } - Widget buildBiometricsTile() { return Consumer( builder: (context, provider, child) { diff --git a/lib/views/home/local_widgets/language_tile.dart b/lib/views/home/local_widgets/language_tile.dart new file mode 100644 index 00000000..d1aedad8 --- /dev/null +++ b/lib/views/home/local_widgets/language_tile.dart @@ -0,0 +1,47 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:storypad/core/constants/locale_constants.dart'; +import 'package:storypad/core/extensions/color_scheme_extension.dart'; +import 'package:storypad/views/languages/languages_view.dart'; + +class LanguageTile extends StatelessWidget { + const LanguageTile({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return ListTile( + leading: const Icon(Icons.language), + title: RichText( + textScaler: MediaQuery.textScalerOf(context), + text: TextSpan( + style: Theme.of(context).textTheme.bodyLarge, + text: "${tr("page.language.title")} ", + children: [ + WidgetSpan( + child: Material( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(4.0)), + color: ColorScheme.of(context).bootstrap.success.color, + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: MediaQuery.textScalerOf(context).scale(6), + vertical: MediaQuery.textScalerOf(context).scale(1), + ), + child: Text( + tr('general.beta'), + style: TextTheme.of(context) + .labelMedium + ?.copyWith(color: ColorScheme.of(context).bootstrap.success.onColor), + ), + ), + ), + ) + ], + ), + ), + subtitle: Text(kNativeLanguageNames[context.locale.toLanguageTag()]!), + onTap: () => LanguagesRoute().push(context), + ); + } +} diff --git a/lib/views/home/local_widgets/more_options_button.dart b/lib/views/home/local_widgets/more_options_button.dart deleted file mode 100644 index 794b9e03..00000000 --- a/lib/views/home/local_widgets/more_options_button.dart +++ /dev/null @@ -1,78 +0,0 @@ -part of '../home_view.dart'; - -class _MoreOptionsButton extends StatelessWidget { - const _MoreOptionsButton(); - - @override - Widget build(BuildContext context) { - return SpPopupMenuButton( - fromAppBar: true, - items: (context) { - return [ - buildRateItem(context), - buildPolicyPrivacyItem(context), - buildOpenSourceRepo(context), - SpPopMenuItem( - leadingIconData: MdiIcons.license, - title: tr("list_tile.licenses.title"), - onPressed: () { - AnalyticsService.instance.logLicenseView(); - showLicensePage( - context: context, - applicationName: kPackageInfo.appName, - applicationLegalese: '©${DateTime.now().year}', - applicationVersion: "${kPackageInfo.version}+${kPackageInfo.buildNumber}", - ); - }, - ), - if (kDebugMode) - SpPopMenuItem( - leadingIconData: MdiIcons.googleDrive, - title: tr("list_tile.google_drive_api.title"), - subtitle: tr("list_tile.google_drive_api.subtitle_args", namedArgs: { - 'REQUESTS_COUNT': GoogleDriveService.instance.requestCount.toString(), - }), - ) - ]; - }, - builder: (open) { - return IconButton( - tooltip: tr('button.more_options'), - onPressed: open, - icon: const Icon(Icons.more_vert), - ); - }, - ); - } - - SpPopMenuItem buildOpenSourceRepo(BuildContext context) { - return SpPopMenuItem( - leadingIconData: Icons.code, - title: tr("list_tile.source_code.title"), - onPressed: () { - UrlOpenerService.openInCustomTab(context, RemoteConfigService.sourceCodeUrl.get()); - }, - ); - } - - SpPopMenuItem buildPolicyPrivacyItem(BuildContext context) { - return SpPopMenuItem( - leadingIconData: Icons.policy, - title: tr("list_tile.privacy_policy.title"), - onPressed: () { - UrlOpenerService.openInCustomTab(context, RemoteConfigService.policyPrivacyUrl.get()); - }, - ); - } - - SpPopMenuItem buildRateItem(BuildContext context) { - return SpPopMenuItem( - leadingIconData: Icons.star, - title: tr("list_tile.rate.title"), - titleStyle: TextStyle(color: ColorScheme.of(context).bootstrap.warning.color), - onPressed: () async { - await AppStoreOpenerService.call(); - }, - ); - } -} diff --git a/pubspec.lock b/pubspec.lock index abcb44b2..61682ed7 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -319,7 +319,7 @@ packages: source: hosted version: "1.0.2" csv: - dependency: transitive + dependency: "direct dev" description: name: csv sha256: c6aa2679b2a18cb57652920f674488d89712efaf4d3fdf2e537215b35fc19d6c @@ -1002,14 +1002,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.1" - json2yaml: - dependency: transitive - description: - name: json2yaml - sha256: da94630fbc56079426fdd167ae58373286f603371075b69bf46d848d63ba3e51 - url: "https://pub.dev" - source: hosted - version: "3.0.1" json_annotation: dependency: "direct main" description: @@ -1567,22 +1559,6 @@ packages: description: flutter source: sdk version: "0.0.0" - slang: - dependency: transitive - description: - name: slang - sha256: "2778b88f05ffc23fd0a37436f607bf2a541d0b6b922e69a8ea5bbd50c2427d18" - url: "https://pub.dev" - source: hosted - version: "4.4.1" - slang_build_runner: - dependency: "direct dev" - description: - name: slang_build_runner - sha256: "15b251e8aa591d96a16da3678abdca814a5d21486d14f98602c52b169f794d7b" - url: "https://pub.dev" - source: hosted - version: "4.4.2" source_gen: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 1aa788b7..a400050a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: storypad -version: 2.4.4+247 +version: 2.4.5+249 publish_to: none environment: sdk: ^3.5.4 @@ -57,6 +57,7 @@ dependencies: dev_dependencies: build_runner: ^2.4.14 copy_with_extension_gen: ^6.0.0 + csv: ^6.0.0 flutter_gen_runner: ^5.8.0 flutter_launcher_icons: ^0.14.3 flutter_lints: ^5.0.0 @@ -64,11 +65,11 @@ dev_dependencies: flutter_test: sdk: flutter objectbox_generator: any - slang_build_runner: ^4.4.2 flutter: uses-material-design: true assets: - translations/ + - assets/images/ - assets/lotties/ - assets/emoji-64/ diff --git a/translations/ar.json b/translations/ar.json index 541c0850..179be7e8 100644 --- a/translations/ar.json +++ b/translations/ar.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "شبه جريئة", "general.font_weight.thin": "رفيع", "general.na": "لا يوجد", + "general.new": "جديد", "general.no_backup_found": "لم يتم العثور على نسخ احتياطية.", "general.others": "آحرون", "general.path_type.archives": "أرشيف", @@ -159,16 +160,18 @@ "list_tile.backup.unsignin_subtitle": "قم بتسجيل الدخول إلى جوجل درايف", "list_tile.biometrics_lock.title": "قفل القياسات الحيوية", "list_tile.color_seed.title": "بذور اللون", - "list_tile.community.title": "مجتمع", "list_tile.created_at.title": "مخلوق", "list_tile.export_backup.subtitle": "حفظ القصص على جهازك دون اتصال بالإنترنت", "list_tile.export_backup.title": "تصدير النسخ الاحتياطي", + "list_tile.faq.title": "التعليمات", "list_tile.font_family.title": "عائلة الخطوط", "list_tile.font_weight.title": "وزن الخط", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} طلب", "list_tile.google_drive_api.title": "جوجل درايف API", "list_tile.import_backup.subtitle": "استيراد نسخة احتياطية من جهازك إلى {APP_NAME}", "list_tile.import_backup.title": "استيراد النسخ الاحتياطي", + "list_tile.join_reddit.message": "تبادل الخبرات، وإعطاء ردود الفعل والبقاء على اطلاع!", + "list_tile.join_reddit.title": "انضم إلينا على رديت", "list_tile.licenses.title": "التراخيص", "list_tile.moved_to_bin_at.title": "تم النقل إلى سلة المهملات", "list_tile.privacy_policy.title": "سياسة الخصوصية", @@ -184,6 +187,7 @@ "page.backups.title": "النسخ الاحتياطية", "page.changes_history.title": "تاريخ التغييرات", "page.changes_history.too_many_changes_warning_message": "لديك {CHANGES_COUNT} من التغييرات المخزنة، باستخدام مساحة كبيرة. يجب عليك إزالة بعض.", + "page.community.title": "مجتمع", "page.edit_tag.title": "علامة جديدة", "page.fonts.title": "الخطوط", "page.home.app_bar.hello_nickname": "مرحبًا {NICKNAME}", diff --git a/translations/de-DE.json b/translations/de-DE.json index 7600660b..c4d63b00 100644 --- a/translations/de-DE.json +++ b/translations/de-DE.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Halbfett", "general.font_weight.thin": "Dünn", "general.na": "N / A", + "general.new": "Neu", "general.no_backup_found": "Keine Backups gefunden.", "general.others": "Andere", "general.path_type.archives": "Archiv", @@ -159,16 +160,18 @@ "list_tile.backup.unsignin_subtitle": "Melden Sie sich bei Google Drive an", "list_tile.biometrics_lock.title": "Biometrie-Sperre", "list_tile.color_seed.title": "Farbsamen", - "list_tile.community.title": "Gemeinschaft", "list_tile.created_at.title": "Erstellt", "list_tile.export_backup.subtitle": "Speichern Sie Geschichten offline auf Ihrem Gerät", "list_tile.export_backup.title": "Backup exportieren", + "list_tile.faq.title": "FAQ", "list_tile.font_family.title": "Schriftfamilie", "list_tile.font_weight.title": "Schriftstärke", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} Anfragen", "list_tile.google_drive_api.title": "Google Drive-API", "list_tile.import_backup.subtitle": "Backup von Ihrem Gerät in {APP_NAME} importieren", "list_tile.import_backup.title": "Backup importieren", + "list_tile.join_reddit.message": "Teilen Sie Erfahrungen, geben Sie Feedback und bleiben Sie auf dem Laufenden!", + "list_tile.join_reddit.title": "Begleiten Sie uns auf Reddit", "list_tile.licenses.title": "Lizenzen", "list_tile.moved_to_bin_at.title": "In den Papierkorb verschoben", "list_tile.privacy_policy.title": "Datenschutzrichtlinie", @@ -184,6 +187,7 @@ "page.backups.title": "Backups", "page.changes_history.title": "Änderungsverlauf", "page.changes_history.too_many_changes_warning_message": "Sie haben {CHANGES_COUNT} Änderungen gespeichert, die viel Speicherplatz beanspruchen. Sie sollten einige entfernen.", + "page.community.title": "Gemeinschaft", "page.edit_tag.title": "Neuer Tag", "page.fonts.title": "Schriftarten", "page.home.app_bar.hello_nickname": "Hallo {NICKNAME}", diff --git a/translations/en.json b/translations/en.json index a47b5c95..7d02dd15 100644 --- a/translations/en.json +++ b/translations/en.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Semi-bold", "general.font_weight.thin": "Thin", "general.na": "N/A", + "general.new": "New", "general.no_backup_found": "No backups found.", "general.others": "Others", "general.path_type.archives": "Archives", @@ -159,20 +160,22 @@ "list_tile.backup.unsignin_subtitle": "Sign in to Google Drive", "list_tile.biometrics_lock.title": "Biometrics Lock", "list_tile.color_seed.title": "Color Seed", - "list_tile.community.title": "Community", "list_tile.created_at.title": "Created", "list_tile.export_backup.subtitle": "Save stories to your device offline", "list_tile.export_backup.title": "Export Backup", + "list_tile.faq.title": "FAQ", "list_tile.font_family.title": "Font Family", "list_tile.font_weight.title": "Font Weight", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} requests", "list_tile.google_drive_api.title": "Google Drive API", "list_tile.import_backup.subtitle": "Import backup from your device into {APP_NAME}", "list_tile.import_backup.title": "Import Backup", + "list_tile.join_reddit.message": "Share experiences, give feedback & stay updated!", + "list_tile.join_reddit.title": "Join Us on Reddit", "list_tile.licenses.title": "Licenses", "list_tile.moved_to_bin_at.title": "Moved to bin", - "list_tile.privacy_policy.title": "Privacy & Policy", - "list_tile.rate.title": "Rate the App", + "list_tile.privacy_policy.title": "Privacy Policy", + "list_tile.rate.title": "Rate Us", "list_tile.source_code.title": "Source Code", "list_tile.story_date.title": "Story Date", "list_tile.theme_mode.title": "Theme Mode", @@ -184,6 +187,7 @@ "page.backups.title": "Backups", "page.changes_history.title": "Changes History", "page.changes_history.too_many_changes_warning_message": "You have {CHANGES_COUNT} changes stored, using a lot of space. You should remove some.", + "page.community.title": "Community", "page.edit_tag.title": "New Tag", "page.fonts.title": "Fonts", "page.home.app_bar.hello_nickname": "Hello {NICKNAME}", diff --git a/translations/es-419.json b/translations/es-419.json index 41ab1d5f..8a65e622 100644 --- a/translations/es-419.json +++ b/translations/es-419.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Semi-negrita", "general.font_weight.thin": "Delgado", "general.na": "N / A", + "general.new": "Nuevo", "general.no_backup_found": "No se encontraron copias de seguridad.", "general.others": "Otros", "general.path_type.archives": "Archivo", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "Iniciar sesión en Google Drive", "list_tile.biometrics_lock.title": "Cerradura biométrica", "list_tile.color_seed.title": "Semilla de color", - "list_tile.community.title": "Comunidad", "list_tile.created_at.title": "Creado", "list_tile.export_backup.subtitle": "Guarde historias en su dispositivo sin conexión", "list_tile.export_backup.title": "Exportar copia de seguridad", + "list_tile.faq.title": "Preguntas frecuentes", "list_tile.font_family.title": "Familia de fuentes", "list_tile.font_weight.title": "Peso de fuente", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} solicitudes", "list_tile.google_drive_api.title": "API de Google Drive", "list_tile.import_backup.subtitle": "Importa una copia de seguridad desde tu dispositivo a {APP_NAME}", "list_tile.import_backup.title": "Importar copia de seguridad", + "list_tile.join_reddit.message": "¡Comparta experiencias, envíe comentarios y manténgase actualizado!", + "list_tile.join_reddit.title": "Únase a nosotros en Reddit", "list_tile.licenses.title": "Licencias", "list_tile.moved_to_bin_at.title": "Movido a la papelera", - "list_tile.privacy_policy.title": "Política de privacidad", + "list_tile.privacy_policy.title": "política de privacidad", "list_tile.rate.title": "Califica la aplicación", "list_tile.source_code.title": "Código fuente", "list_tile.story_date.title": "Fecha de la historia", @@ -184,6 +187,7 @@ "page.backups.title": "Copias de seguridad", "page.changes_history.title": "Historial de cambios", "page.changes_history.too_many_changes_warning_message": "Tienes {CHANGES_COUNT} cambios almacenados, usando mucho espacio. Deberías quitar algunos.", + "page.community.title": "Comunidad", "page.edit_tag.title": "Nueva etiqueta", "page.fonts.title": "Fuentes", "page.home.app_bar.hello_nickname": "Hola {NICKNAME}", diff --git a/translations/es-ES.json b/translations/es-ES.json index 3a47bfa7..57a0f722 100644 --- a/translations/es-ES.json +++ b/translations/es-ES.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Semi-negrita", "general.font_weight.thin": "Delgado", "general.na": "N / A", + "general.new": "Nuevo", "general.no_backup_found": "No se encontraron copias de seguridad.", "general.others": "Otros", "general.path_type.archives": "Archivo", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "Iniciar sesión en Google Drive", "list_tile.biometrics_lock.title": "Cerradura biométrica", "list_tile.color_seed.title": "Semilla de color", - "list_tile.community.title": "Comunidad", "list_tile.created_at.title": "Creado", "list_tile.export_backup.subtitle": "Guarde historias en su dispositivo sin conexión", "list_tile.export_backup.title": "Exportar copia de seguridad", + "list_tile.faq.title": "Preguntas frecuentes", "list_tile.font_family.title": "Familia de fuentes", "list_tile.font_weight.title": "Peso de fuente", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} solicitudes", "list_tile.google_drive_api.title": "API de Google Drive", "list_tile.import_backup.subtitle": "Importa una copia de seguridad desde tu dispositivo a {APP_NAME}", "list_tile.import_backup.title": "Importar copia de seguridad", + "list_tile.join_reddit.message": "¡Comparta experiencias, envíe comentarios y manténgase actualizado!", + "list_tile.join_reddit.title": "Únase a nosotros en Reddit", "list_tile.licenses.title": "Licencias", "list_tile.moved_to_bin_at.title": "Movido a la papelera", - "list_tile.privacy_policy.title": "Política de privacidad", + "list_tile.privacy_policy.title": "política de privacidad", "list_tile.rate.title": "Califica la aplicación", "list_tile.source_code.title": "Código fuente", "list_tile.story_date.title": "Fecha de la historia", @@ -184,6 +187,7 @@ "page.backups.title": "Copias de seguridad", "page.changes_history.title": "Historial de cambios", "page.changes_history.too_many_changes_warning_message": "Tienes {CHANGES_COUNT} cambios almacenados, usando mucho espacio. Deberías quitar algunos.", + "page.community.title": "Comunidad", "page.edit_tag.title": "Nueva etiqueta", "page.fonts.title": "Fuentes", "page.home.app_bar.hello_nickname": "Hola {NICKNAME}", diff --git a/translations/fr-FR.json b/translations/fr-FR.json index 3b154583..c2744780 100644 --- a/translations/fr-FR.json +++ b/translations/fr-FR.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Semi-gras", "general.font_weight.thin": "Mince", "general.na": "N / A", + "general.new": "Nouveau", "general.no_backup_found": "Aucune sauvegarde trouvée.", "general.others": "Autres", "general.path_type.archives": "Archives", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "Connectez-vous à Google Drive", "list_tile.biometrics_lock.title": "Verrouillage biométrique", "list_tile.color_seed.title": "Graine de couleur", - "list_tile.community.title": "Communauté", "list_tile.created_at.title": "Créé", "list_tile.export_backup.subtitle": "Enregistrez des histoires sur votre appareil hors ligne", "list_tile.export_backup.title": "Exporter la sauvegarde", + "list_tile.faq.title": "FAQ", "list_tile.font_family.title": "Famille de polices", "list_tile.font_weight.title": "Poids de la police", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} demandes", "list_tile.google_drive_api.title": "API Google Drive", "list_tile.import_backup.subtitle": "Importer une sauvegarde de votre appareil dans {APP_NAME}", "list_tile.import_backup.title": "Importer une sauvegarde", + "list_tile.join_reddit.message": "Partagez vos expériences, donnez votre avis et restez informé !", + "list_tile.join_reddit.title": "Rejoignez-nous sur Reddit", "list_tile.licenses.title": "Licences", "list_tile.moved_to_bin_at.title": "Déplacé vers la corbeille", - "list_tile.privacy_policy.title": "Politique de confidentialité", + "list_tile.privacy_policy.title": "politique de confidentialité", "list_tile.rate.title": "Évaluez l'application", "list_tile.source_code.title": "Code source", "list_tile.story_date.title": "Date de l'histoire", @@ -184,6 +187,7 @@ "page.backups.title": "Sauvegardes", "page.changes_history.title": "Historique des modifications", "page.changes_history.too_many_changes_warning_message": "Vous avez stocké {CHANGES_COUNT} modifications, ce qui utilise beaucoup d'espace. Vous devriez en supprimer.", + "page.community.title": "Communauté", "page.edit_tag.title": "Nouvelle balise", "page.fonts.title": "Polices", "page.home.app_bar.hello_nickname": "Bonjour {NICKNAME}", diff --git a/translations/hi-IN.json b/translations/hi-IN.json index b275ff2c..414df441 100644 --- a/translations/hi-IN.json +++ b/translations/hi-IN.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "अर्ध-बोल्ड", "general.font_weight.thin": "पतला", "general.na": "एन/ए", + "general.new": "नया", "general.no_backup_found": "कोई बैकअप नहीं मिला.", "general.others": "अन्य", "general.path_type.archives": "अभिलेखागार", @@ -159,16 +160,18 @@ "list_tile.backup.unsignin_subtitle": "Google Drive में साइन इन करें", "list_tile.biometrics_lock.title": "बायोमेट्रिक्स लॉक", "list_tile.color_seed.title": "रंग बीज", - "list_tile.community.title": "समुदाय", "list_tile.created_at.title": "बनाया था", "list_tile.export_backup.subtitle": "कहानियों को अपने डिवाइस में ऑफ़लाइन सहेजें", "list_tile.export_backup.title": "बैकअप निर्यात करें", + "list_tile.faq.title": "अक्सर पूछे जाने वाले प्रश्न", "list_tile.font_family.title": "फुहारा परिवार", "list_tile.font_weight.title": "फ़ॉन्ट वजन", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} अनुरोध", "list_tile.google_drive_api.title": "गूगल ड्राइव एपीआई", "list_tile.import_backup.subtitle": "अपने डिवाइस से बैकअप को {APP_NAME} में आयात करें", "list_tile.import_backup.title": "बैकअप आयात करें", + "list_tile.join_reddit.message": "अनुभव साझा करें, प्रतिक्रिया दें और अपडेट रहें!", + "list_tile.join_reddit.title": "Reddit पर हमसे जुड़ें", "list_tile.licenses.title": "लाइसेंस", "list_tile.moved_to_bin_at.title": "बिन में ले जाया गया", "list_tile.privacy_policy.title": "गोपनीयता नीति", @@ -184,6 +187,7 @@ "page.backups.title": "बैकअप", "page.changes_history.title": "इतिहास बदलता है", "page.changes_history.too_many_changes_warning_message": "आपके पास बहुत अधिक स्थान का उपयोग करते हुए, {CHANGES_COUNT} परिवर्तन संग्रहीत हैं। आपको कुछ हटा देना चाहिए.", + "page.community.title": "समुदाय", "page.edit_tag.title": "नया टैग", "page.fonts.title": "फ़ॉन्ट्स", "page.home.app_bar.hello_nickname": "नमस्ते {NICKNAME}", diff --git a/translations/id.json b/translations/id.json index 35c53943..15873710 100644 --- a/translations/id.json +++ b/translations/id.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Setengah tebal", "general.font_weight.thin": "Tipis", "general.na": "T/A", + "general.new": "Baru", "general.no_backup_found": "Tidak ada cadangan yang ditemukan.", "general.others": "Yang lain", "general.path_type.archives": "Arsip", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "Masuk ke Google Drive", "list_tile.biometrics_lock.title": "Kunci Biometrik", "list_tile.color_seed.title": "Benih Warna", - "list_tile.community.title": "Masyarakat", "list_tile.created_at.title": "Dibuat", "list_tile.export_backup.subtitle": "Simpan cerita ke perangkat Anda secara offline", "list_tile.export_backup.title": "Ekspor Cadangan", + "list_tile.faq.title": "Pertanyaan Umum", "list_tile.font_family.title": "Keluarga Font", "list_tile.font_weight.title": "Berat Font", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} permintaan", "list_tile.google_drive_api.title": "API Google Drive", "list_tile.import_backup.subtitle": "Impor cadangan dari perangkat Anda ke {APP_NAME}", "list_tile.import_backup.title": "Impor Cadangan", + "list_tile.join_reddit.message": "Bagikan pengalaman, berikan masukan & dapatkan informasi terbaru!", + "list_tile.join_reddit.title": "Bergabunglah dengan Kami di Reddit", "list_tile.licenses.title": "Lisensi", "list_tile.moved_to_bin_at.title": "Dipindahkan ke tempat sampah", - "list_tile.privacy_policy.title": "Privasi & Kebijakan", + "list_tile.privacy_policy.title": "Kebijakan Privasi", "list_tile.rate.title": "Nilai Aplikasinya", "list_tile.source_code.title": "Kode Sumber", "list_tile.story_date.title": "Tanggal Cerita", @@ -184,6 +187,7 @@ "page.backups.title": "Cadangan", "page.changes_history.title": "Mengubah Riwayat", "page.changes_history.too_many_changes_warning_message": "Anda menyimpan {CHANGES_COUNT} perubahan dan menggunakan banyak ruang. Anda harus menghapus beberapa.", + "page.community.title": "Masyarakat", "page.edit_tag.title": "Label Baru", "page.fonts.title": "font", "page.home.app_bar.hello_nickname": "Halo {NICKNAME}", diff --git a/translations/it-IT.json b/translations/it-IT.json index af7ba507..b2f34e17 100644 --- a/translations/it-IT.json +++ b/translations/it-IT.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Semi-audace", "general.font_weight.thin": "Magro", "general.na": "N / A", + "general.new": "Nuovo", "general.no_backup_found": "Nessun backup trovato.", "general.others": "Altri", "general.path_type.archives": "Archivi", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "Accedi a Google Drive", "list_tile.biometrics_lock.title": "Blocco biometrico", "list_tile.color_seed.title": "Seme di colore", - "list_tile.community.title": "Comunità", "list_tile.created_at.title": "Creato", "list_tile.export_backup.subtitle": "Salva storie sul tuo dispositivo offline", "list_tile.export_backup.title": "Esporta backup", + "list_tile.faq.title": "Domande frequenti", "list_tile.font_family.title": "Famiglia di caratteri", "list_tile.font_weight.title": "Peso del carattere", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} richieste", "list_tile.google_drive_api.title": "API di Google Drive", "list_tile.import_backup.subtitle": "Importa il backup dal tuo dispositivo in {APP_NAME}", "list_tile.import_backup.title": "Importa backup", + "list_tile.join_reddit.message": "Condividi esperienze, lascia feedback e rimani aggiornato!", + "list_tile.join_reddit.title": "Unisciti a noi su Reddit", "list_tile.licenses.title": "Licenze", "list_tile.moved_to_bin_at.title": "Spostato nel cestino", - "list_tile.privacy_policy.title": "Politica sulla riservatezza", + "list_tile.privacy_policy.title": "politica sulla riservatezza", "list_tile.rate.title": "Valuta l'app", "list_tile.source_code.title": "Codice sorgente", "list_tile.story_date.title": "Data della storia", @@ -184,6 +187,7 @@ "page.backups.title": "Backup", "page.changes_history.title": "Cambia la storia", "page.changes_history.too_many_changes_warning_message": "Hai {CHANGES_COUNT} modifiche memorizzate, utilizzando molto spazio. Dovresti rimuoverne alcuni.", + "page.community.title": "Comunità", "page.edit_tag.title": "Nuova etichetta", "page.fonts.title": "Caratteri", "page.home.app_bar.hello_nickname": "Ciao {NICKNAME}", diff --git a/translations/ja-JP.json b/translations/ja-JP.json index 1c886c3a..f41d4c4b 100644 --- a/translations/ja-JP.json +++ b/translations/ja-JP.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "半太字", "general.font_weight.thin": "薄い", "general.na": "該当なし", + "general.new": "新しい", "general.no_backup_found": "バックアップが見つかりませんでした。", "general.others": "その他", "general.path_type.archives": "アーカイブ", @@ -159,16 +160,18 @@ "list_tile.backup.unsignin_subtitle": "Google ドライブにサインインする", "list_tile.biometrics_lock.title": "生体認証ロック", "list_tile.color_seed.title": "カラーシード", - "list_tile.community.title": "コミュニティ", "list_tile.created_at.title": "作成されました", "list_tile.export_backup.subtitle": "ストーリーをオフラインでデバイスに保存する", "list_tile.export_backup.title": "バックアップのエクスポート", + "list_tile.faq.title": "よくある質問", "list_tile.font_family.title": "フォントファミリー", "list_tile.font_weight.title": "フォントの太さ", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} 件のリクエスト", "list_tile.google_drive_api.title": "GoogleドライブAPI", "list_tile.import_backup.subtitle": "デバイスから {APP_NAME} にバックアップをインポートします", "list_tile.import_backup.title": "インポートバックアップ", + "list_tile.join_reddit.message": "経験を共有し、フィードバックを送り、最新情報を入手してください。", + "list_tile.join_reddit.title": "Reddit に参加してみませんか", "list_tile.licenses.title": "ライセンス", "list_tile.moved_to_bin_at.title": "ビンに移動しました", "list_tile.privacy_policy.title": "プライバシーポリシー", @@ -184,6 +187,7 @@ "page.backups.title": "バックアップ", "page.changes_history.title": "変更履歴", "page.changes_history.too_many_changes_warning_message": "{CHANGES_COUNT} 件の変更が保存されており、多くのスペースを使用しています。一部を削除する必要があります。", + "page.community.title": "コミュニティ", "page.edit_tag.title": "新しいタグ", "page.fonts.title": "フォント", "page.home.app_bar.hello_nickname": "こんにちは、{NICKNAME}", diff --git a/translations/km.json b/translations/km.json index 16d0f768..fa7d2e79 100644 --- a/translations/km.json +++ b/translations/km.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "ពាក់កណ្តាលដិត", "general.font_weight.thin": "ស្តើង", "general.na": "គ្មាន", + "general.new": "ថ្មី។", "general.no_backup_found": "រកមិនឃើញការបម្រុងទុកទេ។", "general.others": "ផ្សេងៗ", "general.path_type.archives": "បណ្ណសារ", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "ចូល Google ថាស", "list_tile.biometrics_lock.title": "សោជីវមាត្រ", "list_tile.color_seed.title": "ពូជពណ៌", - "list_tile.community.title": "សហគមន៍", "list_tile.created_at.title": "បានបង្កើត", "list_tile.export_backup.subtitle": "រក្សាទុករឿងរ៉ាវទៅឧបករណ៍របស់អ្នកដោយគ្មានអ៊ីនធឺណិត", "list_tile.export_backup.title": "នាំចេញការបម្រុងទុក", + "list_tile.faq.title": "សំណួរគេសួរញឹកញាប់", "list_tile.font_family.title": "គ្រួសារពុម្ពអក្សរ", "list_tile.font_weight.title": "ទម្ងន់ពុម្ពអក្សរ", "list_tile.google_drive_api.subtitle_args": "សំណើ {REQUESTS_COUNT}", "list_tile.google_drive_api.title": "Google Drive API", "list_tile.import_backup.subtitle": "នាំចូលការបម្រុងទុកពីឧបករណ៍របស់អ្នកទៅក្នុង {APP_NAME}", "list_tile.import_backup.title": "នាំចូលការបម្រុងទុក", + "list_tile.join_reddit.message": "ចែករំលែកបទពិសោធន៍ ផ្តល់មតិកែលម្អ និងបន្តធ្វើបច្ចុប្បន្នភាព!", + "list_tile.join_reddit.title": "ចូលរួមជាមួយពួកយើងនៅលើ Reddit", "list_tile.licenses.title": "អាជ្ញាប័ណ្ណ", "list_tile.moved_to_bin_at.title": "ផ្លាស់ទីទៅធុងសំរាម", - "list_tile.privacy_policy.title": "ឯកជនភាព និងគោលការណ៍", + "list_tile.privacy_policy.title": "គោលការណ៍ឯកជនភាព", "list_tile.rate.title": "វាយតម្លៃកម្មវិធី", "list_tile.source_code.title": "កូដប្រភព", "list_tile.story_date.title": "កាលបរិច្ឆេទរឿង", @@ -184,6 +187,7 @@ "page.backups.title": "ការបម្រុងទុក", "page.changes_history.title": "ការផ្លាស់ប្តូរប្រវត្តិ", "page.changes_history.too_many_changes_warning_message": "អ្នកមានការផ្លាស់ប្តូរ {CHANGES_COUNT} ត្រូវបានរក្សាទុក ដោយប្រើកន្លែងទំនេរច្រើន។ អ្នកគួរតែដកចេញខ្លះ។", + "page.community.title": "សហគមន៍", "page.edit_tag.title": "ស្លាកថ្មី។", "page.fonts.title": "ពុម្ពអក្សរ", "page.home.app_bar.hello_nickname": "សួស្តី {NICKNAME}", diff --git a/translations/ko-KR.json b/translations/ko-KR.json index 706f3edf..f1268d55 100644 --- a/translations/ko-KR.json +++ b/translations/ko-KR.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "약간 굵은체", "general.font_weight.thin": "얇은", "general.na": "해당 없음", + "general.new": "새로운", "general.no_backup_found": "백업을 찾을 수 없습니다.", "general.others": "기타", "general.path_type.archives": "아카이브", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "Google 드라이브에 로그인", "list_tile.biometrics_lock.title": "생체 인식 잠금", "list_tile.color_seed.title": "컬러 시드", - "list_tile.community.title": "지역 사회", "list_tile.created_at.title": "생성됨", "list_tile.export_backup.subtitle": "오프라인으로 기기에 스토리 저장", "list_tile.export_backup.title": "백업 내보내기", + "list_tile.faq.title": "FAQ", "list_tile.font_family.title": "글꼴군", "list_tile.font_weight.title": "글꼴 두께", "list_tile.google_drive_api.subtitle_args": "요청 {REQUESTS_COUNT}개", "list_tile.google_drive_api.title": "구글 드라이브 API", "list_tile.import_backup.subtitle": "기기에서 {APP_NAME}으로 백업 가져오기", "list_tile.import_backup.title": "백업 가져오기", + "list_tile.join_reddit.message": "경험을 공유하고 피드백을 제공하며 최신 소식을 받아보세요!", + "list_tile.join_reddit.title": "Reddit에 가입하세요", "list_tile.licenses.title": "라이센스", "list_tile.moved_to_bin_at.title": "휴지통으로 이동됨", - "list_tile.privacy_policy.title": "개인정보 보호 및 정책", + "list_tile.privacy_policy.title": "개인 정보 보호 정책", "list_tile.rate.title": "앱 평가", "list_tile.source_code.title": "소스 코드", "list_tile.story_date.title": "이야기 날짜", @@ -184,6 +187,7 @@ "page.backups.title": "백업", "page.changes_history.title": "변경 내역", "page.changes_history.too_many_changes_warning_message": "많은 공간을 사용하여 {CHANGES_COUNT}개의 변경사항이 저장되었습니다. 일부를 제거해야 합니다.", + "page.community.title": "지역 사회", "page.edit_tag.title": "새 태그", "page.fonts.title": "글꼴", "page.home.app_bar.hello_nickname": "안녕하세요, {NICKNAME}님", diff --git a/translations/pl-PL.json b/translations/pl-PL.json index 9df2ad8b..b40c1b41 100644 --- a/translations/pl-PL.json +++ b/translations/pl-PL.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Półpogrubione", "general.font_weight.thin": "Cienki", "general.na": "Nie dotyczy", + "general.new": "Nowy", "general.no_backup_found": "Nie znaleziono kopii zapasowych.", "general.others": "Inni", "general.path_type.archives": "Archiwa", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "Zaloguj się na Dysku Google", "list_tile.biometrics_lock.title": "Blokada biometryczna", "list_tile.color_seed.title": "Nasiona koloru", - "list_tile.community.title": "Wspólnota", "list_tile.created_at.title": "Stworzony", "list_tile.export_backup.subtitle": "Zapisuj historie na swoim urządzeniu w trybie offline", "list_tile.export_backup.title": "Eksportuj kopię zapasową", + "list_tile.faq.title": "Często zadawane pytania", "list_tile.font_family.title": "Rodzina czcionek", "list_tile.font_weight.title": "Waga czcionki", "list_tile.google_drive_api.subtitle_args": "Żądania: {REQUESTS_COUNT}", "list_tile.google_drive_api.title": "Interfejs API Dysku Google", "list_tile.import_backup.subtitle": "Zaimportuj kopię zapasową ze swojego urządzenia do aplikacji {APP_NAME}", "list_tile.import_backup.title": "Importuj kopię zapasową", + "list_tile.join_reddit.message": "Dziel się doświadczeniami, wyrażaj opinie i bądź na bieżąco!", + "list_tile.join_reddit.title": "Dołącz do nas na Reddicie", "list_tile.licenses.title": "Licencje", "list_tile.moved_to_bin_at.title": "Przeniesiono do kosza", - "list_tile.privacy_policy.title": "Prywatność i zasady", + "list_tile.privacy_policy.title": "Polityka prywatności", "list_tile.rate.title": "Oceń aplikację", "list_tile.source_code.title": "Kod źródłowy", "list_tile.story_date.title": "Data historii", @@ -184,6 +187,7 @@ "page.backups.title": "Kopie zapasowe", "page.changes_history.title": "Historia zmian", "page.changes_history.too_many_changes_warning_message": "Masz zapisane zmiany ({CHANGES_COUNT}), które zajmują dużo miejsca. Powinieneś usunąć niektóre.", + "page.community.title": "Wspólnota", "page.edit_tag.title": "Nowy znacznik", "page.fonts.title": "Czcionki", "page.home.app_bar.hello_nickname": "Witaj {NICKNAME}", diff --git a/translations/pt-BR.json b/translations/pt-BR.json index a39a0fe1..b877e767 100644 --- a/translations/pt-BR.json +++ b/translations/pt-BR.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Semi-negrito", "general.font_weight.thin": "Afinar", "general.na": "N / D", + "general.new": "Novo", "general.no_backup_found": "Nenhum backup encontrado.", "general.others": "Outros", "general.path_type.archives": "Arquivos", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "Faça login no Google Drive", "list_tile.biometrics_lock.title": "Bloqueio biométrico", "list_tile.color_seed.title": "Semente de Cor", - "list_tile.community.title": "Comunidade", "list_tile.created_at.title": "Criado", "list_tile.export_backup.subtitle": "Salve histórias no seu dispositivo off-line", "list_tile.export_backup.title": "Exportar backup", + "list_tile.faq.title": "Perguntas frequentes", "list_tile.font_family.title": "Família de fontes", "list_tile.font_weight.title": "Peso da fonte", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} solicitações", "list_tile.google_drive_api.title": "API do Google Drive", "list_tile.import_backup.subtitle": "Importe o backup do seu dispositivo para o {APP_NAME}", "list_tile.import_backup.title": "Importar backup", + "list_tile.join_reddit.message": "Compartilhe experiências, dê feedback e fique atualizado!", + "list_tile.join_reddit.title": "Junte-se a nós no Reddit", "list_tile.licenses.title": "Licenças", "list_tile.moved_to_bin_at.title": "Movido para a lixeira", - "list_tile.privacy_policy.title": "Política de Privacidade", + "list_tile.privacy_policy.title": "política de Privacidade", "list_tile.rate.title": "Avalie o aplicativo", "list_tile.source_code.title": "Código Fonte", "list_tile.story_date.title": "Data da história", @@ -184,6 +187,7 @@ "page.backups.title": "Cópias de segurança", "page.changes_history.title": "Histórico de alterações", "page.changes_history.too_many_changes_warning_message": "Você tem {CHANGES_COUNT} alterações armazenadas, ocupando muito espaço. Você deveria remover alguns.", + "page.community.title": "Comunidade", "page.edit_tag.title": "Nova etiqueta", "page.fonts.title": "Fontes", "page.home.app_bar.hello_nickname": "Olá {NICKNAME}", diff --git a/translations/th.json b/translations/th.json index b1719b62..39a270cc 100644 --- a/translations/th.json +++ b/translations/th.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "กึ่งหนา", "general.font_weight.thin": "บาง", "general.na": "ไม่มี", + "general.new": "ใหม่", "general.no_backup_found": "ไม่พบข้อมูลสำรอง", "general.others": "คนอื่น", "general.path_type.archives": "หอจดหมายเหตุ", @@ -159,16 +160,18 @@ "list_tile.backup.unsignin_subtitle": "ลงชื่อเข้าใช้ Google ไดรฟ์", "list_tile.biometrics_lock.title": "ล็อคไบโอเมตริกซ์", "list_tile.color_seed.title": "เมล็ดพันธุ์สี", - "list_tile.community.title": "ชุมชน", "list_tile.created_at.title": "สร้าง", "list_tile.export_backup.subtitle": "บันทึกเรื่องราวลงในอุปกรณ์ของคุณแบบออฟไลน์", "list_tile.export_backup.title": "ส่งออกข้อมูลสำรอง", + "list_tile.faq.title": "คำถามที่พบบ่อย", "list_tile.font_family.title": "ครอบครัวแบบอักษร", "list_tile.font_weight.title": "น้ำหนักตัวอักษร", "list_tile.google_drive_api.subtitle_args": "คำขอ {REQUESTS_COUNT} รายการ", "list_tile.google_drive_api.title": "Google ไดรฟ์ API", "list_tile.import_backup.subtitle": "นำเข้าข้อมูลสำรองจากอุปกรณ์ของคุณไปยัง {APP_NAME}", "list_tile.import_backup.title": "นำเข้าข้อมูลสำรอง", + "list_tile.join_reddit.message": "แบ่งปันประสบการณ์ ให้ข้อเสนอแนะ และอัพเดทอยู่เสมอ!", + "list_tile.join_reddit.title": "เข้าร่วมกับเราบน Reddit", "list_tile.licenses.title": "ใบอนุญาต", "list_tile.moved_to_bin_at.title": "ย้ายไปถังขยะแล้ว", "list_tile.privacy_policy.title": "นโยบายความเป็นส่วนตัว", @@ -184,6 +187,7 @@ "page.backups.title": "การสำรองข้อมูล", "page.changes_history.title": "ประวัติการเปลี่ยนแปลง", "page.changes_history.too_many_changes_warning_message": "คุณจัดเก็บการเปลี่ยนแปลงไว้ {CHANGES_COUNT} รายการ โดยใช้พื้นที่มาก คุณควรลบบางส่วนออก", + "page.community.title": "ชุมชน", "page.edit_tag.title": "แท็กใหม่", "page.fonts.title": "แบบอักษร", "page.home.app_bar.hello_nickname": "สวัสดี {NICKNAME}", diff --git a/translations/vi-VN.json b/translations/vi-VN.json index bdbe5a77..5e18956b 100644 --- a/translations/vi-VN.json +++ b/translations/vi-VN.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "Nửa đậm", "general.font_weight.thin": "Gầy", "general.na": "không áp dụng", + "general.new": "Mới", "general.no_backup_found": "Không tìm thấy bản sao lưu nào.", "general.others": "Người khác", "general.path_type.archives": "Lưu trữ", @@ -159,19 +160,21 @@ "list_tile.backup.unsignin_subtitle": "Đăng nhập vào Google Drive", "list_tile.biometrics_lock.title": "Khóa sinh trắc học", "list_tile.color_seed.title": "Hạt màu", - "list_tile.community.title": "Cộng đồng", "list_tile.created_at.title": "Tạo", "list_tile.export_backup.subtitle": "Lưu câu chuyện vào thiết bị của bạn ngoại tuyến", "list_tile.export_backup.title": "Xuất bản sao lưu", + "list_tile.faq.title": "Câu hỏi thường gặp", "list_tile.font_family.title": "Họ phông chữ", "list_tile.font_weight.title": "Trọng lượng phông chữ", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} yêu cầu", "list_tile.google_drive_api.title": "API Google Drive", "list_tile.import_backup.subtitle": "Nhập bản sao lưu từ thiết bị của bạn vào {APP_NAME}", "list_tile.import_backup.title": "Nhập bản sao lưu", + "list_tile.join_reddit.message": "Chia sẻ kinh nghiệm, đưa ra phản hồi và luôn cập nhật!", + "list_tile.join_reddit.title": "Tham gia với chúng tôi trên Reddit", "list_tile.licenses.title": "Giấy phép", "list_tile.moved_to_bin_at.title": "Đã chuyển vào thùng rác", - "list_tile.privacy_policy.title": "Quyền riêng tư & Chính sách", + "list_tile.privacy_policy.title": "Chính sách bảo mật", "list_tile.rate.title": "Đánh giá ứng dụng", "list_tile.source_code.title": "Mã nguồn", "list_tile.story_date.title": "Ngày kể chuyện", @@ -184,6 +187,7 @@ "page.backups.title": "Sao lưu", "page.changes_history.title": "Lịch sử thay đổi", "page.changes_history.too_many_changes_warning_message": "Bạn đã lưu trữ {CHANGES_COUNT} thay đổi, sử dụng nhiều dung lượng. Bạn nên loại bỏ một số.", + "page.community.title": "Cộng đồng", "page.edit_tag.title": "Thẻ mới", "page.fonts.title": "Phông chữ", "page.home.app_bar.hello_nickname": "Xin chào {NICKNAME}", diff --git a/translations/zh-CN.json b/translations/zh-CN.json index 06181964..708f55e8 100644 --- a/translations/zh-CN.json +++ b/translations/zh-CN.json @@ -128,6 +128,7 @@ "general.font_weight.semi_bold": "半粗体", "general.font_weight.thin": "薄的", "general.na": "不适用", + "general.new": "新的", "general.no_backup_found": "未找到备份。", "general.others": "其他的", "general.path_type.archives": "档案", @@ -159,16 +160,18 @@ "list_tile.backup.unsignin_subtitle": "登录 Google 云端硬盘", "list_tile.biometrics_lock.title": "生物识别锁", "list_tile.color_seed.title": "彩色种子", - "list_tile.community.title": "社区", "list_tile.created_at.title": "已创建", "list_tile.export_backup.subtitle": "离线将故事保存到您的设备", "list_tile.export_backup.title": "导出备份", + "list_tile.faq.title": "常问问题", "list_tile.font_family.title": "字体家族", "list_tile.font_weight.title": "字体粗细", "list_tile.google_drive_api.subtitle_args": "{REQUESTS_COUNT} 个请求", "list_tile.google_drive_api.title": "谷歌云端硬盘API", "list_tile.import_backup.subtitle": "将备份从您的设备导入到 {APP_NAME}", "list_tile.import_backup.title": "导入备份", + "list_tile.join_reddit.message": "分享经验、提供反馈并保持更新!", + "list_tile.join_reddit.title": "在 Reddit 上加入我们", "list_tile.licenses.title": "许可证", "list_tile.moved_to_bin_at.title": "已移至垃圾箱", "list_tile.privacy_policy.title": "隐私政策", @@ -184,6 +187,7 @@ "page.backups.title": "备份", "page.changes_history.title": "变更历史", "page.changes_history.too_many_changes_warning_message": "您已存储 {CHANGES_COUNT} 项更改,占用了大量空间。你应该删除一些。", + "page.community.title": "社区", "page.edit_tag.title": "新标签", "page.fonts.title": "字体", "page.home.app_bar.hello_nickname": "你好{NICKNAME}",