Skip to content

Commit

Permalink
增加中英双语支持!
Browse files Browse the repository at this point in the history
  • Loading branch information
iHTCboy committed Mar 7, 2021
1 parent 072722d commit 8c4fecb
Show file tree
Hide file tree
Showing 28 changed files with 2,044 additions and 236 deletions.
18 changes: 6 additions & 12 deletions app/android/app/src/main/assets/privacy_policy.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ <h2>我们可能收集的信息</h2>
</p>
<h2>您提供的信息</h2>

<p>您在使用我们的服务时,向我们提供的相关个人信息,例如电话号码、电子邮件或银行卡号等
<br/>您通过我们的服务向其他方提供的共享信息,以及您使用我们的服务时所储存的信息。
<p>您在使用我们的服务时,向我们提供的相关个人信息,例如电子邮件或评论内容等
<br/>您通过我们的服务向其他方提供的分享,以及您使用我们的服务时所储存的信息。
</p>

<h2>其他方分享的您的信息</h2>
Expand All @@ -46,7 +46,7 @@ <h2>我们可能如何使用信息</h2>
<br/></p>
<p>
为了让您有更好的体验、改善我们的服务或您同意的其他用途,在符合相关法律法规的前提下,我们可能将通过某一项服务所收集的信息,以汇集信息或者个性化的方式,用于我们的其他服务。例如,在您使用我们的一项服务时所收集的信息,可能在另一服务中用于向您提供特定内容,或向您展示与您相关的、非普遍推送的信息。如果我们在相关服务中提供了相应选项,您也可以授权我们将该服务所提供和储存的信息用于我们的其他服务。
<br/>我们将尽一切可能采取适当的技术手段,保证您可以访问、更新和更正自己的注册信息或使用我们的服务时提供的其他个人信息。在访问、更新、更正和删除前述信息时,我们可能会要求您进行身份验证,以保障账户安全。
<br/>我们将尽一切可能采取适当的技术手段,保证您可以访问、更新和更正自己的注册信息或使用我们的服务时提供的其他个人信息。
</p>

<h2>信息安全</h2>
Expand All @@ -57,21 +57,15 @@ <h2>信息安全</h2>
<h3>您分享的信息</h3>

<p>
我们的多项服务,可让您不仅与自己的社交网络,也与使用该服务的所有用户公开分享您的相关信息,例如,您在我们的服务中所上传或发布的信息(包括您公开的个人信息、您建立的名单)、您对其他人上传或发布的信息作出的回应,以及包括与这些信息有关的位置数据和日志信息。使用我们服务的其他用户也有可能分享与您有关的信息(包括位置数据和日志信息)。特别是,我们的社交媒体服务,是专为使您与世界各地的用户共享信息而设计,您可以使共享信息实时、广泛地传递。只要您不删除共享信息,有关信息会一直留存在公共领域;即使您删除共享信息,有关信息仍可能由其他用户或不受我们控制的非关联第三方独立地缓存、复制或储存,或由其他用户或该等第三方在公共领域保存。
<br/>因此,请您谨慎考虑通过我们的服务上传、发布和交流的信息内容。在一些情况下,您可通过我们某些服务的隐私设定来控制有权浏览您共享信息的用户范围。如要求从我们的服务中删除您的相关信息,请通过该等特别服务条款提供的方式操作
我们的多项服务,可让您不仅与自己的社交网络,也与使用该服务的所有用户公开分享您的相关信息,例如,您在我们的服务中所上传或发布的信息(包括您公开的个人信息、您建立的任务)、您对其他人上传或发布的信息作出的回应,以及包括与这些信息有关的位置数据和日志信息。使用我们服务的其他用户也有可能分享与您有关的信息(包括位置数据和日志信息)。特别是,我们的社交媒体服务,是专为使您与世界各地的用户共享信息而设计,您可以使共享信息实时、广泛地传递。只要您不删除共享信息,有关信息会一直留存在公共领域;即使您删除共享信息,有关信息仍可能由其他用户或不受我们控制的非关联第三方独立地缓存、复制或储存,或由其他用户或该等第三方在公共领域保存。
<br/>因此,请您谨慎考虑通过我们的服务分享、发布和交流的信息内容。在一些情况下,您可通过我们某些服务的隐私设定来控制有权浏览您共享信息的用户范围。
</p>

<h2>您分享的敏感个人信息</h2>

<p>某些个人信息因其特殊性可能被认为是敏感个人信息,例如您的种族、宗教、个人健康和医疗信息等。相比其他个人信息,敏感个人信息受到更加严格的保护。
<br/>请注意,您在使用我们的服务时所提供、上传或发布的内容和信息(例如有关您社交活动的照片等信息),可能会泄露您的敏感个人信息。您需要谨慎地考虑,是否在使用我们的服务时披露相关敏感个人信息。
<br/>您同意按本《隐私政策》所述的目的和方式来处理您的敏感个人信息。</p>

<h2>隐私政策的适用例外</h2>

<p>我们的服务可能包括或链接至第三方提供的社交媒体或其他服务(包括网站)。例如:
<br/>您利用
“分享”键将某些内容分享到我们的服务,或您利用第三方连线服务登录我们的服务。这些功能可能会收集您的相关信息(包括您的日志信息),并可能在您的电脑装置cookies,从而正常运行上述功能;
“分享”键将某些内容分享的服务,或您利用第三方连线服务登录我们的服务。这些功能可能会收集您的相关信息(包括您的日志信息),并可能在您的电脑装置cookies,从而正常运行上述功能;
<br/>我们通过广告或我们服务的其他方式向您提供链接,使您可以接入第三方的服务或网站。
<br/>该等第三方社交媒体或其他服务可能由相关的第三方或我们运营。您使用该等第三方的社交媒体服务或其他服务(包括您向该等第三方提供的任何个人信息),须受该第三方的服务条款及隐私政策(而非《通用服务条款》或本《隐私政策》)约束,您需要仔细阅读其条款。本《隐私政策》仅适用于我们所收集的信息,并不适用于任何第三方提供的服务或第三方的信息使用规则,我们对任何第三方使用由您提供的信息不承担任何责任。
</p>
Expand Down
4 changes: 2 additions & 2 deletions app/ios/Flutter/flutter_export_environment.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ export "FLUTTER_APPLICATION_PATH=/Users/HTC/Documents/Programing/Flutter/iPomodo
export "FLUTTER_TARGET=/Users/HTC/Documents/Programing/Flutter/iPomodoro-Flutter/app/lib/main.dart"
export "FLUTTER_BUILD_DIR=build"
export "SYMROOT=${SOURCE_ROOT}/../build/ios"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=210228"
export "FLUTTER_BUILD_NAME=1.3.2"
export "FLUTTER_BUILD_NUMBER=210306"
export "DART_DEFINES=Zmx1dHRlci5pbnNwZWN0b3Iuc3RydWN0dXJlZEVycm9ycz10cnVl,RkxVVFRFUl9XRUJfQVVUT19ERVRFQ1Q9dHJ1ZQ=="
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true"
Expand Down
10 changes: 5 additions & 5 deletions app/lib/common/channel/native_method_channel.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'package:flutter/services.dart';
import 'package:iPomodoro/config/app_config.dart';


//调用原生方法
class NativeChannel {
Expand Down Expand Up @@ -37,22 +37,22 @@ class NativeChannel {
}
}

static Future shareApp() async {
static Future shareApp(String url, String content) async {
const platform = const MethodChannel('iPomodoro');
var result;
try {
result = await platform.invokeMethod('shareApp', {'url': AppConfig.AppAppStoreUrl, 'content': AppConfig.AppShareText});
result = await platform.invokeMethod('shareApp', {'url': url, 'content': content});
return Future.value(result);
} on PlatformException catch (e) {
return Future.error(e.toString());
}
}

static Future emailConnect() async {
static Future emailConnect(String appname, String email) async {
const platform = const MethodChannel('iPomodoro');
var result;
try {
result = await platform.invokeMethod('email', {'appname': AppConfig.AppName, 'email': AppConfig.kEmail});
result = await platform.invokeMethod('email', {'appname': appname, 'email': email});
return Future.value(result);
} on PlatformException catch (e) {
return Future.error(e.toString());
Expand Down
1 change: 1 addition & 0 deletions app/lib/common/utils/config_storage.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class AppStorage {
static const String K_STRING_CUNTDOWN_ORDER_INDEX = "k_string_countdown_order_idex";
static const String K_STRING_POMODORO_NOTIFICATION = "k_string_pomodoro_notification";
static const String K_STRING_TIMERT_NOTIFICATION = "k_string_timer_notification";
static const String K_STRING_LANGUAGE_SETTINGS = "k_string_language_settings";


static Future<bool> setInt(String key, int value) async {
Expand Down
2 changes: 1 addition & 1 deletion app/lib/common/utils/database_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ class DataBaseUtils {
//获取数据库路径
var databasesPath = await getDatabasesPath();
String path = join(databasesPath, dbName);
debugPrint("数据库路径:$path数据库版本$vers");
debugPrint("DataBase:$path ,version:$vers");
//打开数据库
_database = await openDatabase(path,
version: vers,
Expand Down
3 changes: 0 additions & 3 deletions app/lib/config/app_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,7 @@ class AppConfig {
static const AppPlayStoreUrl = "https://play.google.com/store/apps/details?id=" + AppPackageName;
static const AppGitHubUrl = "https://github.com/iHTCboy/iPomodoro-Flutter";
static const AppLicenseUrl = "https://raw.githubusercontent.com/iHTCboy/iPomodoro-Flutter/master/LICENSE";
static const AppShareText = "Hello, ${AppName}! 这是一款番茄时间管理规划的App,不再分心!不再拖延!高效!专注!学习必备的好工具哦!iOS下载链接:${AppAppStoreUrl}";
static const kiHTCboyUrl = "https://ihtcboy.com";
static const kiHTCboyer = "https://apps.apple.com/cn/developer/iHTCboy/id914453386";
static const kEmail = "[email protected]";
static const kAppDesc = "番茄时间管理和学习规划,妈妈再也不用担心我的学习啦!不再分心!不再拖延!高效!专注!,让大家在学习时可以更加专注也可以快速和简单的学习get! \n \n"
"1、番茄学习模式,使用番茄工作法学习,让你劳逸结合!\n2、计时学习模式,按照设定的时长学习,想学多久就学多久!\n3、定时任务模式,倒数日、任务记录,每日学习任务!杜绝学习没有目标!满足你对学习的求知欲望!";
}
67 changes: 67 additions & 0 deletions app/lib/generated/intl/messages_all.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// 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;
import 'messages_zh.dart' as messages_zh;

typedef Future<dynamic> LibraryLoader();
Map<String, LibraryLoader> _deferredLibraries = {
'en': () => new Future.value(null),
'zh': () => new Future.value(null),
};

MessageLookupByLibrary _findExact(String localeName) {
switch (localeName) {
case 'en':
return messages_en.messages;
case 'zh':
return messages_zh.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);
}
Loading

0 comments on commit 8c4fecb

Please sign in to comment.