commit 058977dd74fb1ca710c8d146d9ed7f76d5218fac
Author: jiahao <283739569@qq.com>
Date: Mon Mar 16 14:24:08 2020 +0800
1
diff --git a/.flutter-plugins-dependencies b/.flutter-plugins-dependencies
new file mode 100644
index 0000000..3616769
--- /dev/null
+++ b/.flutter-plugins-dependencies
@@ -0,0 +1 @@
+{"_info":"// This is a generated file; do not edit or check into version control.","dependencyGraph":[{"name":"agora_rtc_engine","dependencies":[]},{"name":"amap_location","dependencies":[]},{"name":"android_intent","dependencies":[]},{"name":"app_installer","dependencies":[]},{"name":"apple_sign_in","dependencies":[]},{"name":"audioplayer","dependencies":[]},{"name":"auto_orientation","dependencies":[]},{"name":"city_pickers","dependencies":[]},{"name":"connectivity","dependencies":[]},{"name":"easy_contact_picker","dependencies":[]},{"name":"file_picker","dependencies":[]},{"name":"flutter_app_badger","dependencies":[]},{"name":"flutter_audio_recorder","dependencies":[]},{"name":"flutter_bugly","dependencies":[]},{"name":"flutter_facebook_login","dependencies":[]},{"name":"flutter_ijkplayer","dependencies":[]},{"name":"flutter_image_compress","dependencies":[]},{"name":"flutter_inapp_purchase","dependencies":[]},{"name":"flutter_local_notifications","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_qr_reader","dependencies":["image_picker"]},{"name":"flutter_webview_plugin","dependencies":[]},{"name":"fluwx_no_pay","dependencies":[]},{"name":"geolocator","dependencies":["google_api_availability","location_permissions"]},{"name":"google_api_availability","dependencies":[]},{"name":"google_maps_flutter","dependencies":[]},{"name":"image_cropper","dependencies":[]},{"name":"image_gallery_saver","dependencies":[]},{"name":"image_picker","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"jpush_flutter","dependencies":[]},{"name":"keyboard_utils","dependencies":[]},{"name":"location","dependencies":[]},{"name":"location_permissions","dependencies":[]},{"name":"open_file","dependencies":[]},{"name":"package_info","dependencies":[]},{"name":"path_provider","dependencies":[]},{"name":"permission_handler","dependencies":[]},{"name":"photo_manager","dependencies":[]},{"name":"receive_sharing_intent","dependencies":[]},{"name":"share","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_macos","shared_preferences_web"]},{"name":"shared_preferences_macos","dependencies":[]},{"name":"shared_preferences_web","dependencies":[]},{"name":"sqflite","dependencies":[]},{"name":"url_launcher","dependencies":[]},{"name":"video_player","dependencies":[]},{"name":"video_thumbnail","dependencies":[]},{"name":"wifi_info_plugin","dependencies":[]}]}
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..aa35107
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,72 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+.dart_tool/
+.flutter-plugins
+.packages
+.pub-cache/
+.pub/
+/build/
+
+# Android related
+**/android/**/gradle-wrapper.jar
+**/android/.gradle
+**/android/captures/
+**/android/gradlew
+**/android/gradlew.bat
+**/android/local.properties
+**/android/**/GeneratedPluginRegistrant.java
+
+# iOS/XCode related
+**/ios/**/*.mode1v3
+**/ios/**/*.mode2v3
+**/ios/**/*.moved-aside
+**/ios/**/*.pbxuser
+**/ios/**/*.perspectivev3
+**/ios/**/*sync/
+**/ios/**/.sconsign.dblite
+**/ios/**/.tags*
+**/ios/**/.vagrant/
+**/ios/**/DerivedData/
+**/ios/**/Icon?
+**/ios/**/Pods/
+**/ios/**/.symlinks/
+**/ios/**/profile
+**/ios/**/xcuserdata
+**/ios/.generated/
+**/ios/Flutter/App.framework
+**/ios/Flutter/Flutter.framework
+**/ios/Flutter/Generated.xcconfig
+**/ios/Flutter/app.flx
+**/ios/Flutter/app.zip
+**/ios/Flutter/flutter_assets/
+**/ios/ServiceDefinitions.json
+**/ios/Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!**/ios/**/default.mode1v3
+!**/ios/**/default.mode2v3
+!**/ios/**/default.pbxuser
+!**/ios/**/default.perspectivev3
+!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
diff --git a/.metadata b/.metadata
new file mode 100644
index 0000000..4d08967
--- /dev/null
+++ b/.metadata
@@ -0,0 +1,10 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: b712a172f9694745f50505c93340883493b505e5
+ channel: stable
+
+project_type: app
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..cd71c14
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+# chat
+
+A new Flutter project.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
+
+For help getting started with Flutter, view our
+[online documentation](https://flutter.dev/docs), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/android/.project b/android/.project
new file mode 100644
index 0000000..549de72
--- /dev/null
+++ b/android/.project
@@ -0,0 +1,17 @@
+
+
+ android
+ Project android created by Buildship.
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectnature
+
+
diff --git a/android/app/.classpath b/android/app/.classpath
new file mode 100644
index 0000000..4f3f504
--- /dev/null
+++ b/android/app/.classpath
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/android/app/.project b/android/app/.project
new file mode 100644
index 0000000..d1eb8cb
--- /dev/null
+++ b/android/app/.project
@@ -0,0 +1,23 @@
+
+
+ app
+ Project app created by Buildship.
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.buildship.core.gradleprojectbuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.buildship.core.gradleprojectnature
+
+
diff --git a/android/app/.settings/org.eclipse.buildship.core.prefs b/android/app/.settings/org.eclipse.buildship.core.prefs
new file mode 100644
index 0000000..a7b84d9
--- /dev/null
+++ b/android/app/.settings/org.eclipse.buildship.core.prefs
@@ -0,0 +1,2 @@
+connection.project.dir=..
+eclipse.preferences.version=1
diff --git a/android/app/agconnect-services.json b/android/app/agconnect-services.json
new file mode 100644
index 0000000..abbd909
--- /dev/null
+++ b/android/app/agconnect-services.json
@@ -0,0 +1,26 @@
+{
+ "agcgw":{
+ "backurl":"connect-dra.dbankcloud.cn",
+ "url":"connect-dra.hispace.hicloud.com"
+ },
+ "client":{
+ "cp_id":"890086000300385560",
+ "product_id":"9105385871708389411",
+ "client_id":"270664671340528640",
+ "client_secret":"00CC308FC014C334D58CF79471B490FD6274BC39FEAAD89B63E762871DB4EBCC",
+ "app_id":"101598177",
+ "package_name":"com.cyhd.henhoandroid"
+ },
+ "service":{
+ "analytics":{
+ "collector_url":"datacollector-dra.dt.hicloud.com,datacollector-dra.dt.dbankcloud.cn",
+ "resource_id":"p1",
+ "channel_id":""
+ },
+ "ml":{
+ "mlservice_url":"ml-api-dra.ai.hicloud.com,ml-api-dra.ai.dbankcloud.cn"
+ }
+ },
+ "region":"SG",
+ "configuration_version":"1.0"
+}
\ No newline at end of file
diff --git a/android/app/build.gradle b/android/app/build.gradle
new file mode 100644
index 0000000..73e1601
--- /dev/null
+++ b/android/app/build.gradle
@@ -0,0 +1,156 @@
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader('UTF-8') { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterRoot = localProperties.getProperty('flutter.sdk')
+if (flutterRoot == null) {
+ throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
+}
+
+def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+if (flutterVersionCode == null) {
+ flutterVersionCode = '1'
+}
+
+def flutterVersionName = localProperties.getProperty('flutter.versionName')
+if (flutterVersionName == null) {
+ flutterVersionName = '1.0'
+}
+
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlin-android'
+apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
+apply plugin: 'com.google.gms.google-services'
+apply plugin: 'com.huawei.agconnect'
+android {
+ compileSdkVersion 28
+
+ lintOptions {
+ disable 'InvalidPackage'
+ }
+
+ signingConfigs {
+
+ release {
+ keyAlias 'cyhd'
+ keyPassword '@)!&8888cyhd'
+ storeFile file('../cyhdSign')
+ storePassword '@)!&8888cyhd'
+ }
+ }
+
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId "com.cyhd.henhoandroid"
+ minSdkVersion 21
+ targetSdkVersion 28
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ // manifestPlaceholders = [
+ // AMAP_KEY : "1fd4e93e3b4b13747da41f484c955fe2", /// 高德地图key
+ // ]
+ ndk {
+ abiFilters 'armeabi-v7a'
+ }
+ multiDexEnabled true
+ manifestPlaceholders = [
+ JPUSH_PKGNAME : 'com.cyhd.henhoandroid',
+ JPUSH_APPKEY : "13dd603952a6632d1dd3ac54", // NOTE: JPush 上注册的包名对应的 Appkey.
+ JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
+
+ AMAP_KEY : "1fd4e93e3b4b13747da41f484c955fe2", /// 高德地图key
+
+ XIAOMI_APPKEY:"MI-5221829498125",//小米平台注册的appkey
+ XIAOMI_APPID:"MI-2882303761518294125",//小米平台注册的appid
+//
+ HUAWEI_APPID:"101598177",//华为平台注册的appid
+
+
+ OPPO_APPKEY : "OP-cd9ece5049514019842f54d537068018", // OPPO平台注册的appkey
+ OPPO_APPID : "OP-30233397", // OPPO平台注册的appid
+ OPPO_APPSECRET: "OP-您的应用对应OPPO的APPSECRET",//OPPO平台注册的appsecret
+
+//
+// MEIZU_APPKEY:"MZ-您的应用对应的魅族appkey",//魅族平台注册的appkey
+// MEIZU_APPID:"MZ-您的应用对应魅族的appid",//魅族平台注册的appid
+
+ ]
+ }
+
+ buildTypes {
+ release {
+// minifyEnabled true //混淆
+// proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+// shrinkResources false
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ shrinkResources false
+ }
+ debug {
+ signingConfig signingConfigs.release
+ minifyEnabled false
+ shrinkResources false
+ }
+ }
+
+
+}
+
+flutter {
+ source '../..'
+}
+
+subprojects {
+ project.configurations.all {
+ resolutionStrategy.eachDependency { details ->
+ if (details.requested.group == 'com.android.support'
+ && !details.requested.name.contains('multidex') ) {
+ details.useVersion "27.1.1"
+ }
+
+ if (details.requested.group == 'androidx.core'
+ && !details.requested.name.contains('androidx') ) {
+
+ }
+ }
+ }
+}
+
+
+dependencies {
+
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.2'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ //implementation 'com.amap.api:location:latest.integration'
+ implementation 'com.android.support:multidex:1.0.3'
+
+
+ //接入厂商推送-跟jpush插件版本要配套
+ implementation 'cn.jiguang.sdk.plugin:xiaomi:3.3.4'
+// implementation 'cn.jiguang.sdk.plugin:huawei:3.3.4'
+
+
+ implementation 'com.huawei.hms:push:3.0.3.301'
+ implementation files('src/main/libs/jpush-android-plugin-huawei-v3.5.4.jar')
+
+// implementation'cn.jiguang.sdk.plugin:meizu:3.4.1'//JPushSDK3.4.1
+ implementation 'com.google.firebase:firebase-messaging:17.3.4'
+
+ implementation files('src/main/libs/jpush-android-plugin-fcm-v3.5.4.jar')
+
+ implementation 'cn.jiguang.sdk.plugin:oppo:3.3.4'
+ compile "androidx.core:core-ktx:+"
+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+
+}
+repositories {
+ mavenCentral()
+}
diff --git a/android/app/google-services.json b/android/app/google-services.json
new file mode 100644
index 0000000..a471004
--- /dev/null
+++ b/android/app/google-services.json
@@ -0,0 +1,40 @@
+{
+ "project_info": {
+ "project_number": "151024159565",
+ "firebase_url": "https://hi-cyhd.firebaseio.com",
+ "project_id": "hi-cyhd",
+ "storage_bucket": "hi-cyhd.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:151024159565:android:cfc78480e0b6c10e730504",
+ "android_client_info": {
+ "package_name": "com.cyhd.henhoandroid"
+ }
+ },
+ "oauth_client": [
+ {
+ "client_id": "151024159565-62j3d7gvusqusksu8dehjd7v6eq0g6he.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
+ "api_key": [
+ {
+ "current_key": "AIzaSyB676Y2P0xOg7qFlhOOI_wuMhrqI32AN1I"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": [
+ {
+ "client_id": "151024159565-62j3d7gvusqusksu8dehjd7v6eq0g6he.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
\ No newline at end of file
diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 0000000..e5f10cd
--- /dev/null
+++ b/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..f7305f0
--- /dev/null
+++ b/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/java/com/cyhd/henhoandroid/MainActivity.java b/android/app/src/main/java/com/cyhd/henhoandroid/MainActivity.java
new file mode 100644
index 0000000..12b9509
--- /dev/null
+++ b/android/app/src/main/java/com/cyhd/henhoandroid/MainActivity.java
@@ -0,0 +1,31 @@
+package com.cyhd.henhoandroid;
+import android.os.Bundle;
+import android.util.Log;
+
+import com.cyhd.henhoandroid.plugin.FlutterWindowManagerPlugin;
+
+import io.flutter.app.FlutterActivity;
+import io.flutter.plugins.GeneratedPluginRegistrant;
+import com.cyhd.henhoandroid.plugin.ScreenShot;
+import com.google.android.gms.common.ConnectionResult;
+import com.google.android.gms.common.GoogleApiAvailability;
+import com.xiaomi.mipush.sdk.MiPushClient;
+
+public class MainActivity extends FlutterActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ GeneratedPluginRegistrant.registerWith(this);
+ FlutterWindowManagerPlugin.registerWith(registrarFor("io.adaptant.labs.flutter_windowmanager.FlutterWindowManagerPlugin"));
+ ScreenShot.registerWith(this, registrarFor("make.photo.screen.hibok"));
+
+
+
+
+ }
+
+
+
+
+
+}
diff --git a/android/app/src/main/java/com/cyhd/henhoandroid/plugin/FlutterWindowManagerPlugin.java b/android/app/src/main/java/com/cyhd/henhoandroid/plugin/FlutterWindowManagerPlugin.java
new file mode 100644
index 0000000..e70a76f
--- /dev/null
+++ b/android/app/src/main/java/com/cyhd/henhoandroid/plugin/FlutterWindowManagerPlugin.java
@@ -0,0 +1,123 @@
+package com.cyhd.henhoandroid.plugin;
+
+import android.app.Activity;
+import android.os.Build;
+import android.util.Log;
+import android.view.WindowManager;
+
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
+import io.flutter.plugin.common.MethodChannel.Result;
+import io.flutter.plugin.common.PluginRegistry.Registrar;
+
+/** FlutterWindowManagerPlugin */
+public class FlutterWindowManagerPlugin implements MethodCallHandler {
+ private final Activity activity;
+
+ private FlutterWindowManagerPlugin(Registrar registrar) {
+ this.activity = registrar.activity();
+ }
+
+ /** Plugin registration. */
+ public static void registerWith(Registrar registrar) {
+ final MethodChannel channel = new MethodChannel(registrar.messenger(), "flutter_windowmanager");
+ FlutterWindowManagerPlugin instance = new FlutterWindowManagerPlugin(registrar);
+ channel.setMethodCallHandler(instance);
+ }
+
+ /**
+ * Validate flag specification against WindowManager.LayoutParams and API levels, as per:
+ * https://developer.android.com/reference/android/view/WindowManager.LayoutParams
+ */
+ @SuppressWarnings("deprecation")
+ private boolean validLayoutParam(int flag) {
+ switch (flag) {
+ case WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON:
+ case WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM:
+ case WindowManager.LayoutParams.FLAG_DIM_BEHIND:
+ case WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN:
+ case WindowManager.LayoutParams.FLAG_FULLSCREEN:
+ case WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED:
+ case WindowManager.LayoutParams.FLAG_IGNORE_CHEEK_PRESSES:
+ case WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON:
+ case WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR:
+ case WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN:
+ case WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS:
+ case WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE:
+ case WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE:
+ case WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL:
+ case WindowManager.LayoutParams.FLAG_SCALED:
+ case WindowManager.LayoutParams.FLAG_SECURE:
+ case WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER:
+ case WindowManager.LayoutParams.FLAG_SPLIT_TOUCH:
+ case WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH:
+ return true;
+ case WindowManager.LayoutParams.FLAG_BLUR_BEHIND:
+ return !(Build.VERSION.SDK_INT >= 15);
+ case WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD:
+ return (Build.VERSION.SDK_INT >= 5 && Build.VERSION.SDK_INT < 26);
+ case WindowManager.LayoutParams.FLAG_DITHER:
+ return !(Build.VERSION.SDK_INT >= 17);
+ case WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS:
+ return (Build.VERSION.SDK_INT >= 21);
+ case WindowManager.LayoutParams.FLAG_LAYOUT_ATTACHED_IN_DECOR:
+ return (Build.VERSION.SDK_INT >= 22);
+ case WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN:
+ return (Build.VERSION.SDK_INT >= 18);
+ case WindowManager.LayoutParams.FLAG_LOCAL_FOCUS_MODE:
+ return (Build.VERSION.SDK_INT >= 19);
+ case WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED:
+ return !(Build.VERSION.SDK_INT >= 27);
+ case WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING:
+ return !(Build.VERSION.SDK_INT >= 20);
+ case WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION:
+ case WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS:
+ return (Build.VERSION.SDK_INT >= 19);
+ case WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON:
+ return !(Build.VERSION.SDK_INT >= 27);
+ default:
+ return false;
+ }
+ }
+
+ private boolean validLayoutParams(Result result, int flags) {
+ for (int i = 0; i < Integer.SIZE; i++) {
+ int flag = (1 << i);
+ if ((flags & flag) == 1) {
+ if (!validLayoutParam(flag)) {
+ result.error("FlutterWindowManagerPlugin","FlutterWindowManagerPlugin: invalid flag specification: " + Integer.toHexString(flag), null);
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onMethodCall(MethodCall call, Result result) {
+ final int flags = call.argument("flags");
+
+ if (activity == null) {
+ result.error("FlutterWindowManagerPlugin", "FlutterWindowManagerPlugin: ignored flag state change, current activity is null", null);
+ }
+
+ if (!validLayoutParams(result, flags)) {
+ return;
+ }
+
+ switch (call.method) {
+ case "addFlags":
+ activity.getWindow().addFlags(flags);
+ result.success(true);
+ break;
+ case "clearFlags":
+ activity.getWindow().clearFlags(flags);
+ result.success(true);
+ break;
+ default:
+ result.notImplemented();
+ }
+ }
+}
diff --git a/android/app/src/main/java/com/cyhd/henhoandroid/plugin/ScreenShot.java b/android/app/src/main/java/com/cyhd/henhoandroid/plugin/ScreenShot.java
new file mode 100644
index 0000000..a410410
--- /dev/null
+++ b/android/app/src/main/java/com/cyhd/henhoandroid/plugin/ScreenShot.java
@@ -0,0 +1,216 @@
+package com.cyhd.henhoandroid.plugin;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.util.Log;
+
+import com.google.android.gms.common.ConnectionResult;
+import com.google.android.gms.common.GoogleApiAvailability;
+
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import io.flutter.plugin.common.MethodCall;
+import io.flutter.plugin.common.MethodChannel;
+import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
+import io.flutter.plugin.common.MethodChannel.Result;
+import io.flutter.plugin.common.PluginRegistry.Registrar;
+import io.flutter.view.FlutterView;
+
+/**
+ * ScreenshotShareImagePlugin
+ */
+
+
+public class ScreenShot implements MethodCallHandler {
+
+ private Registrar registrar;
+ private FlutterView flutterView;
+ private MethodChannel channel;
+ private Context context;
+
+ public static double pi = 3.1415926535897932384626;
+ public static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
+
+
+ public ScreenShot(Context context, Registrar registrar, FlutterView flutterView, MethodChannel channel) {
+ this.context = context;
+ this.registrar = registrar;
+ this.flutterView = flutterView;
+ this.channel = channel;
+ this.channel.setMethodCallHandler(this);
+ }
+
+
+ /**
+ * Plugin registration.
+ */
+ public static void registerWith(Context context, Registrar registrar) {
+
+ final MethodChannel channel = new MethodChannel(registrar.messenger(), "make.photo.screen.hibok");
+ channel.setMethodCallHandler(new ScreenShot(context, registrar, registrar.view(), channel));
+ }
+
+ @Override
+ public void onMethodCall(MethodCall call, Result result) {
+ if (call.method.equals("makePhotoScreen")) {
+ takeScreenshot(result);
+ } else if (call.method.equals("getListForMap")) {
+ getOtherMapApp(result);
+ } else if (call.method.equals("openMapForOth")) {
+
+ String mapType = call.argument("mapType");
+ ArrayList lanLng = call.argument("latLng");
+ String address = call.argument("address");
+
+ Log.d("1", "地址参数 " + address);
+ openMapForOth(mapType, lanLng, address);
+ } else if(call.method.equals("isSupportGoogle")){
+ result.success(onCheckGooglePlayServices());
+ }
+ else {
+ result.notImplemented();
+ }
+ }
+
+ private void getOtherMapApp(Result result) {
+
+
+ //获取packagemanager
+ final PackageManager packageManager = context.getPackageManager();
+ //获取所有已安装程序的包信息
+ List packageInfos = packageManager.getInstalledPackages(0);
+ //用于存储所有已安装程序的包名
+ List packageNames = new ArrayList();
+ //从pinfo中将包名字逐一取出,压入pName list中
+ if (packageInfos != null) {
+ for (int i = 0; i < packageInfos.size(); i++) {
+ String packName = packageInfos.get(i).packageName;
+ packageNames.add(packName);
+ }
+ }
+
+ ArrayList mapList = new ArrayList();
+ if (packageNames.contains("com.baidu.BaiduMap")) {
+ mapList.add("baidu");
+ }
+
+ if (packageNames.contains("com.autonavi.minimap")) {
+ mapList.add("minimap");
+ }
+
+ if (packageNames.contains("com.google.android.apps.maps")) {
+ mapList.add("google");
+ }
+
+ result.success(mapList);
+ }
+
+ private void openMapForOth(String mapType, ArrayList latLng, String address) {
+
+ Log.d("1", mapType);
+ if (mapType.equals("minimap")) {
+
+ Log.d("1", "打开高德地图 " + address);
+ String uri = String.format("androidamap://viewReGeo?sourceApplication=amap&lat=%f&lon=%f&dev=1", latLng.get(0), latLng.get(1));
+
+ Intent intent = new Intent();
+ intent.setAction(Intent.ACTION_VIEW);
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ intent.setPackage("com.autonavi.minimap");
+ intent.setData(Uri.parse(uri));
+
+ context.startActivity(intent);
+ } else if (mapType.equals("baidu")) {
+ Log.d("1", "打开百度地图");
+ double[] location = gcj02_To_Bd09((double) latLng.get(0), (double) latLng.get(1));
+ String uri = String.format("baidumap://map/geocoder?location=%f,%f&src=com.cyhd.henhoandroid",
+ location[0], location[1]);
+ Intent intent = new Intent();
+ intent.setData(Uri.parse(uri));
+ context.startActivity(intent);
+ } else if (mapType.equals("google")) {
+ Log.d("1", "打开谷歌地图" + address);
+ String gmmIntentUri = String.format("https://ditu.google.com/maps/dir/?q=%f,%f&destination=%s",
+ latLng.get(0), latLng.get(1), address);
+
+ Intent mapIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(gmmIntentUri));
+ mapIntent.setPackage("com.google.android.apps.maps");
+ context.startActivity(mapIntent);
+ }
+
+ }
+
+ /**
+ * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换算法 将 GCJ-02 坐标转换成 BD-09 坐标
+ *
+ * @param lat
+ * @param lon
+ */
+ private double[] gcj02_To_Bd09(double lat, double lon) {
+ double x = lon, y = lat;
+ double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
+ double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
+ double tempLon = z * Math.cos(theta) + 0.0065;
+ double tempLat = z * Math.sin(theta) + 0.006;
+ double[] gps = {tempLat, tempLon};
+ return gps;
+ }
+
+ private void takeScreenshot(Result result) {
+ try {
+ Bitmap bitmap = flutterView.getBitmap();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ boolean isSuccess = bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos);
+ result.success(isSuccess ? baos.toByteArray() : "");
+ } catch (Throwable e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ /**
+ * 检查 Google Play 服务
+ */
+ private boolean onCheckGooglePlayServices() {
+ // 验证是否已在此设备上安装并启用Google Play服务,以及此设备上安装的旧版本是否为此客户端所需的版本
+ int code = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context);
+ if (code == ConnectionResult.SUCCESS) {
+ // 支持Google服务
+ return true;
+ } else {
+ return false;
+// /**
+// * 依靠 Play 服务 SDK 运行的应用在访问 Google Play 服务功能之前,应始终检查设备是否拥有兼容的 Google Play 服务 APK。
+// * 我们建议您在以下两个位置进行检查:主 Activity 的 onCreate() 方法中,及其 onResume() 方法中。
+// * onCreate() 中的检查可确保该应用在检查成功之前无法使用。
+// * onResume() 中的检查可确保当用户通过一些其他方式返回正在运行的应用(比如通过返回按钮)时,检查仍将继续进行。
+// * 如果设备没有兼容的 Google Play 服务版本,您的应用可以调用以下方法,以便让用户从 Play 商店下载 Google Play 服务。
+// * 它将尝试在此设备上提供Google Play服务。如果Play服务已经可用,则Task可以立即完成返回。
+// */
+// GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(this);
+//
+// // 或者使用以下代码
+//
+// /**
+// * 通过isUserResolvableError来确定是否可以通过用户操作解决错误
+// */
+// if (GoogleApiAvailability.getInstance().isUserResolvableError(code)) {
+// /**
+// * 返回一个对话框,用于解决提供的errorCode。
+// * @param activity 用于创建对话框的父活动
+// * @param code 通过调用返回的错误代码
+// * @param activity 调用startActivityForResult时给出的requestCode
+// */
+// GoogleApiAvailability.getInstance().getErrorDialog(this, code, 200).show();
+// }
+
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/android/app/src/main/libs/jpush-android-plugin-fcm-v3.5.4.jar b/android/app/src/main/libs/jpush-android-plugin-fcm-v3.5.4.jar
new file mode 100644
index 0000000..684d55d
Binary files /dev/null and b/android/app/src/main/libs/jpush-android-plugin-fcm-v3.5.4.jar differ
diff --git a/android/app/src/main/libs/jpush-android-plugin-huawei-v3.5.4.jar b/android/app/src/main/libs/jpush-android-plugin-huawei-v3.5.4.jar
new file mode 100644
index 0000000..3de52bd
Binary files /dev/null and b/android/app/src/main/libs/jpush-android-plugin-huawei-v3.5.4.jar differ
diff --git a/android/app/src/main/res/drawable/ic_launcher_1.png b/android/app/src/main/res/drawable/ic_launcher_1.png
new file mode 100644
index 0000000..fb234ee
Binary files /dev/null and b/android/app/src/main/res/drawable/ic_launcher_1.png differ
diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 0000000..8403758
--- /dev/null
+++ b/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_1.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_1.png
new file mode 100644
index 0000000..bc7a622
Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_1.png differ
diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_1.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_1.png
new file mode 100644
index 0000000..d712178
Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_1.png differ
diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_1.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_1.png
new file mode 100644
index 0000000..4234a90
Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_1.png differ
diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_1.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_1.png
new file mode 100644
index 0000000..524510e
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_1.png differ
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_1.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_1.png
new file mode 100644
index 0000000..954d29a
Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_1.png differ
diff --git a/android/app/src/main/res/values/string.xml b/android/app/src/main/res/values/string.xml
new file mode 100644
index 0000000..e539bfc
--- /dev/null
+++ b/android/app/src/main/res/values/string.xml
@@ -0,0 +1,13 @@
+
+
+ HiBok
+
+
+ 473720630090702
+
+
+ fb473720630090702
+
\ No newline at end of file
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..4c57322
--- /dev/null
+++ b/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,8 @@
+
+
+
+
diff --git a/android/app/src/main/res/xml/file_paths.xml b/android/app/src/main/res/xml/file_paths.xml
new file mode 100644
index 0000000..c93af76
--- /dev/null
+++ b/android/app/src/main/res/xml/file_paths.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 0000000..651c1ec
--- /dev/null
+++ b/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/android/build.gradle b/android/build.gradle
new file mode 100644
index 0000000..eb74505
--- /dev/null
+++ b/android/build.gradle
@@ -0,0 +1,88 @@
+buildscript {
+ ext.kotlin_version = '1.3.61'
+ repositories {
+ google()
+ jcenter()
+// maven { url 'https://maven.aliyun.com/repository/google' }
+// maven{ url 'https://maven.aliyun.com/repository/jcenter'}
+ maven {
+ url 'http://download.flutter.io'
+ }
+ maven { url 'http://developer.huawei.com/repo/'}
+
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.2.1'
+ classpath 'com.google.gms:google-services:4.2.0'
+ classpath 'com.huawei.agconnect:agcp:1.0.0.300'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+// maven { url 'https://maven.aliyun.com/repository/google' }
+// maven{ url 'https://maven.aliyun.com/repository/jcenter'}
+ maven {
+ url 'http://download.flutter.io'
+ }
+ maven { url'http://developer.huawei.com/repo/'}
+
+ }
+}
+
+rootProject.buildDir = '../build'
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+ configurations.all {
+ resolutionStrategy {
+ resolutionStrategy.eachDependency { details ->
+ if (details.requested.group == 'androidx.core') {
+ details.useVersion "1.0.1"
+ }
+ if (details.requested.group == 'androidx.lifecycle') {
+ details.useVersion "2.0.0-rc01"
+ }
+ if (details.requested.group == 'androidx.legacy') {
+ details.useVersion "1.0.0-rc01"
+ }
+ if (details.requested.group == 'androidx.versionedparcelable') {
+ details.useVersion "1.0.0"
+ }
+
+ if (details.requested.group == 'com.google.android.gms') {
+ details.useVersion "17.0.0"
+ }
+
+
+ if (details.requested.group == 'androidx.fragment') {
+ details.useVersion "1.0.0"
+ }
+ if (details.requested.group == 'androidx.appcompat') {
+ details.useVersion "1.0.1"
+ }
+
+ if (details.requested.group == 'androidx.annotation') {
+ details.useVersion "1.1.0"
+ }
+
+
+ }
+ }
+ }
+}
+subprojects {
+ project.evaluationDependsOn(':app')
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
+
+
+tasks.withType(JavaCompile) {
+ options.encoding = "UTF-8"
+}
\ No newline at end of file
diff --git a/android/cyhdSign b/android/cyhdSign
new file mode 100644
index 0000000..a92141f
Binary files /dev/null and b/android/cyhdSign differ
diff --git a/android/gradle.properties b/android/gradle.properties
new file mode 100644
index 0000000..7dee586
--- /dev/null
+++ b/android/gradle.properties
@@ -0,0 +1,5 @@
+org.gradle.jvmargs=-Xmx1536M
+android.useAndroidX=true
+android.enableJetifier=true
+
+android.enableR8=true
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..0ff455f
--- /dev/null
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Mon Nov 18 15:39:25 CST 2019
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
diff --git a/android/settings.gradle b/android/settings.gradle
new file mode 100644
index 0000000..4f14f8e
--- /dev/null
+++ b/android/settings.gradle
@@ -0,0 +1,15 @@
+include ':app'
+
+def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
+
+def plugins = new Properties()
+def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
+if (pluginsFile.exists()) {
+ pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
+}
+
+plugins.each { name, path ->
+ def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
+ include ":$name"
+ project(":$name").projectDir = pluginDirectory
+}
diff --git a/android/settings_aar.gradle b/android/settings_aar.gradle
new file mode 100644
index 0000000..3d1d8e6
--- /dev/null
+++ b/android/settings_aar.gradle
@@ -0,0 +1,2 @@
+include ':app'
+
diff --git a/assets/fonts/iconfont.ttf b/assets/fonts/iconfont.ttf
new file mode 100644
index 0000000..24f3210
Binary files /dev/null and b/assets/fonts/iconfont.ttf differ
diff --git a/assets/fonts/uiIconfont.ttf b/assets/fonts/uiIconfont.ttf
new file mode 100644
index 0000000..2d6294c
Binary files /dev/null and b/assets/fonts/uiIconfont.ttf differ
diff --git a/assets/images/2.0x/chat_icon_1.png b/assets/images/2.0x/chat_icon_1.png
new file mode 100644
index 0000000..a64b9d0
Binary files /dev/null and b/assets/images/2.0x/chat_icon_1.png differ
diff --git a/assets/images/2.0x/chat_icon_2.png b/assets/images/2.0x/chat_icon_2.png
new file mode 100644
index 0000000..55b7721
Binary files /dev/null and b/assets/images/2.0x/chat_icon_2.png differ
diff --git a/assets/images/2.0x/chat_icon_3.png b/assets/images/2.0x/chat_icon_3.png
new file mode 100644
index 0000000..5ed91be
Binary files /dev/null and b/assets/images/2.0x/chat_icon_3.png differ
diff --git a/assets/images/2.0x/chat_icon_4.png b/assets/images/2.0x/chat_icon_4.png
new file mode 100644
index 0000000..4a9c42c
Binary files /dev/null and b/assets/images/2.0x/chat_icon_4.png differ
diff --git a/assets/images/2.0x/chat_icon_5.png b/assets/images/2.0x/chat_icon_5.png
new file mode 100644
index 0000000..f007525
Binary files /dev/null and b/assets/images/2.0x/chat_icon_5.png differ
diff --git a/assets/images/2.0x/coin.png b/assets/images/2.0x/coin.png
new file mode 100644
index 0000000..d5dc305
Binary files /dev/null and b/assets/images/2.0x/coin.png differ
diff --git a/assets/images/2.0x/service_icon.png b/assets/images/2.0x/service_icon.png
new file mode 100644
index 0000000..5daf7da
Binary files /dev/null and b/assets/images/2.0x/service_icon.png differ
diff --git a/assets/images/3.0x/chat_icon_1.png b/assets/images/3.0x/chat_icon_1.png
new file mode 100644
index 0000000..b6b4573
Binary files /dev/null and b/assets/images/3.0x/chat_icon_1.png differ
diff --git a/assets/images/3.0x/chat_icon_2.png b/assets/images/3.0x/chat_icon_2.png
new file mode 100644
index 0000000..7ac65c6
Binary files /dev/null and b/assets/images/3.0x/chat_icon_2.png differ
diff --git a/assets/images/3.0x/chat_icon_3.png b/assets/images/3.0x/chat_icon_3.png
new file mode 100644
index 0000000..afe1d6b
Binary files /dev/null and b/assets/images/3.0x/chat_icon_3.png differ
diff --git a/assets/images/3.0x/chat_icon_4.png b/assets/images/3.0x/chat_icon_4.png
new file mode 100644
index 0000000..8ec7dc9
Binary files /dev/null and b/assets/images/3.0x/chat_icon_4.png differ
diff --git a/assets/images/3.0x/chat_icon_5.png b/assets/images/3.0x/chat_icon_5.png
new file mode 100644
index 0000000..8eea895
Binary files /dev/null and b/assets/images/3.0x/chat_icon_5.png differ
diff --git a/assets/images/VIP.png b/assets/images/VIP.png
new file mode 100644
index 0000000..1b7a4f2
Binary files /dev/null and b/assets/images/VIP.png differ
diff --git a/assets/images/back.png b/assets/images/back.png
new file mode 100644
index 0000000..cfb7393
Binary files /dev/null and b/assets/images/back.png differ
diff --git a/assets/images/bg.png b/assets/images/bg.png
new file mode 100644
index 0000000..6474e84
Binary files /dev/null and b/assets/images/bg.png differ
diff --git a/assets/images/bofang.png b/assets/images/bofang.png
new file mode 100644
index 0000000..42664e2
Binary files /dev/null and b/assets/images/bofang.png differ
diff --git a/assets/images/chat/emoji.png b/assets/images/chat/emoji.png
new file mode 100644
index 0000000..a5ef162
Binary files /dev/null and b/assets/images/chat/emoji.png differ
diff --git a/assets/images/chat/icon1.png b/assets/images/chat/icon1.png
new file mode 100644
index 0000000..06e33d4
Binary files /dev/null and b/assets/images/chat/icon1.png differ
diff --git a/assets/images/chat/icon2.png b/assets/images/chat/icon2.png
new file mode 100644
index 0000000..6e50548
Binary files /dev/null and b/assets/images/chat/icon2.png differ
diff --git a/assets/images/chat/icon3.png b/assets/images/chat/icon3.png
new file mode 100644
index 0000000..8976496
Binary files /dev/null and b/assets/images/chat/icon3.png differ
diff --git a/assets/images/chat/icon4.png b/assets/images/chat/icon4.png
new file mode 100644
index 0000000..4cfbe7c
Binary files /dev/null and b/assets/images/chat/icon4.png differ
diff --git a/assets/images/chat/icon5.png b/assets/images/chat/icon5.png
new file mode 100644
index 0000000..d8c479e
Binary files /dev/null and b/assets/images/chat/icon5.png differ
diff --git a/assets/images/chat/icon6.png b/assets/images/chat/icon6.png
new file mode 100644
index 0000000..460bb36
Binary files /dev/null and b/assets/images/chat/icon6.png differ
diff --git a/assets/images/chat/onion.png b/assets/images/chat/onion.png
new file mode 100644
index 0000000..beddf33
Binary files /dev/null and b/assets/images/chat/onion.png differ
diff --git a/assets/images/chat_item_1.png b/assets/images/chat_item_1.png
new file mode 100644
index 0000000..a101aec
Binary files /dev/null and b/assets/images/chat_item_1.png differ
diff --git a/assets/images/chat_item_2.png b/assets/images/chat_item_2.png
new file mode 100644
index 0000000..da2a759
Binary files /dev/null and b/assets/images/chat_item_2.png differ
diff --git a/assets/images/chat_item_3.png b/assets/images/chat_item_3.png
new file mode 100644
index 0000000..e89ecba
Binary files /dev/null and b/assets/images/chat_item_3.png differ
diff --git a/assets/images/chat_item_4.png b/assets/images/chat_item_4.png
new file mode 100644
index 0000000..489021c
Binary files /dev/null and b/assets/images/chat_item_4.png differ
diff --git a/assets/images/chat_item_5.png b/assets/images/chat_item_5.png
new file mode 100644
index 0000000..4e73d27
Binary files /dev/null and b/assets/images/chat_item_5.png differ
diff --git a/assets/images/chat_item_6.png b/assets/images/chat_item_6.png
new file mode 100644
index 0000000..449b045
Binary files /dev/null and b/assets/images/chat_item_6.png differ
diff --git a/assets/images/chat_item_7.png b/assets/images/chat_item_7.png
new file mode 100644
index 0000000..030213f
Binary files /dev/null and b/assets/images/chat_item_7.png differ
diff --git a/assets/images/coin.png b/assets/images/coin.png
new file mode 100644
index 0000000..1e0bbe5
Binary files /dev/null and b/assets/images/coin.png differ
diff --git a/assets/images/daily_bg_1.png b/assets/images/daily_bg_1.png
new file mode 100644
index 0000000..5063a92
Binary files /dev/null and b/assets/images/daily_bg_1.png differ
diff --git a/assets/images/daily_bg_2.png b/assets/images/daily_bg_2.png
new file mode 100644
index 0000000..0003342
Binary files /dev/null and b/assets/images/daily_bg_2.png differ
diff --git a/assets/images/daily_btn_1.png b/assets/images/daily_btn_1.png
new file mode 100644
index 0000000..7a1a9fb
Binary files /dev/null and b/assets/images/daily_btn_1.png differ
diff --git a/assets/images/daily_btn_2.png b/assets/images/daily_btn_2.png
new file mode 100644
index 0000000..7c3d607
Binary files /dev/null and b/assets/images/daily_btn_2.png differ
diff --git a/assets/images/daily_coin.png b/assets/images/daily_coin.png
new file mode 100644
index 0000000..5b2c04d
Binary files /dev/null and b/assets/images/daily_coin.png differ
diff --git a/assets/images/daily_icon.png b/assets/images/daily_icon.png
new file mode 100644
index 0000000..a4c08f9
Binary files /dev/null and b/assets/images/daily_icon.png differ
diff --git a/assets/images/default_nor_avatar.png b/assets/images/default_nor_avatar.png
new file mode 100644
index 0000000..4351ba5
Binary files /dev/null and b/assets/images/default_nor_avatar.png differ
diff --git a/assets/images/emojiface/1.png b/assets/images/emojiface/1.png
new file mode 100644
index 0000000..aab1f8b
Binary files /dev/null and b/assets/images/emojiface/1.png differ
diff --git a/assets/images/emojiface/10.png b/assets/images/emojiface/10.png
new file mode 100644
index 0000000..5b3b641
Binary files /dev/null and b/assets/images/emojiface/10.png differ
diff --git a/assets/images/emojiface/11.png b/assets/images/emojiface/11.png
new file mode 100644
index 0000000..21f6d38
Binary files /dev/null and b/assets/images/emojiface/11.png differ
diff --git a/assets/images/emojiface/12.png b/assets/images/emojiface/12.png
new file mode 100644
index 0000000..2007bf7
Binary files /dev/null and b/assets/images/emojiface/12.png differ
diff --git a/assets/images/emojiface/13.png b/assets/images/emojiface/13.png
new file mode 100644
index 0000000..7866e5c
Binary files /dev/null and b/assets/images/emojiface/13.png differ
diff --git a/assets/images/emojiface/14.png b/assets/images/emojiface/14.png
new file mode 100644
index 0000000..451d2a8
Binary files /dev/null and b/assets/images/emojiface/14.png differ
diff --git a/assets/images/emojiface/15.png b/assets/images/emojiface/15.png
new file mode 100644
index 0000000..2f5cdb8
Binary files /dev/null and b/assets/images/emojiface/15.png differ
diff --git a/assets/images/emojiface/16.png b/assets/images/emojiface/16.png
new file mode 100644
index 0000000..52a5ff0
Binary files /dev/null and b/assets/images/emojiface/16.png differ
diff --git a/assets/images/emojiface/17.png b/assets/images/emojiface/17.png
new file mode 100644
index 0000000..38a51ca
Binary files /dev/null and b/assets/images/emojiface/17.png differ
diff --git a/assets/images/emojiface/18.png b/assets/images/emojiface/18.png
new file mode 100644
index 0000000..dea5802
Binary files /dev/null and b/assets/images/emojiface/18.png differ
diff --git a/assets/images/emojiface/19.png b/assets/images/emojiface/19.png
new file mode 100644
index 0000000..2ff354c
Binary files /dev/null and b/assets/images/emojiface/19.png differ
diff --git a/assets/images/emojiface/2.png b/assets/images/emojiface/2.png
new file mode 100644
index 0000000..a2ad3c4
Binary files /dev/null and b/assets/images/emojiface/2.png differ
diff --git a/assets/images/emojiface/20.png b/assets/images/emojiface/20.png
new file mode 100644
index 0000000..a90ab15
Binary files /dev/null and b/assets/images/emojiface/20.png differ
diff --git a/assets/images/emojiface/21.png b/assets/images/emojiface/21.png
new file mode 100644
index 0000000..e1e81c7
Binary files /dev/null and b/assets/images/emojiface/21.png differ
diff --git a/assets/images/emojiface/22.png b/assets/images/emojiface/22.png
new file mode 100644
index 0000000..9639302
Binary files /dev/null and b/assets/images/emojiface/22.png differ
diff --git a/assets/images/emojiface/23.png b/assets/images/emojiface/23.png
new file mode 100644
index 0000000..976edc1
Binary files /dev/null and b/assets/images/emojiface/23.png differ
diff --git a/assets/images/emojiface/24.png b/assets/images/emojiface/24.png
new file mode 100644
index 0000000..68f107c
Binary files /dev/null and b/assets/images/emojiface/24.png differ
diff --git a/assets/images/emojiface/25.png b/assets/images/emojiface/25.png
new file mode 100644
index 0000000..c21c56d
Binary files /dev/null and b/assets/images/emojiface/25.png differ
diff --git a/assets/images/emojiface/26.png b/assets/images/emojiface/26.png
new file mode 100644
index 0000000..31e5217
Binary files /dev/null and b/assets/images/emojiface/26.png differ
diff --git a/assets/images/emojiface/27.png b/assets/images/emojiface/27.png
new file mode 100644
index 0000000..8ac3263
Binary files /dev/null and b/assets/images/emojiface/27.png differ
diff --git a/assets/images/emojiface/28.png b/assets/images/emojiface/28.png
new file mode 100644
index 0000000..9fcc8c4
Binary files /dev/null and b/assets/images/emojiface/28.png differ
diff --git a/assets/images/emojiface/29.png b/assets/images/emojiface/29.png
new file mode 100644
index 0000000..f94800e
Binary files /dev/null and b/assets/images/emojiface/29.png differ
diff --git a/assets/images/emojiface/3.png b/assets/images/emojiface/3.png
new file mode 100644
index 0000000..c1920d7
Binary files /dev/null and b/assets/images/emojiface/3.png differ
diff --git a/assets/images/emojiface/30.png b/assets/images/emojiface/30.png
new file mode 100644
index 0000000..863561d
Binary files /dev/null and b/assets/images/emojiface/30.png differ
diff --git a/assets/images/emojiface/31.png b/assets/images/emojiface/31.png
new file mode 100644
index 0000000..7b2300b
Binary files /dev/null and b/assets/images/emojiface/31.png differ
diff --git a/assets/images/emojiface/32.png b/assets/images/emojiface/32.png
new file mode 100644
index 0000000..c5bc183
Binary files /dev/null and b/assets/images/emojiface/32.png differ
diff --git a/assets/images/emojiface/33.png b/assets/images/emojiface/33.png
new file mode 100644
index 0000000..7df05d6
Binary files /dev/null and b/assets/images/emojiface/33.png differ
diff --git a/assets/images/emojiface/34.png b/assets/images/emojiface/34.png
new file mode 100644
index 0000000..fdc7af8
Binary files /dev/null and b/assets/images/emojiface/34.png differ
diff --git a/assets/images/emojiface/35.png b/assets/images/emojiface/35.png
new file mode 100644
index 0000000..6620e93
Binary files /dev/null and b/assets/images/emojiface/35.png differ
diff --git a/assets/images/emojiface/36.png b/assets/images/emojiface/36.png
new file mode 100644
index 0000000..694248d
Binary files /dev/null and b/assets/images/emojiface/36.png differ
diff --git a/assets/images/emojiface/37.png b/assets/images/emojiface/37.png
new file mode 100644
index 0000000..7e68fc7
Binary files /dev/null and b/assets/images/emojiface/37.png differ
diff --git a/assets/images/emojiface/38.png b/assets/images/emojiface/38.png
new file mode 100644
index 0000000..06c1510
Binary files /dev/null and b/assets/images/emojiface/38.png differ
diff --git a/assets/images/emojiface/39.png b/assets/images/emojiface/39.png
new file mode 100644
index 0000000..593da05
Binary files /dev/null and b/assets/images/emojiface/39.png differ
diff --git a/assets/images/emojiface/4.png b/assets/images/emojiface/4.png
new file mode 100644
index 0000000..428d2e4
Binary files /dev/null and b/assets/images/emojiface/4.png differ
diff --git a/assets/images/emojiface/40.png b/assets/images/emojiface/40.png
new file mode 100644
index 0000000..dcd2b59
Binary files /dev/null and b/assets/images/emojiface/40.png differ
diff --git a/assets/images/emojiface/41.png b/assets/images/emojiface/41.png
new file mode 100644
index 0000000..eb2d907
Binary files /dev/null and b/assets/images/emojiface/41.png differ
diff --git a/assets/images/emojiface/42.png b/assets/images/emojiface/42.png
new file mode 100644
index 0000000..2edd744
Binary files /dev/null and b/assets/images/emojiface/42.png differ
diff --git a/assets/images/emojiface/43.png b/assets/images/emojiface/43.png
new file mode 100644
index 0000000..ef3cf0e
Binary files /dev/null and b/assets/images/emojiface/43.png differ
diff --git a/assets/images/emojiface/44.png b/assets/images/emojiface/44.png
new file mode 100644
index 0000000..f2c2903
Binary files /dev/null and b/assets/images/emojiface/44.png differ
diff --git a/assets/images/emojiface/45.png b/assets/images/emojiface/45.png
new file mode 100644
index 0000000..2094034
Binary files /dev/null and b/assets/images/emojiface/45.png differ
diff --git a/assets/images/emojiface/46.png b/assets/images/emojiface/46.png
new file mode 100644
index 0000000..b0522c7
Binary files /dev/null and b/assets/images/emojiface/46.png differ
diff --git a/assets/images/emojiface/47.png b/assets/images/emojiface/47.png
new file mode 100644
index 0000000..86a1f91
Binary files /dev/null and b/assets/images/emojiface/47.png differ
diff --git a/assets/images/emojiface/48.png b/assets/images/emojiface/48.png
new file mode 100644
index 0000000..094aa75
Binary files /dev/null and b/assets/images/emojiface/48.png differ
diff --git a/assets/images/emojiface/49.png b/assets/images/emojiface/49.png
new file mode 100644
index 0000000..0b3441d
Binary files /dev/null and b/assets/images/emojiface/49.png differ
diff --git a/assets/images/emojiface/5.png b/assets/images/emojiface/5.png
new file mode 100644
index 0000000..28c0f28
Binary files /dev/null and b/assets/images/emojiface/5.png differ
diff --git a/assets/images/emojiface/50.png b/assets/images/emojiface/50.png
new file mode 100644
index 0000000..429c076
Binary files /dev/null and b/assets/images/emojiface/50.png differ
diff --git a/assets/images/emojiface/51.png b/assets/images/emojiface/51.png
new file mode 100644
index 0000000..61c1459
Binary files /dev/null and b/assets/images/emojiface/51.png differ
diff --git a/assets/images/emojiface/52.png b/assets/images/emojiface/52.png
new file mode 100644
index 0000000..6796ea8
Binary files /dev/null and b/assets/images/emojiface/52.png differ
diff --git a/assets/images/emojiface/53.png b/assets/images/emojiface/53.png
new file mode 100644
index 0000000..119dd2c
Binary files /dev/null and b/assets/images/emojiface/53.png differ
diff --git a/assets/images/emojiface/54.png b/assets/images/emojiface/54.png
new file mode 100644
index 0000000..31837d5
Binary files /dev/null and b/assets/images/emojiface/54.png differ
diff --git a/assets/images/emojiface/55.png b/assets/images/emojiface/55.png
new file mode 100644
index 0000000..dc70d3f
Binary files /dev/null and b/assets/images/emojiface/55.png differ
diff --git a/assets/images/emojiface/56.png b/assets/images/emojiface/56.png
new file mode 100644
index 0000000..edc5516
Binary files /dev/null and b/assets/images/emojiface/56.png differ
diff --git a/assets/images/emojiface/57.png b/assets/images/emojiface/57.png
new file mode 100644
index 0000000..8c6dcfb
Binary files /dev/null and b/assets/images/emojiface/57.png differ
diff --git a/assets/images/emojiface/58.png b/assets/images/emojiface/58.png
new file mode 100644
index 0000000..2915d13
Binary files /dev/null and b/assets/images/emojiface/58.png differ
diff --git a/assets/images/emojiface/59.png b/assets/images/emojiface/59.png
new file mode 100644
index 0000000..af542e0
Binary files /dev/null and b/assets/images/emojiface/59.png differ
diff --git a/assets/images/emojiface/6.png b/assets/images/emojiface/6.png
new file mode 100644
index 0000000..deb60c2
Binary files /dev/null and b/assets/images/emojiface/6.png differ
diff --git a/assets/images/emojiface/60.png b/assets/images/emojiface/60.png
new file mode 100644
index 0000000..7859b57
Binary files /dev/null and b/assets/images/emojiface/60.png differ
diff --git a/assets/images/emojiface/61.png b/assets/images/emojiface/61.png
new file mode 100644
index 0000000..ee3038b
Binary files /dev/null and b/assets/images/emojiface/61.png differ
diff --git a/assets/images/emojiface/62.png b/assets/images/emojiface/62.png
new file mode 100644
index 0000000..8ce677c
Binary files /dev/null and b/assets/images/emojiface/62.png differ
diff --git a/assets/images/emojiface/63.png b/assets/images/emojiface/63.png
new file mode 100644
index 0000000..e942f5a
Binary files /dev/null and b/assets/images/emojiface/63.png differ
diff --git a/assets/images/emojiface/64.png b/assets/images/emojiface/64.png
new file mode 100644
index 0000000..3541814
Binary files /dev/null and b/assets/images/emojiface/64.png differ
diff --git a/assets/images/emojiface/65.png b/assets/images/emojiface/65.png
new file mode 100644
index 0000000..43d3697
Binary files /dev/null and b/assets/images/emojiface/65.png differ
diff --git a/assets/images/emojiface/66.png b/assets/images/emojiface/66.png
new file mode 100644
index 0000000..5202154
Binary files /dev/null and b/assets/images/emojiface/66.png differ
diff --git a/assets/images/emojiface/67.png b/assets/images/emojiface/67.png
new file mode 100644
index 0000000..4af079f
Binary files /dev/null and b/assets/images/emojiface/67.png differ
diff --git a/assets/images/emojiface/68.png b/assets/images/emojiface/68.png
new file mode 100644
index 0000000..efb4b08
Binary files /dev/null and b/assets/images/emojiface/68.png differ
diff --git a/assets/images/emojiface/69.png b/assets/images/emojiface/69.png
new file mode 100644
index 0000000..904516f
Binary files /dev/null and b/assets/images/emojiface/69.png differ
diff --git a/assets/images/emojiface/7.png b/assets/images/emojiface/7.png
new file mode 100644
index 0000000..dee9ed4
Binary files /dev/null and b/assets/images/emojiface/7.png differ
diff --git a/assets/images/emojiface/70.png b/assets/images/emojiface/70.png
new file mode 100644
index 0000000..19c1bd4
Binary files /dev/null and b/assets/images/emojiface/70.png differ
diff --git a/assets/images/emojiface/71.png b/assets/images/emojiface/71.png
new file mode 100644
index 0000000..d01c654
Binary files /dev/null and b/assets/images/emojiface/71.png differ
diff --git a/assets/images/emojiface/72.png b/assets/images/emojiface/72.png
new file mode 100644
index 0000000..e734839
Binary files /dev/null and b/assets/images/emojiface/72.png differ
diff --git a/assets/images/emojiface/73.png b/assets/images/emojiface/73.png
new file mode 100644
index 0000000..0708a32
Binary files /dev/null and b/assets/images/emojiface/73.png differ
diff --git a/assets/images/emojiface/74.png b/assets/images/emojiface/74.png
new file mode 100644
index 0000000..081534e
Binary files /dev/null and b/assets/images/emojiface/74.png differ
diff --git a/assets/images/emojiface/75.png b/assets/images/emojiface/75.png
new file mode 100644
index 0000000..7cd38e1
Binary files /dev/null and b/assets/images/emojiface/75.png differ
diff --git a/assets/images/emojiface/76.png b/assets/images/emojiface/76.png
new file mode 100644
index 0000000..dd84965
Binary files /dev/null and b/assets/images/emojiface/76.png differ
diff --git a/assets/images/emojiface/77.png b/assets/images/emojiface/77.png
new file mode 100644
index 0000000..a87686f
Binary files /dev/null and b/assets/images/emojiface/77.png differ
diff --git a/assets/images/emojiface/78.png b/assets/images/emojiface/78.png
new file mode 100644
index 0000000..6ba8a3e
Binary files /dev/null and b/assets/images/emojiface/78.png differ
diff --git a/assets/images/emojiface/79.png b/assets/images/emojiface/79.png
new file mode 100644
index 0000000..ef1a886
Binary files /dev/null and b/assets/images/emojiface/79.png differ
diff --git a/assets/images/emojiface/8.png b/assets/images/emojiface/8.png
new file mode 100644
index 0000000..5c18640
Binary files /dev/null and b/assets/images/emojiface/8.png differ
diff --git a/assets/images/emojiface/80.png b/assets/images/emojiface/80.png
new file mode 100644
index 0000000..6041c84
Binary files /dev/null and b/assets/images/emojiface/80.png differ
diff --git a/assets/images/emojiface/81.png b/assets/images/emojiface/81.png
new file mode 100644
index 0000000..394ee50
Binary files /dev/null and b/assets/images/emojiface/81.png differ
diff --git a/assets/images/emojiface/82.png b/assets/images/emojiface/82.png
new file mode 100644
index 0000000..f48744d
Binary files /dev/null and b/assets/images/emojiface/82.png differ
diff --git a/assets/images/emojiface/83.png b/assets/images/emojiface/83.png
new file mode 100644
index 0000000..6397907
Binary files /dev/null and b/assets/images/emojiface/83.png differ
diff --git a/assets/images/emojiface/84.png b/assets/images/emojiface/84.png
new file mode 100644
index 0000000..9579911
Binary files /dev/null and b/assets/images/emojiface/84.png differ
diff --git a/assets/images/emojiface/85.png b/assets/images/emojiface/85.png
new file mode 100644
index 0000000..c5988d9
Binary files /dev/null and b/assets/images/emojiface/85.png differ
diff --git a/assets/images/emojiface/86.png b/assets/images/emojiface/86.png
new file mode 100644
index 0000000..27138c0
Binary files /dev/null and b/assets/images/emojiface/86.png differ
diff --git a/assets/images/emojiface/87.png b/assets/images/emojiface/87.png
new file mode 100644
index 0000000..db6ba6e
Binary files /dev/null and b/assets/images/emojiface/87.png differ
diff --git a/assets/images/emojiface/88.png b/assets/images/emojiface/88.png
new file mode 100644
index 0000000..576fe5c
Binary files /dev/null and b/assets/images/emojiface/88.png differ
diff --git a/assets/images/emojiface/89.png b/assets/images/emojiface/89.png
new file mode 100644
index 0000000..dcc2f78
Binary files /dev/null and b/assets/images/emojiface/89.png differ
diff --git a/assets/images/emojiface/9.png b/assets/images/emojiface/9.png
new file mode 100644
index 0000000..0bedc08
Binary files /dev/null and b/assets/images/emojiface/9.png differ
diff --git a/assets/images/emojiface/90.png b/assets/images/emojiface/90.png
new file mode 100644
index 0000000..ffd4b2a
Binary files /dev/null and b/assets/images/emojiface/90.png differ
diff --git a/assets/images/ext_apk.png b/assets/images/ext_apk.png
new file mode 100644
index 0000000..6db026c
Binary files /dev/null and b/assets/images/ext_apk.png differ
diff --git a/assets/images/ext_excel.png b/assets/images/ext_excel.png
new file mode 100644
index 0000000..0369045
Binary files /dev/null and b/assets/images/ext_excel.png differ
diff --git a/assets/images/ext_pdf.png b/assets/images/ext_pdf.png
new file mode 100644
index 0000000..af67b13
Binary files /dev/null and b/assets/images/ext_pdf.png differ
diff --git a/assets/images/ext_ppt.png b/assets/images/ext_ppt.png
new file mode 100644
index 0000000..34d9cb1
Binary files /dev/null and b/assets/images/ext_ppt.png differ
diff --git a/assets/images/ext_sound.png b/assets/images/ext_sound.png
new file mode 100644
index 0000000..11c54c6
Binary files /dev/null and b/assets/images/ext_sound.png differ
diff --git a/assets/images/ext_txt.png b/assets/images/ext_txt.png
new file mode 100644
index 0000000..73925d5
Binary files /dev/null and b/assets/images/ext_txt.png differ
diff --git a/assets/images/ext_unknown.png b/assets/images/ext_unknown.png
new file mode 100644
index 0000000..cb5ab1a
Binary files /dev/null and b/assets/images/ext_unknown.png differ
diff --git a/assets/images/ext_video.png b/assets/images/ext_video.png
new file mode 100644
index 0000000..f1df55f
Binary files /dev/null and b/assets/images/ext_video.png differ
diff --git a/assets/images/ext_word.png b/assets/images/ext_word.png
new file mode 100644
index 0000000..a769b14
Binary files /dev/null and b/assets/images/ext_word.png differ
diff --git a/assets/images/ext_zip.png b/assets/images/ext_zip.png
new file mode 100644
index 0000000..ce453c0
Binary files /dev/null and b/assets/images/ext_zip.png differ
diff --git a/assets/images/gift_1.png b/assets/images/gift_1.png
new file mode 100644
index 0000000..2897873
Binary files /dev/null and b/assets/images/gift_1.png differ
diff --git a/assets/images/gift_2.png b/assets/images/gift_2.png
new file mode 100644
index 0000000..18387cd
Binary files /dev/null and b/assets/images/gift_2.png differ
diff --git a/assets/images/gift_3.png b/assets/images/gift_3.png
new file mode 100644
index 0000000..1fa28ef
Binary files /dev/null and b/assets/images/gift_3.png differ
diff --git a/assets/images/gift_anim_1.gif b/assets/images/gift_anim_1.gif
new file mode 100644
index 0000000..95a75ff
Binary files /dev/null and b/assets/images/gift_anim_1.gif differ
diff --git a/assets/images/gift_anim_2.gif b/assets/images/gift_anim_2.gif
new file mode 100644
index 0000000..a40abb8
Binary files /dev/null and b/assets/images/gift_anim_2.gif differ
diff --git a/assets/images/gift_anim_3.gif b/assets/images/gift_anim_3.gif
new file mode 100644
index 0000000..d8a72ef
Binary files /dev/null and b/assets/images/gift_anim_3.gif differ
diff --git a/assets/images/gift_show_2_1.png b/assets/images/gift_show_2_1.png
new file mode 100644
index 0000000..70b0f73
Binary files /dev/null and b/assets/images/gift_show_2_1.png differ
diff --git a/assets/images/gift_show_2_2.png b/assets/images/gift_show_2_2.png
new file mode 100644
index 0000000..123cf28
Binary files /dev/null and b/assets/images/gift_show_2_2.png differ
diff --git a/assets/images/gift_show_2_3.png b/assets/images/gift_show_2_3.png
new file mode 100644
index 0000000..bf03da9
Binary files /dev/null and b/assets/images/gift_show_2_3.png differ
diff --git a/assets/images/gift_show_2_4.png b/assets/images/gift_show_2_4.png
new file mode 100644
index 0000000..f07936e
Binary files /dev/null and b/assets/images/gift_show_2_4.png differ
diff --git a/assets/images/hand.png b/assets/images/hand.png
new file mode 100644
index 0000000..8245646
Binary files /dev/null and b/assets/images/hand.png differ
diff --git a/assets/images/ic_album.png b/assets/images/ic_album.png
new file mode 100644
index 0000000..0f80105
Binary files /dev/null and b/assets/images/ic_album.png differ
diff --git a/assets/images/ic_bottle_msg.png b/assets/images/ic_bottle_msg.png
new file mode 100644
index 0000000..d8ec09a
Binary files /dev/null and b/assets/images/ic_bottle_msg.png differ
diff --git a/assets/images/ic_cards_wallet.png b/assets/images/ic_cards_wallet.png
new file mode 100644
index 0000000..751b3ab
Binary files /dev/null and b/assets/images/ic_cards_wallet.png differ
diff --git a/assets/images/ic_collections.png b/assets/images/ic_collections.png
new file mode 100644
index 0000000..9227706
Binary files /dev/null and b/assets/images/ic_collections.png differ
diff --git a/assets/images/ic_emotions.png b/assets/images/ic_emotions.png
new file mode 100644
index 0000000..516f12b
Binary files /dev/null and b/assets/images/ic_emotions.png differ
diff --git a/assets/images/ic_feeds.png b/assets/images/ic_feeds.png
new file mode 100644
index 0000000..feddb20
Binary files /dev/null and b/assets/images/ic_feeds.png differ
diff --git a/assets/images/ic_fengchao.png b/assets/images/ic_fengchao.png
new file mode 100644
index 0000000..2431a2c
Binary files /dev/null and b/assets/images/ic_fengchao.png differ
diff --git a/assets/images/ic_file_transfer.png b/assets/images/ic_file_transfer.png
new file mode 100644
index 0000000..43175d0
Binary files /dev/null and b/assets/images/ic_file_transfer.png differ
diff --git a/assets/images/ic_game_entry.png b/assets/images/ic_game_entry.png
new file mode 100644
index 0000000..f44f8a5
Binary files /dev/null and b/assets/images/ic_game_entry.png differ
diff --git a/assets/images/ic_group_chat.png b/assets/images/ic_group_chat.png
new file mode 100644
index 0000000..14c8df1
Binary files /dev/null and b/assets/images/ic_group_chat.png differ
diff --git a/assets/images/ic_mini_program.png b/assets/images/ic_mini_program.png
new file mode 100644
index 0000000..fa197b4
Binary files /dev/null and b/assets/images/ic_mini_program.png differ
diff --git a/assets/images/ic_new_friend.png b/assets/images/ic_new_friend.png
new file mode 100644
index 0000000..1e80d8d
Binary files /dev/null and b/assets/images/ic_new_friend.png differ
diff --git a/assets/images/ic_people_nearby.png b/assets/images/ic_people_nearby.png
new file mode 100644
index 0000000..a15e66e
Binary files /dev/null and b/assets/images/ic_people_nearby.png differ
diff --git a/assets/images/ic_public_account.png b/assets/images/ic_public_account.png
new file mode 100644
index 0000000..c8aec2a
Binary files /dev/null and b/assets/images/ic_public_account.png differ
diff --git a/assets/images/ic_qrcode_preview_tiny.png b/assets/images/ic_qrcode_preview_tiny.png
new file mode 100644
index 0000000..de0667e
Binary files /dev/null and b/assets/images/ic_qrcode_preview_tiny.png differ
diff --git a/assets/images/ic_quick_scan.png b/assets/images/ic_quick_scan.png
new file mode 100644
index 0000000..60be1a9
Binary files /dev/null and b/assets/images/ic_quick_scan.png differ
diff --git a/assets/images/ic_quick_search.png b/assets/images/ic_quick_search.png
new file mode 100644
index 0000000..76ce3db
Binary files /dev/null and b/assets/images/ic_quick_search.png differ
diff --git a/assets/images/ic_settings.png b/assets/images/ic_settings.png
new file mode 100644
index 0000000..14c7886
Binary files /dev/null and b/assets/images/ic_settings.png differ
diff --git a/assets/images/ic_shake_phone.png b/assets/images/ic_shake_phone.png
new file mode 100644
index 0000000..039b5dc
Binary files /dev/null and b/assets/images/ic_shake_phone.png differ
diff --git a/assets/images/ic_shopping.png b/assets/images/ic_shopping.png
new file mode 100644
index 0000000..68598c3
Binary files /dev/null and b/assets/images/ic_shopping.png differ
diff --git a/assets/images/ic_social_circle.png b/assets/images/ic_social_circle.png
new file mode 100644
index 0000000..97cc4d5
Binary files /dev/null and b/assets/images/ic_social_circle.png differ
diff --git a/assets/images/ic_tag.png b/assets/images/ic_tag.png
new file mode 100644
index 0000000..1feca1c
Binary files /dev/null and b/assets/images/ic_tag.png differ
diff --git a/assets/images/ic_tx_news.png b/assets/images/ic_tx_news.png
new file mode 100644
index 0000000..0a345df
Binary files /dev/null and b/assets/images/ic_tx_news.png differ
diff --git a/assets/images/ic_wallet.png b/assets/images/ic_wallet.png
new file mode 100644
index 0000000..5340357
Binary files /dev/null and b/assets/images/ic_wallet.png differ
diff --git a/assets/images/ic_wx_games.png b/assets/images/ic_wx_games.png
new file mode 100644
index 0000000..d7075cb
Binary files /dev/null and b/assets/images/ic_wx_games.png differ
diff --git a/assets/images/img_fyj.png b/assets/images/img_fyj.png
new file mode 100644
index 0000000..0a124c7
Binary files /dev/null and b/assets/images/img_fyj.png differ
diff --git a/assets/images/img_long_index.png b/assets/images/img_long_index.png
new file mode 100644
index 0000000..64a5105
Binary files /dev/null and b/assets/images/img_long_index.png differ
diff --git a/assets/images/img_splash_1.png b/assets/images/img_splash_1.png
new file mode 100644
index 0000000..ecd49f2
Binary files /dev/null and b/assets/images/img_splash_1.png differ
diff --git a/assets/images/img_splash_2.png b/assets/images/img_splash_2.png
new file mode 100644
index 0000000..598067a
Binary files /dev/null and b/assets/images/img_splash_2.png differ
diff --git a/assets/images/img_splash_3.png b/assets/images/img_splash_3.png
new file mode 100644
index 0000000..266bf59
Binary files /dev/null and b/assets/images/img_splash_3.png differ
diff --git a/assets/images/img_temp_hy.png b/assets/images/img_temp_hy.png
new file mode 100644
index 0000000..f01406d
Binary files /dev/null and b/assets/images/img_temp_hy.png differ
diff --git a/assets/images/img_temp_qb.png b/assets/images/img_temp_qb.png
new file mode 100644
index 0000000..091d451
Binary files /dev/null and b/assets/images/img_temp_qb.png differ
diff --git a/assets/images/img_temp_qd.png b/assets/images/img_temp_qd.png
new file mode 100644
index 0000000..4118026
Binary files /dev/null and b/assets/images/img_temp_qd.png differ
diff --git a/assets/images/img_temp_see.png b/assets/images/img_temp_see.png
new file mode 100644
index 0000000..1db2fcf
Binary files /dev/null and b/assets/images/img_temp_see.png differ
diff --git a/assets/images/img_temp_share.png b/assets/images/img_temp_share.png
new file mode 100644
index 0000000..cbf6a16
Binary files /dev/null and b/assets/images/img_temp_share.png differ
diff --git a/assets/images/img_update_bg.png b/assets/images/img_update_bg.png
new file mode 100644
index 0000000..7987d47
Binary files /dev/null and b/assets/images/img_update_bg.png differ
diff --git a/assets/images/left_gray.png b/assets/images/left_gray.png
new file mode 100644
index 0000000..cc1627e
Binary files /dev/null and b/assets/images/left_gray.png differ
diff --git a/assets/images/left_white.png b/assets/images/left_white.png
new file mode 100644
index 0000000..d35cece
Binary files /dev/null and b/assets/images/left_white.png differ
diff --git a/assets/images/login/SY_bg.png b/assets/images/login/SY_bg.png
new file mode 100644
index 0000000..f1bde79
Binary files /dev/null and b/assets/images/login/SY_bg.png differ
diff --git a/assets/images/login/SY_logo.png b/assets/images/login/SY_logo.png
new file mode 100644
index 0000000..df5646e
Binary files /dev/null and b/assets/images/login/SY_logo.png differ
diff --git a/assets/images/login/delete.png b/assets/images/login/delete.png
new file mode 100644
index 0000000..40d72f7
Binary files /dev/null and b/assets/images/login/delete.png differ
diff --git a/assets/images/login/dly_icon1.png b/assets/images/login/dly_icon1.png
new file mode 100644
index 0000000..47becb2
Binary files /dev/null and b/assets/images/login/dly_icon1.png differ
diff --git a/assets/images/login/dly_icon2.png b/assets/images/login/dly_icon2.png
new file mode 100644
index 0000000..469e3c8
Binary files /dev/null and b/assets/images/login/dly_icon2.png differ
diff --git a/assets/images/login/dly_icon3.png b/assets/images/login/dly_icon3.png
new file mode 100644
index 0000000..1c258ef
Binary files /dev/null and b/assets/images/login/dly_icon3.png differ
diff --git a/assets/images/login/dly_icon4.png b/assets/images/login/dly_icon4.png
new file mode 100644
index 0000000..10d7ac1
Binary files /dev/null and b/assets/images/login/dly_icon4.png differ
diff --git a/assets/images/login/dly_logo.png b/assets/images/login/dly_logo.png
new file mode 100644
index 0000000..cd3abf9
Binary files /dev/null and b/assets/images/login/dly_logo.png differ
diff --git a/assets/images/login/lock.png b/assets/images/login/lock.png
new file mode 100644
index 0000000..80efcf6
Binary files /dev/null and b/assets/images/login/lock.png differ
diff --git a/assets/images/login/money.png b/assets/images/login/money.png
new file mode 100644
index 0000000..a83c580
Binary files /dev/null and b/assets/images/login/money.png differ
diff --git a/assets/images/login/rzzx.png b/assets/images/login/rzzx.png
new file mode 100644
index 0000000..083f888
Binary files /dev/null and b/assets/images/login/rzzx.png differ
diff --git a/assets/images/login/vip_logio.png b/assets/images/login/vip_logio.png
new file mode 100644
index 0000000..9d55de0
Binary files /dev/null and b/assets/images/login/vip_logio.png differ
diff --git a/assets/images/login/vip_other.png b/assets/images/login/vip_other.png
new file mode 100644
index 0000000..c7e9f93
Binary files /dev/null and b/assets/images/login/vip_other.png differ
diff --git a/assets/images/login/vip_rect1.png b/assets/images/login/vip_rect1.png
new file mode 100644
index 0000000..d8212f3
Binary files /dev/null and b/assets/images/login/vip_rect1.png differ
diff --git a/assets/images/login/vip_rect2.png b/assets/images/login/vip_rect2.png
new file mode 100644
index 0000000..3c8d0da
Binary files /dev/null and b/assets/images/login/vip_rect2.png differ
diff --git a/assets/images/login/vip_rect3.png b/assets/images/login/vip_rect3.png
new file mode 100644
index 0000000..38febd3
Binary files /dev/null and b/assets/images/login/vip_rect3.png differ
diff --git a/assets/images/login/vip_wx.png b/assets/images/login/vip_wx.png
new file mode 100644
index 0000000..e2b0ef4
Binary files /dev/null and b/assets/images/login/vip_wx.png differ
diff --git a/assets/images/login/vip_zfb.png b/assets/images/login/vip_zfb.png
new file mode 100644
index 0000000..1fa1830
Binary files /dev/null and b/assets/images/login/vip_zfb.png differ
diff --git a/assets/images/login/xzxb_female.png b/assets/images/login/xzxb_female.png
new file mode 100644
index 0000000..4e55c34
Binary files /dev/null and b/assets/images/login/xzxb_female.png differ
diff --git a/assets/images/login/xzxb_male.png b/assets/images/login/xzxb_male.png
new file mode 100644
index 0000000..407c145
Binary files /dev/null and b/assets/images/login/xzxb_male.png differ
diff --git a/assets/images/net_error.png b/assets/images/net_error.png
new file mode 100644
index 0000000..5023596
Binary files /dev/null and b/assets/images/net_error.png differ
diff --git a/assets/images/park/qz_icon1.png b/assets/images/park/qz_icon1.png
new file mode 100644
index 0000000..d19f3df
Binary files /dev/null and b/assets/images/park/qz_icon1.png differ
diff --git a/assets/images/park/qz_icon2.png b/assets/images/park/qz_icon2.png
new file mode 100644
index 0000000..6b78f0b
Binary files /dev/null and b/assets/images/park/qz_icon2.png differ
diff --git a/assets/images/park/qz_icon3.png b/assets/images/park/qz_icon3.png
new file mode 100644
index 0000000..8802029
Binary files /dev/null and b/assets/images/park/qz_icon3.png differ
diff --git a/assets/images/park/qz_icon4.png b/assets/images/park/qz_icon4.png
new file mode 100644
index 0000000..b1d59a8
Binary files /dev/null and b/assets/images/park/qz_icon4.png differ
diff --git a/assets/images/park/qz_icon5.png b/assets/images/park/qz_icon5.png
new file mode 100644
index 0000000..a70f31d
Binary files /dev/null and b/assets/images/park/qz_icon5.png differ
diff --git a/assets/images/park/qz_icon6.png b/assets/images/park/qz_icon6.png
new file mode 100644
index 0000000..38dbc11
Binary files /dev/null and b/assets/images/park/qz_icon6.png differ
diff --git a/assets/images/park/qz_icon7.png b/assets/images/park/qz_icon7.png
new file mode 100644
index 0000000..407e3a9
Binary files /dev/null and b/assets/images/park/qz_icon7.png differ
diff --git a/assets/images/park/qz_icon8.png b/assets/images/park/qz_icon8.png
new file mode 100644
index 0000000..869b139
Binary files /dev/null and b/assets/images/park/qz_icon8.png differ
diff --git a/assets/images/qianbao_bg.png b/assets/images/qianbao_bg.png
new file mode 100644
index 0000000..f297828
Binary files /dev/null and b/assets/images/qianbao_bg.png differ
diff --git a/assets/images/red_packet_bg.png b/assets/images/red_packet_bg.png
new file mode 100644
index 0000000..34a5695
Binary files /dev/null and b/assets/images/red_packet_bg.png differ
diff --git a/assets/images/right_gray.png b/assets/images/right_gray.png
new file mode 100644
index 0000000..b8333bc
Binary files /dev/null and b/assets/images/right_gray.png differ
diff --git a/assets/images/right_white.png b/assets/images/right_white.png
new file mode 100644
index 0000000..9836cc9
Binary files /dev/null and b/assets/images/right_white.png differ
diff --git a/assets/images/robot.jpg b/assets/images/robot.jpg
new file mode 100644
index 0000000..56a3647
Binary files /dev/null and b/assets/images/robot.jpg differ
diff --git a/assets/images/server_icon.png b/assets/images/server_icon.png
new file mode 100644
index 0000000..0daa649
Binary files /dev/null and b/assets/images/server_icon.png differ
diff --git a/assets/images/service_icon.png b/assets/images/service_icon.png
new file mode 100644
index 0000000..4b243fd
Binary files /dev/null and b/assets/images/service_icon.png differ
diff --git a/assets/images/sticker/sticker_1.gif b/assets/images/sticker/sticker_1.gif
new file mode 100644
index 0000000..69b5cca
Binary files /dev/null and b/assets/images/sticker/sticker_1.gif differ
diff --git a/assets/images/sticker/sticker_10.gif b/assets/images/sticker/sticker_10.gif
new file mode 100644
index 0000000..d72f6f4
Binary files /dev/null and b/assets/images/sticker/sticker_10.gif differ
diff --git a/assets/images/sticker/sticker_11.gif b/assets/images/sticker/sticker_11.gif
new file mode 100644
index 0000000..5bec743
Binary files /dev/null and b/assets/images/sticker/sticker_11.gif differ
diff --git a/assets/images/sticker/sticker_12.gif b/assets/images/sticker/sticker_12.gif
new file mode 100644
index 0000000..ce99228
Binary files /dev/null and b/assets/images/sticker/sticker_12.gif differ
diff --git a/assets/images/sticker/sticker_13.gif b/assets/images/sticker/sticker_13.gif
new file mode 100644
index 0000000..814bb4a
Binary files /dev/null and b/assets/images/sticker/sticker_13.gif differ
diff --git a/assets/images/sticker/sticker_14.gif b/assets/images/sticker/sticker_14.gif
new file mode 100644
index 0000000..8cddb19
Binary files /dev/null and b/assets/images/sticker/sticker_14.gif differ
diff --git a/assets/images/sticker/sticker_15.gif b/assets/images/sticker/sticker_15.gif
new file mode 100644
index 0000000..cf9accf
Binary files /dev/null and b/assets/images/sticker/sticker_15.gif differ
diff --git a/assets/images/sticker/sticker_16.gif b/assets/images/sticker/sticker_16.gif
new file mode 100644
index 0000000..1d98dc3
Binary files /dev/null and b/assets/images/sticker/sticker_16.gif differ
diff --git a/assets/images/sticker/sticker_17.gif b/assets/images/sticker/sticker_17.gif
new file mode 100644
index 0000000..cdf6f9e
Binary files /dev/null and b/assets/images/sticker/sticker_17.gif differ
diff --git a/assets/images/sticker/sticker_18.gif b/assets/images/sticker/sticker_18.gif
new file mode 100644
index 0000000..504f356
Binary files /dev/null and b/assets/images/sticker/sticker_18.gif differ
diff --git a/assets/images/sticker/sticker_19.gif b/assets/images/sticker/sticker_19.gif
new file mode 100644
index 0000000..fb950a4
Binary files /dev/null and b/assets/images/sticker/sticker_19.gif differ
diff --git a/assets/images/sticker/sticker_2.gif b/assets/images/sticker/sticker_2.gif
new file mode 100644
index 0000000..8200e4b
Binary files /dev/null and b/assets/images/sticker/sticker_2.gif differ
diff --git a/assets/images/sticker/sticker_20.gif b/assets/images/sticker/sticker_20.gif
new file mode 100644
index 0000000..2d2e175
Binary files /dev/null and b/assets/images/sticker/sticker_20.gif differ
diff --git a/assets/images/sticker/sticker_21.gif b/assets/images/sticker/sticker_21.gif
new file mode 100644
index 0000000..71ac8d9
Binary files /dev/null and b/assets/images/sticker/sticker_21.gif differ
diff --git a/assets/images/sticker/sticker_22.gif b/assets/images/sticker/sticker_22.gif
new file mode 100644
index 0000000..2711192
Binary files /dev/null and b/assets/images/sticker/sticker_22.gif differ
diff --git a/assets/images/sticker/sticker_23.gif b/assets/images/sticker/sticker_23.gif
new file mode 100644
index 0000000..96aceea
Binary files /dev/null and b/assets/images/sticker/sticker_23.gif differ
diff --git a/assets/images/sticker/sticker_24.gif b/assets/images/sticker/sticker_24.gif
new file mode 100644
index 0000000..43174a3
Binary files /dev/null and b/assets/images/sticker/sticker_24.gif differ
diff --git a/assets/images/sticker/sticker_25.gif b/assets/images/sticker/sticker_25.gif
new file mode 100644
index 0000000..3d1ba72
Binary files /dev/null and b/assets/images/sticker/sticker_25.gif differ
diff --git a/assets/images/sticker/sticker_26.gif b/assets/images/sticker/sticker_26.gif
new file mode 100644
index 0000000..7eb1837
Binary files /dev/null and b/assets/images/sticker/sticker_26.gif differ
diff --git a/assets/images/sticker/sticker_27.gif b/assets/images/sticker/sticker_27.gif
new file mode 100644
index 0000000..b08173c
Binary files /dev/null and b/assets/images/sticker/sticker_27.gif differ
diff --git a/assets/images/sticker/sticker_28.gif b/assets/images/sticker/sticker_28.gif
new file mode 100644
index 0000000..51476b8
Binary files /dev/null and b/assets/images/sticker/sticker_28.gif differ
diff --git a/assets/images/sticker/sticker_29.gif b/assets/images/sticker/sticker_29.gif
new file mode 100644
index 0000000..e5f309e
Binary files /dev/null and b/assets/images/sticker/sticker_29.gif differ
diff --git a/assets/images/sticker/sticker_3.gif b/assets/images/sticker/sticker_3.gif
new file mode 100644
index 0000000..11b9bb2
Binary files /dev/null and b/assets/images/sticker/sticker_3.gif differ
diff --git a/assets/images/sticker/sticker_30.gif b/assets/images/sticker/sticker_30.gif
new file mode 100644
index 0000000..119a4ef
Binary files /dev/null and b/assets/images/sticker/sticker_30.gif differ
diff --git a/assets/images/sticker/sticker_4.gif b/assets/images/sticker/sticker_4.gif
new file mode 100644
index 0000000..c756cde
Binary files /dev/null and b/assets/images/sticker/sticker_4.gif differ
diff --git a/assets/images/sticker/sticker_5.gif b/assets/images/sticker/sticker_5.gif
new file mode 100644
index 0000000..c9bdcbf
Binary files /dev/null and b/assets/images/sticker/sticker_5.gif differ
diff --git a/assets/images/sticker/sticker_6.gif b/assets/images/sticker/sticker_6.gif
new file mode 100644
index 0000000..3fd56ce
Binary files /dev/null and b/assets/images/sticker/sticker_6.gif differ
diff --git a/assets/images/sticker/sticker_7.gif b/assets/images/sticker/sticker_7.gif
new file mode 100644
index 0000000..2f9ca6d
Binary files /dev/null and b/assets/images/sticker/sticker_7.gif differ
diff --git a/assets/images/sticker/sticker_8.gif b/assets/images/sticker/sticker_8.gif
new file mode 100644
index 0000000..099eca0
Binary files /dev/null and b/assets/images/sticker/sticker_8.gif differ
diff --git a/assets/images/sticker/sticker_9.gif b/assets/images/sticker/sticker_9.gif
new file mode 100644
index 0000000..60bb089
Binary files /dev/null and b/assets/images/sticker/sticker_9.gif differ
diff --git a/assets/images/suo.png b/assets/images/suo.png
new file mode 100644
index 0000000..f751b02
Binary files /dev/null and b/assets/images/suo.png differ
diff --git a/assets/images/svip.png b/assets/images/svip.png
new file mode 100644
index 0000000..f36454e
Binary files /dev/null and b/assets/images/svip.png differ
diff --git a/assets/images/vip/hy_bg.png b/assets/images/vip/hy_bg.png
new file mode 100644
index 0000000..38efa46
Binary files /dev/null and b/assets/images/vip/hy_bg.png differ
diff --git a/assets/images/vip/hy_cjhy.png b/assets/images/vip/hy_cjhy.png
new file mode 100644
index 0000000..89a91f9
Binary files /dev/null and b/assets/images/vip/hy_cjhy.png differ
diff --git a/assets/images/vip/hy_hy.png b/assets/images/vip/hy_hy.png
new file mode 100644
index 0000000..c57a25e
Binary files /dev/null and b/assets/images/vip/hy_hy.png differ
diff --git a/assets/images/vip/hy_tj.png b/assets/images/vip/hy_tj.png
new file mode 100644
index 0000000..5676fa5
Binary files /dev/null and b/assets/images/vip/hy_tj.png differ
diff --git a/assets/images/vip/hy_tq.png b/assets/images/vip/hy_tq.png
new file mode 100644
index 0000000..390ef79
Binary files /dev/null and b/assets/images/vip/hy_tq.png differ
diff --git a/assets/images/vip/hy_xz.png b/assets/images/vip/hy_xz.png
new file mode 100644
index 0000000..192d497
Binary files /dev/null and b/assets/images/vip/hy_xz.png differ
diff --git a/assets/images/voucher.png b/assets/images/voucher.png
new file mode 100644
index 0000000..13e8c5d
Binary files /dev/null and b/assets/images/voucher.png differ
diff --git a/assets/images/yqm_bg.png b/assets/images/yqm_bg.png
new file mode 100644
index 0000000..d8a2ff1
Binary files /dev/null and b/assets/images/yqm_bg.png differ
diff --git a/assets/images/zhiwen.png b/assets/images/zhiwen.png
new file mode 100644
index 0000000..f5c88d0
Binary files /dev/null and b/assets/images/zhiwen.png differ
diff --git a/i18n/en-US.json b/i18n/en-US.json
new file mode 100644
index 0000000..8916cb1
--- /dev/null
+++ b/i18n/en-US.json
@@ -0,0 +1,1164 @@
+{
+ "appName": "Hibok park",
+ "login": "Login",
+ "registration": "Registration",
+ "other_login": "Other login",
+ "account": "Account number",
+ "enter_username": "Please enter Username",
+ "password": "Password",
+ "enter_password": "Enter password",
+ "forget_password": "Forget password",
+ "reset_password": "Reset Password",
+ "number_registration": "Mobile number registration",
+ "enter_number": "Please enter phone number",
+ "code": "Code",
+ "enter_code": "Please enter the code",
+ "send_code": "Send the code",
+ "send_again": "Send again",
+ "set_password": "Set password",
+ "password_limit": "Password least six",
+ "set_password2": "Set Password",
+ "next_step": "Next step",
+ "agreed_agreement": "Click to enter means you have read and agreed <>",
+ "enter_password2": "Please enter your password",
+ "reset_now": "Reset now",
+ "choose_gender": "Choose gender",
+ "who": "You are...",
+ "determine": "Determine",
+ "cannot_modified": "Cannot be modified after selecting gender",
+ "tip": "Tip",
+ "choose_quit": "You are about to complete registration, are you quit now?",
+ "confirm": "Confirm",
+ "use": "Use",
+ "cancel": "Cancel",
+ "close": "Close",
+ "delete": "Delete",
+ "forget_it": "Forget it",
+ "ok": "OK",
+ "choose_quit2": "After registration, you will not be able to modify your gender. Are you sure?",
+ "tip_content": "Tip: You can't communicate with users of the same gender",
+ "welcome": "Welcome",
+ "enter_incode": "Please enter the invitation code",
+ "must_incode": "Hibok only serves men with invitation codes",
+ "your_incode": "Your invitation code",
+ "how_get": "No invitation code? You can get it in the following ways",
+ "method1": "Method 1",
+ "free": "Free application",
+ "apply_now": "Apply now",
+ "check_incode": "Check code",
+ "so_get": "You need to fill in some personal information, and send you an invitation code after the review is passed.",
+ "apply_incode": "Apply for an invitation code",
+ "location": "Location",
+ "cityname": "The name of your city",
+ "message_channel": "Message channel",
+ "how_know": "Where do you know the APP?",
+ "wechat_number": "Wechat",
+ "your_wechat": "Your we chat",
+ "facebook": "Facebook",
+ "your_facebook": "Your Facebook",
+ "submit_application": "Submit application",
+ "enter_city": "Please enter your city",
+ "so_know": "Please tell us about your access to the app.",
+ "your_social": "Please tell us your social account",
+ "receive_incode": "We will process your application as soon as possible. If you pass the review, you will receive the invitation code we issued in the message center.",
+ "wait_incode": "The invitation code has not been issued yet, please be patient after applying!",
+ "successful_application1": "Application successful!",
+ "application_failed1": "Application failed!",
+ "successful_copy": "Successful copy",
+ "method2": "Method 2",
+ "joinvip": "Join member",
+ "join_now": "Join now",
+ "joined": "Joined",
+ "join_odds": "Joining members can enjoy various privileges, including registration without an invitation code",
+ "not_joinvip": "You have not joined the membership yet.",
+ "join_after": "After joining the membership, you can complete the registration without the invitation code.",
+ "incode_passed": "Invitation code verification passed",
+ "welcome_join": "Welcome! Do not reveal your account to others. Once you find that the login is abnormal, the account will be automatically frozen.",
+ "member_centre": "Member Centre",
+ "members_privilege": "Member's privilege",
+ "see_more": "Right 1",
+ "unlimited_see": "View users unlimited times a day",
+ "see_cheaper": "Right 2",
+ "free10": "/s1 free times per day to pay photo or social accounts",
+ "see_longer": "Right 3",
+ "towto6": "View time increased from 2s to /s1s.",
+ "see_better": "Right 4",
+ "free_release": "Free release of dating broadcasts",
+ "choose_price": "Choose a package",
+ "pay_method": "Payment method",
+ "pay_amount": "Payment amount",
+ "not_enough": "Insufficient wallet balance",
+ "confirm_pay": "Confirm payment",
+ "complete_material": "Complete material",
+ "basic_information": "Basic information",
+ "upload_avatar": "Upload avatar",
+ "choose": "Please choose",
+ "fill_out": "Please fill out",
+ "choose_multiple": "Can choose multiple",
+ "optional": "Optional",
+ "least": "Fill in at least /s1",
+ "introduce_yourself": "Introduce yourself",
+ "most": "Select up to /s1",
+ "nickname": "nickname",
+ "only1_8": "Nickname can only be 1-20 characters",
+ "Resident_city": "Current City",
+ "Please_select_a_resident_city": "Please select the current city",
+ "City1": "Can Tho",
+ "City2": "Da Nang",
+ "City3": "Hai phong",
+ "City4": "Hanoi",
+ "City5": "Ho Chi Minh",
+ "City6": "An Giang",
+ "City7": "Bac Giang",
+ "City8": "Bac Can",
+ "City9": "Bo Liao",
+ "City10": "Bac Ninh",
+ "City11": "Ba Ria-Vung Tau",
+ "City12": "Ben Tre",
+ "City13": "Binh Dinh",
+ "City14": "Binh Duong",
+ "City15": "Binh Phuoc",
+ "City16": "Binh Thuan",
+ "City17": "Ca Mau",
+ "City18": "Cao Bang",
+ "City19": "Dele",
+ "City20": "Dac Nong",
+ "City21": "Dien Bien",
+ "City22": "Dong Nai",
+ "City23": "Dong Thap",
+ "City24": "Gia Lai",
+ "City25": "Ha Giang",
+ "City26": "Hai Duong",
+ "City27": "Ha Nam",
+ "City28": "Ha Tinh",
+ "City29": "Hoa Binh",
+ "City30": "Hau Giang",
+ "City31": "Hung Yen",
+ "City32": "Khanh Hoa",
+ "City33": "Kien Giang",
+ "City34": "Kon Tum",
+ "City35": "Lai Chau",
+ "City36": "Lam Dong",
+ "City37": "Lang Son",
+ "City38": "Lao Cai",
+ "City39": "Long An",
+ "City40": "Nghe An",
+ "City41": "Ninh Binh",
+ "City42": "Ninh Thuan",
+ "City43": "Phu Tho",
+ "City44": "Phu Yen",
+ "City45": "Quang Binh",
+ "City46": "Quang Nam",
+ "City47": "Quang Ngai",
+ "City48": "Quang Ninh",
+ "City49": "Quang Tri",
+ "City50": "Soc Trang",
+ "City51": "Son La",
+ "City52": "Tay Ninh",
+ "City53": "Thai Binh",
+ "City54": "Thai Nguyen",
+ "City55": "Thanh Hoa",
+ "City56": "Thua Thien-Hue",
+ "City57": "Tien Giang",
+ "City58": "Tra Vinh",
+ "City59": "Tuyen Quang",
+ "City60": "Vinh Long",
+ "City61": "Vinh Phuc",
+ "City62": "Yen Bai",
+ "City63": "Nam Dinh",
+ "birthday": "Birthday",
+ "choose_birthday": "Please choose birthday",
+ "year": "Year",
+ "month": "Month",
+ "day": "Day",
+ "hour": "Hour",
+ "minute": "Minute",
+ "second": "Second",
+ "just": "Just",
+ "minute_ago": "/s1 minute ago",
+ "hour_ago": "/s1 hour ago",
+ "day_ago": "/s1 day ago",
+ "week_ago": "/s1 week ago",
+ "month_ago": "/s1 month ago",
+ "morning": "Morning",
+ "noon": "Noon",
+ "afternoon": "Afternoon",
+ "night": "Night",
+ "all_day": "All day",
+ "yesterday": "Yesterday",
+ "two_yesterday": "The day before yesterday",
+ "overnight": "Overnight",
+ "one": "One",
+ "ten": "Ten",
+ "hundred": "Hundred",
+ "thousand": "Thousand",
+ "ten_thousand": "Ten thousand",
+ "aries": "Aries",
+ "taurus": "Taurus",
+ "gemini": "Gemini",
+ "cancer": "Cancer",
+ "leo": "Leo",
+ "virgo": "Virgo",
+ "libra": "Libra",
+ "scorpio": "Scorpio",
+ "sagittarius": "Sagittarius",
+ "capricorn": "Capricorn",
+ "aquarius": "Aquarius",
+ "pisces": "Pisces",
+ "monday": "Monday",
+ "tuesday": "Tuesday",
+ "wednesday": "Wednesday",
+ "thursday": "Thursday",
+ "friday": "Friday",
+ "saturday": "Saturday",
+ "sunday": "Sunday",
+ "job": "Job",
+ "choose_career": "Please choose a career",
+ "career1": "Information Technology",
+ "career2": "Internet",
+ "career3": "IT",
+ "career4": "Telecommunications operation",
+ "career5": "Online game",
+ "career6": "Financial insurance",
+ "career7": "Investment",
+ "career8": "Equity fund",
+ "career9": "Insurance",
+ "career10": "Bank",
+ "career11": "Trust guarantee",
+ "career12": "Business service",
+ "career13": "Advisory",
+ "career14": "Self-employed",
+ "career15": "Beauty salons",
+ "career16": "Tourism",
+ "career17": "Hotel catering",
+ "career18": "Leisure and entertainment",
+ "career19": "Trading",
+ "career20": "Driver",
+ "career21": "Estate",
+ "career22": "Property management",
+ "career23": "Decoration worker",
+ "career24": "Detective",
+ "career25": "Engineering manufacturing",
+ "career26": "Builder",
+ "career27": "Civil Engineering",
+ "career28": "Machine made",
+ "career29": "Electronic",
+ "career30": "Biomedical Science",
+ "career31": "Food",
+ "career32": "Clothing",
+ "career33": "Energy",
+ "career34": "Transportation",
+ "career35": "Aviation",
+ "career36": "Railway",
+ "career37": "Shipping ship",
+ "career38": "Public transit",
+ "career39": "Logistics transportation",
+ "career40": "Culture Media",
+ "career41": "Media publishing",
+ "career42": "Design",
+ "career43": "Cultural communication",
+ "career44": "Advertising creativity",
+ "career45": "Anime",
+ "career46": "Public relations exhibition",
+ "career47": "Photography",
+ "career48": "Entertainment sports",
+ "career49": "Movie",
+ "career50": "Sports sports",
+ "career51": "Music",
+ "career52": "Model",
+ "career53": "Public utilities",
+ "career54": "Medical",
+ "career55": "Legal",
+ "career56": "Education",
+ "career57": "Government agency",
+ "career58": "Public welfare",
+ "career59": "Student",
+ "career60": "No",
+ "program": "Program",
+ "select_program": "Please select a nationality",
+ "healthy_exercise": "Exercise",
+ "night_party": "Party",
+ "gourmet_party": "Food",
+ "watch_movie": "Movie",
+ "play_games": "Games",
+ "travel_together": "Travel",
+ "voice_chat": "Voice chat",
+ "other": "Other",
+ "expect_lover": "Expect lover",
+ "choose_lover": "Please choose the expect lover",
+ "beautiful": "Beautiful",
+ "rich": "Rich",
+ "care_me": "Care for me",
+ "look_feeling": "Look feeling",
+ "doesnt_matter": "Does not matter",
+ "least_account": "Please fill in at least one social networking account",
+ "hide_account1": "Hide social account",
+ "more_information": "More information",
+ "height": "Height",
+ "weight": "Weight",
+ "not_show": "Hidden",
+ "self_introduction": "Introduction",
+ "registration_success1": "Registration success",
+ "exit": "Exit?",
+ "exit_registration": "Your personal information is not yet perfect, if you quit now, next time you enter, sign directly with a registered account",
+ "cant_see": "Men can't see other men's details",
+ "cant_see2": "Ms. cannot see other ladies details",
+ "see_one": "You can still see /s1 lady today.",
+ "only_see": "Non-members can only view 15 women per day",
+ "continue_see": "Continue to see",
+ "user_frozen": "User has frozen",
+ "search_user": "Please enter a nickname / occupation to search",
+ "nearby": "Nearby",
+ "member": "Member",
+ "new_registration": "New",
+ "authenticate": "Certified",
+ "first_online": "Online",
+ "not_positioned": "Positioning is off, distance cannot be calculated",
+ "unknown": "Unknown",
+ "secrecy": "Secrecy",
+ "collection": "Collection",
+ "cancel_collection": "Cancel collection",
+ "canceled_collection": "Canceled collection",
+ "like": "Like",
+ "added_like": "Added like",
+ "canceled_like": "Canceled like",
+ "blacklist": "Blacklist",
+ "blacklist_choose": "You will no longer see each other and each other's dynamic, Are you sure",
+ "blacklisted": "Blacklisted",
+ "reject_message": "Add the other party to the blacklist and reject the message",
+ "remove_blacklist": "Remove blacklist",
+ "blacklist_removed": "Blacklist removed",
+ "receive_message": "Move the other party out of the blacklist",
+ "online": "Online",
+ "paid_photo": "Paid photo album",
+ "application_view": "Apply",
+ "passed": "Passed",
+ "park": "Park",
+ "radio": "Radio",
+ "news": "News",
+ "me": "Me",
+ "more_operations": "More operations",
+ "anonymous_report": "Anonymous report",
+ "certified_video": "Video",
+ "passed_video": "She has passed the video certification authenticity",
+ "not_video": "She has not yet verified identity authenticity",
+ "her_appointment": "She is starting a date.",
+ "pay_join": "He joined through paid",
+ "passed_review": "He passed the identity security review",
+ "invited_user": "He joined from user /s1's invitation code",
+ "his_appointment": "He is starting a date.",
+ "her_dynamics": "Her dynamics",
+ "his_dynamics": "His dynamics",
+ "low_key": "She is very low-key",
+ "low_key2": "He is very low-key",
+ "her_photo": "Her photo album",
+ "his_photo": "His photo album",
+ "set_lock": "He set up the album lock",
+ "set_lock2": "She set up the album lock",
+ "free_unlock": "Unlock album (/s1), members free",
+ "unlock_user": "Unlock /s1 album",
+ "pay_unlock": "Paid unlock (/s1 H coin)",
+ "become_member": "Free for members",
+ "consumption_once": "Whether to use 1 chance to unlock the album of /s1",
+ "remaining_once": "(You still have /s1 chance today)",
+ "no_times": "You have run out of free opportunities today, would you like to give /s1 to unlock all the information for /s2?",
+ "pay": "Pay",
+ "view_user": "He set a limit, see the information need to request his consent",
+ "view_user2": "She set a limit, see the information need to request her consent",
+ "need_photo": "You need to send your photo to the other party. Rest assured, your photo will be destroyed 2 seconds after the other party presses the screen to view it.",
+ "choose_photo": "Choose a photo",
+ "send_application": "The application has been sent, and you will receive a message reminder after the other party confirms",
+ "not_authenticate": "You have not certified yet",
+ "after_authenticate": "Only after authenticating your authenticity can you interact with others",
+ "authenticate_now": "Authenticate now",
+ "destroy_after": "Destroy after viewing",
+ "destroyed": "Destroyed",
+ "red_photo1": "Red packet photo",
+ "ask_me": "Please ask me for a private chat.",
+ "filled_in": "Filled in, click to view",
+ "unlock_information": "Unlock all the information",
+ "unlock_choose": "Use 1 free unlock",
+ "your_evaluation": "Your true evaluation",
+ "her_evaluation": "Her true evaluation",
+ "his_evaluation": "His true evaluation",
+ "evaluate": "Evaluate",
+ "friendly": "Friendly",
+ "interesting": "Interesting",
+ "readily": "Readily",
+ "patient": "Patient",
+ "indifferent": "Indifferent",
+ "bad_temper": "Bad temper",
+ "courtesy": "Courtesy",
+ "generous": "Generous",
+ "lie": "Lie",
+ "unfriendly": "Unfriendly",
+ "anonymous_evaluation": "Anonymous evaluation",
+ "cant_evaluate": "You haven't dated her yet, can't evaluate",
+ "cant_evaluate2": "He hasn't dated you yet, can't evaluate",
+ "bad_evaluate": "Please provide relevant screenshots so that we can follow up to verify",
+ "submit": "Submit",
+ "evaluation_success": "Evaluation success",
+ "private_chat": "Private chat",
+ "close_reminder": "Close message reminder",
+ "closed_reminder": "Close message reminder success",
+ "open_reminder": "Open message reminder",
+ "opened_reminder": "Open message reminder success",
+ "her_account": "Her social account",
+ "his_account": "His social account",
+ "copy": "Copy",
+ "send_account": "Send my social account to her",
+ "enter_account": "Enter your social account",
+ "for_example": "For example: We chat abc",
+ "sent_she": "Sent to her",
+ "chat": "Voice chat",
+ "cantt_voice": "The other party turned off the voice chat function",
+ "authentication_voice": "Active voice after authenticating your authenticity",
+ "requesting_voice": "Requesting voice chat",
+ "waitting_answer": "Waiting to answer",
+ "answer": "Answer",
+ "hang_up": "Hang up",
+ "chatting": "Chatting",
+ "handsfree": "Handsfree",
+ "giving_gift": "Giving a gift",
+ "give_success": "Give a gift success",
+ "others_gift": "The other party has given a gift",
+ "given_gift": "You have given a gift worth /s1 H coin",
+ "earned_gift": "You have earned /s1 H coin",
+ "available_balance": "Available balance /s1",
+ "recharge": "Recharge",
+ "give": "Give",
+ "balance_insufficien": "Sorry, your balance is not enough.",
+ "first_recharge": "Please recharge the gift before giving it",
+ "give_coin": "This chat gives /s1 H coin",
+ "get_coin": "This chat gets /s1 H coin",
+ "give_get": "This chat gives /s1 H coin and gets /s2 H coin",
+ "chat_over": "Chat is over, duration /s1",
+ "message_center": "Message center",
+ "can_chat": "You can start a private chat on the person's user details page.",
+ "text_chat": "Text chat",
+ "system_information": "System information",
+ "system_notification": "System notification",
+ "report_failure": "The situation of the user /s1 you reported is not true. Please provide more valid evidence. Thank you!",
+ "report_success": "The fact that you reported the user /s1 is true and the system has processed the user.",
+ "successful_application": "Invitation code application is successful! Invitation code [/s1] (click to copy)",
+ "successful_application2": "The invitation code is applied successfully, thank you for introducing friends! Invitation code [/s1] (click to copy)",
+ "application_failed": "Invitation code application failed! Unfortunately, your application failed to pass the review. Please fill in the real information to effectively improve the approval rate.",
+ "important_notice": "【Important Notice】:",
+ "authentication_failed": "Your certification information does not meet the requirements, please modify and resubmit.",
+ "request1": "1. Please take the certification video according to the certification requirements.",
+ "request2": "2. Please upload a clear facial photo of the facial features",
+ "successful_authentication": "Congratulations, your certification application has been approved",
+ "re_upload": "Your newly uploaded photo has not been approved. Please re-upload as required.",
+ "upload_success": "Congratulations, your newly uploaded photo has been successfully reviewed.",
+ "caveat": "Your appointment registration has been deleted due to violations. Multiple violations or serious circumstances will limit or even limit your account. Please follow and remember. Thank you for your cooperation.",
+ "caveat2": "Your comment has been deleted due to violations. Multiple violations or serious circumstances will restrict or even limit your account. Please follow and remember. Thank you for your cooperation.",
+ "radio_message": "Radio message",
+ "no_message": "There is no such message for the time being.",
+ "dating_news": "/s1 posted a treaty message in /s2, click to view",
+ "go_see": "Go and see",
+ "thumbs_up": "/s1 liked your updates",
+ "thumbs_up2": "/s1 liked your date show",
+ "comment1": "/s1 commented on your activity",
+ "comment2": "/s1 commented on your dating show",
+ "replied_comment": "/s1 replied to your comment",
+ "signed_up": "/s1 has signed up for your date show",
+ "favorite_user": "Your favorite user /s1 posted a treaty, click to view",
+ "favorite_user2": "Your favorite user /s1 posted a dynamic, click to view",
+ "wallet_reminder": "Wallet reminder",
+ "paid_you": "/s1 paid (/s2 H coin) to view your red packet photo",
+ "paid_you2": "/s1 paid (/s2 H coin) to view your album",
+ "paid_you3": "/s1 paid to unlock all your information",
+ "view_application": "View application",
+ "view_application2": "/s1Request to view your details page",
+ "aging": "Allowed (valid for 15 days)",
+ "refuse": "Refuse",
+ "passed_request": "Passed request",
+ "l15_days": "/s1 has been approved by your review and is valid for 15 days.",
+ "evaluation_notice": "Evaluation Notifications",
+ "rate_her": "Please rate her",
+ "received_evaluation": "A woman who has contacted you has evaluated you: /s1",
+ "received_evaluation2": "A man who has contacted you has evaluated you: /s1",
+ "application_appeal": "If the evaluation is not true, you can apply for the above and we will verify it.",
+ "appeal": "I want to appeal",
+ "appealed": "Already appealed",
+ "waiting_results": "We will check the situation as soon as possible and tell you the result by email.",
+ "successful_appeal": "Your appeal is evaluated: /s1 appeal is successful and we will withdraw this review for you.",
+ "social_account": "Social account",
+ "get_account": "/s1 sent you his social account",
+ "edit_information": "Edit information",
+ "save": "Save",
+ "passed_verification1": "You passed the identity security verification",
+ "by_code": "You join through the invitation code of the veteran user /s1",
+ "by_paying": "You join by paying",
+ "passed_verification": "You have authenticated identity authenticity through video",
+ "not_certified": "You have not verified identity authenticity",
+ "verificating": "We are certifying your authenticity",
+ "real_girl": "Certified girls are more popular",
+ "certificating": "In certification",
+ "re_upload2": "Please re-upload the video",
+ "update_certification": "Update certification",
+ "enjoy_privileges": "Join members to enjoy privileges",
+ "expires": "/s1 expires",
+ "wallet": "Wallet",
+ "setting": "Privacy",
+ "my_dynamic": "My dynamic",
+ "my_album": "My album",
+ "first_photo": "Upload my first photo",
+ "no_photo": "Have photos to attract more men",
+ "upload_photos": "Upload photos",
+ "upload_video": "Upload video",
+ "upload": "Upload photos",
+ "set_photo": "Set red packet photo",
+ "photo_order": "Long press to drag the photo",
+ "my_evaluation": "My evaluation",
+ "my_show": "My show",
+ "i_like": "I like",
+ "your_favorite": "Your favorite lady will show here",
+ "your_favorite2": "The guy you like will show here",
+ "no_data": "No data",
+ "historical_visitor": "Historical visitor",
+ "visit_you": "Have /s1 people seen you",
+ "visit_photo": "/s1 person has destroyed your photo",
+ "recovery_photo": "One-click recovery",
+ "setting2": "Setting",
+ "apply_code": "Help a friend apply for an invitation code",
+ "issue_choose": "The application invitation code is free, and we will evaluate whether to issue the invitation code based on your historical spending. In order to maintain the atmosphere of the park, please send the invitation code to a reliable friend.",
+ "successfully_submit": "Successfully submit an application",
+ "share_app": "Share the app to a friend",
+ "need_help": "Help",
+ "need_help2": "Contact Customer Service",
+ "need_help3": "In order to improve service efficiency, if there is your problem below, please reply directly to the serial number!",
+ "question1": "[1] What is the reason why the account is frozen?",
+ "answer1": "In any of the following cases, the account will be frozen: 1 liar 2 intermediary 3 harassment advertisement 4 more people report 5 already have other accounts 6 times issued illegal radio broadcasts ignore warning 7 users themselves request cancellation",
+ "question2": "[2] When can the cash in the wallet be cashed out?",
+ "answer2": "All proceeds will go directly to the wallet, withdrawal takes three days (starting with the time of collection), the amount collected after three days will enter the wallet, the amount >=10 yuan can be withdrawn",
+ "question3": "[3] Why didn't I show the red packet I gave?",
+ "answer3": "It may be caused by a network cause. Rest assured, in this case the other party can not receive your red packet, the red packet will be automatically refunded after 24 hours.",
+ "question4": "[4] How long does it take to withdraw cash?",
+ "answer4": "Expected to arrive within two business days. Tips: Please confirm the account number is correct!",
+ "question5": "[5] How to report other users/radio broadcasts anonymously?",
+ "answer5": "Go to the other party's details page or select a radio station broadcast, click on the top right corner and select [Anonymous Report], please fill in the relevant report information to report it.",
+ "question6": "[6] How to become an authenticated user?",
+ "answer6": "The certification must meet the following requirements: 1Personal information to fill in a valid social account 2 Album at least upload a clear face photo 3 See the verification code on the certification page, write the nickname + verification code 4 on the paper, hold the paper, Take a video with your face and click Upload Authentication Video",
+ "question7": "[7] Can the certified video be hidden?",
+ "answer7": "Can choose whether to display: User Center - click on the authentication video - bottom left 'Show the certified video on my details page'",
+ "question8": "[8] How to avoid the certification being cancelled?",
+ "answer8": "The photo album has at least one photo of me.",
+ "question9": "[9] What is the reason for the dynamic deletion?",
+ "answer9": "Dynamics cannot publish sensitive maps, sensitive words, including but not limited to implied or explicit words, cannot post personal information (including avatars, nicknames, contact details), violations will be deleted",
+ "question10": "[10] How to cancel the account?",
+ "answer10": "If you cancel the account, you will not be able to log in to the app. If you want to use the service later, you will need to re-register. Please consider carefully. If you still decide to cancel your account, please reply to the serial number [12] contact customer service.",
+ "question11": "[11] What should I do if I forget my password?",
+ "answer11": "Users who register by mobile phone number or who have a mobile phone number can reset their password by using the \"Forgot Password\" function in the upper right corner of the login page. Unbound users, please bind the phone number first, then set a new login password.",
+ "question12": "[12] Other questions / transfer customer service",
+ "answer12": "Hello, what can I do for you? Please describe your problem (Customer service time is 8:00 every day - 02:00 the next day, due to the large number of consultations, you may need to wait for a reply)",
+ "certification_center": "Certification center",
+ "for_example2": "Example of certified video capture mode",
+ "certification_conditions": "Certification conditions",
+ "conditions1": "1. Good personal image",
+ "conditions2": "2. Upload at least one photo of yourself in the album",
+ "verification_method": "Verification method",
+ "method3": "1. Take a piece of paper and write your nickname and the following verification code:",
+ "method4": "2. Hold this piece of paper and take a video with your face (3~15 seconds)",
+ "upload_video2": "Upload certification video",
+ "after_authentication": "After the authentication is successful, your avatar will have a real logo.",
+ "show_video": "Display the certified video on my details page",
+ "uploaded_video": "Uploaded certified video",
+ "under_review": "During the review (within 24 hours)",
+ "certification_status": "Certification status",
+ "certified": "You have been certified",
+ "wait_resubmitted": "Authentication waiting to be resubmitted",
+ "reason_failure": "Your certified video does not meet the requirements due to:",
+ "claim": "Please take the certification video according to the certification requirements.",
+ "claim2": "Please upload a photo of the face of the facial features in the album.",
+ "re_upload_video": "Re-upload the certification video",
+ "update_video": "Update upload certification video",
+ "mask_coin": "H coin",
+ "get_way": "You can get H coins by recharging, etc.",
+ "coin_use": "It can be used to chat and give gifts when chatting.",
+ "coin_total": "H coin total",
+ "can_redeemed": "Can be redeemed",
+ "who_account": "/s1 account",
+ "bind_account": "Bind /s1 account",
+ "your_account": "Your /s1 account",
+ "get_coin2": "You got the /s1 H coin by recharging",
+ "viewed_your": "/s1viewed your social account",
+ "give_gift": "/s1 presented a gift: 1 /s2",
+ "add_coin": "+/s1 H coin",
+ "give_one": "You give 1 /s1 to /s2",
+ "less_coin": "-/s1 H coin",
+ "exchange_cash": "Exchange cash",
+ "withdrawal_application": "Withdrawal application",
+ "redeem_choose": "You have /s1 H coins to convert to /s2, and /s3 H coins remaining after redemption. Are you sure to redeem?",
+ "application_submitted": "Application submitted",
+ "working_days": "We will handle it within 2 working days. If you have any questions, please contact customer service.",
+ "cash": "Cash",
+ "handling_fee": "Whenever you receive a red packet on the chat page, the red packet amount will be here. No one reported that you can redeem cash within 3 days, the system charges 5% fee",
+ "total_account": "Total account",
+ "cannot_redeemed": "Insufficient amount, cannot be redeemed",
+ "successful_redemption": "Successful redemption",
+ "redeem_choose2": "Your account total is /s1, this time you can redeem /s2, will you redeem it?",
+ "personal_details": "Personal details",
+ "public": "Public (recommended)",
+ "paid_album": "Paid View album",
+ "must_pay": "Others must pay to view your photo album, the cost is up to you, which may reduce your traffic",
+ "set_amount1": "Set the view amount",
+ "first_upload": "Please upload photos before setting up paid albums",
+ "need_permission": "Can only be viewed by my permission",
+ "permission_choose": "Must send photos to me, can view my homepage after I allow it",
+ "hide_me": "Hide me from a list of people nearby",
+ "hide_distance": "Hide my distance",
+ "hide_account": "Hide my social account",
+ "chat_setting": "Chat settings",
+ "chat_me": "Allow authorized people to initiate a voice chat with me",
+ "successfully_saved": "Successfully saved",
+ "on_dynamic": "You have not posted dynamic",
+ "release_dynamics": "Release dynamics",
+ "dynamic_details": "Dynamic details",
+ "release": "Release",
+ "i_posted": "I posted",
+ "delete_dynamic": "Delete dynamic",
+ "delete_choose": "Are you sure you want to delete this dynamic?",
+ "posted_on": "Posted on /s1",
+ "thumbs_up3": "Thumbs up",
+ "already_praised": "Already praised",
+ "comment": "Comment",
+ "send": "Send",
+ "comment_closed": "Comment closed",
+ "your_comment": "Only publishers can see your comment",
+ "everyone_comment": "Everyone can see your comment",
+ "prohibit_comments": "Prohibit comments",
+ "comments_disabled": "Comments disabled",
+ "open_comments": "Open Comments",
+ "already_open": "Already open comment",
+ "reply": "Reply",
+ "report": "Report",
+ "report_choose": "Are you sure you want to report this comment?",
+ "successful_report": "Successful report, we will deal with it as soon as possible",
+ "successfully_deleted": "Successfully deleted",
+ "please_civilization": "People who talk about civilization are more popular. Don't post vulgar, pornographic, or otherwise revealing the privacy of others.",
+ "same_sex": "Hidden with the same sex user",
+ "member_free": "Members are free, non-members need /s1 H coin",
+ "certified_free": "Certified women are free 3 times, then need to pay /s1H coins",
+ "enter_something": "Please enter text or select image",
+ "raid_release": "Paid release (/s1 H coin)",
+ "become_member2": "Free for members",
+ "now_certification": "Immediate certification, free release",
+ "successfully_released": "Successfully released",
+ "no_program": "You haven't posted a program yet.",
+ "program_details": "Program details",
+ "program_theme": "Program theme",
+ "click_select": "Click to select",
+ "city": "City",
+ "select_city": "Select City",
+ "time": "Time",
+ "select_date": "Select date",
+ "select_time": "Select time",
+ "unlimited_time": "Unlimited time",
+ "supplementary_explanation": "Supplementary explanation",
+ "image": "Image",
+ "delete_program": "Delete program",
+ "delete_choose2": "Are you sure you want to delete this program?",
+ "please_choose": "Please select a program theme",
+ "please_choose2": "Please select the desired object",
+ "please_choose3": "Please select city",
+ "please_choose4": "Please select a date",
+ "please_choose5": "Please select time",
+ "release_program": "Release program",
+ "sign_up": "Sign up",
+ "end_registration": "End registration",
+ "end_choose": "Are you sure you want to end your appointment?",
+ "contact_her": "Contact her",
+ "talk_him": "Talk to him privately",
+ "report_choose2": "Are you sure you want to report this registration information?",
+ "release_time": "Release time",
+ "activity_time": "Activity time",
+ "any_sex": "Any sex",
+ "look_women": "Look Ms.",
+ "look_men": "Look Men",
+ "unlimited_area": "Unlimited area",
+ "program_deleted": "The program has been deleted",
+ "cant_comment": "Non-members can't comment",
+ "sign_up2": "Join",
+ "need_photo2": "Registration needs to send your photo of the face (only the other party can see)",
+ "registration_success": "Registration is successful, if the other party feels appropriate, you will be contacted.",
+ "has_ended": "Has ended",
+ "men_cant": "Men can't sign up for men's shows",
+ "ms_cant": "Ms. can't sign up for a lady's show",
+ "men_cant2": "Men can't comment on men's shows",
+ "ms_cant2": "Ms. can't comment on the lady's show",
+ "message_push": "Message push, change password",
+ "phone_number": "Phone number",
+ "bind_phone1": "Bind phone number",
+ "more_safer": "Bind your phone number to make your account safer",
+ "modify_choose": "Do you want to modify the bound mobile number?",
+ "change_password": "Change password",
+ "first_bind": "Users need to bind the mobile phone number before they can set the login password.",
+ "old_password": "Old password",
+ "current_password": "Please enter your current login password",
+ "new_password": "New password",
+ "set_new": "Please set a new password, at least 6 digits",
+ "clear_cache": "Clear image cache",
+ "cleared_successfully": "Cleared successfully",
+ "user_agreement1": "User agreement",
+ "sign_out": "Sign out",
+ "out_choose": "Are you sure you want to log out?",
+ "push_settings": "Push settings",
+ "permission_denied": "Permission denied",
+ "push_setting2": "Message push settings",
+ "private_chat2": "Private chat message",
+ "new_date": "Have a new date",
+ "passed_request2": "A lady passed my request",
+ "men_view": "Some men apply to view my profile page",
+ "men_view2": "Some men look at my social account",
+ "men_view3": "Some men look at my red packet photos",
+ "men_view4": "Someone who has viewed me sent me a social account",
+ "applied_successfully": "Invitation code applied successfully",
+ "after_open": "Will open the corresponding message type when opened",
+ "if_something": "If you have paid her/he in the last 3 days, we will automatically refund the amount to you after we verify the report.",
+ "advertise": "Advertise",
+ "false_photo": "False photo",
+ "erotic_vulgarity": "Erotic vulgarity",
+ "harassment": "Harassment",
+ "she_liar": "She is a liar",
+ "he_liar": "He is a liar",
+ "provide_screenshots": "Please provide relevant screenshots so that we can follow up to verify",
+ "describe_details": "Please describe the details (within 100 words)",
+ "report_reason": "Please select the reason for reporting",
+ "report_success2": "Report success",
+ "successfully_modified": "Successfully modified",
+ "boy": "Boy",
+ "girl": "Girl",
+ "already_applied": "Applied",
+ "view_registration": "View registration",
+ "expand": "Expand",
+ "collapse": "Collapse",
+ "application_notice": "Application Notifications",
+ "agrees_application": "Someone agrees with your application",
+ "red_photo": "Red packet photo",
+ "dont": "Do not upload illegal nudity photos/videos, or severely",
+ "current_version": "Current version",
+ "bank_card": "Binding bank card",
+ "choose_bank": "Please select an account bank",
+ "bank_number": "Please enter the bank card number",
+ "id_number": "Please enter the ID number",
+ "name": "Name",
+ "bank_number2": "Bank card number",
+ "license_number": "License number",
+ "bind_phone": "Bind phone number",
+ "his_homepage": "His homepage",
+ "her_homepage": "Her homepage",
+ "wechat_pay": "WeChat payment",
+ "facebook_pay": "Facebook payment",
+ "google_pay": "Google pay",
+ "payment_successful": "Payment successful",
+ "set_amount": "Set withdrawal amount",
+ "enter_amount": "Please enter the number of H coins",
+ "can_withdraw": "Can withdraw",
+ "language_set": "Language settings",
+ "user_agreement": "User Agreement",
+ "renewal_fee": "Renewal fee",
+ "open_immediately": "Open immediately",
+ "total": "Total",
+ "half_month": "Half a month",
+ "month2": "/s1 month",
+ "cancel_shield": "Cancel shield",
+ "blacklist2": "Blacklist",
+ "longTime": "(Members can extend the time by 6 seconds)",
+ "longClick": "Press and hold the screen to view",
+ "stop_program": "Please finish the program that is in effect first",
+ "not_love": "Men can't collect men",
+ "not_love2": "Women can't collect women",
+ "women_free": "Women can post for free",
+ "not_up_man": "He has not uploaded photos yet",
+ "not_up_women": "She has not uploaded photos yet",
+ "not_illage": "Do not conduct illegal transactions through the platform. If it is reported, it will be processed as a seal.",
+ "alreay_join": "Signed",
+ "sure_delete": "Are you sure you want to delete this photo?",
+ "white_now": "Fill in now",
+ "personal": "You haven't filled out a personal introduction yet, and the attractive personal introduction has a great impact on the success of the appointment.",
+ "success": "Success",
+ "fail": "Fail",
+ "moneyPageTip": "Only certified users can set red packet photos",
+ "alreadyJoin": "You have already signed up and will contact you if they feel it is appropriate.",
+ "waring": "Violation warning",
+ "userPravicy": "Respect user privacy, do not take screenshots. If you have another time, you will be prohibited from viewing other user photos.",
+ "outTime": "Appointment time has expired, please edit",
+ "reviewing": "under review",
+ "reviewed": "Successful review",
+ "reviewedFail": "Audit failure",
+ "needCard": "Users need to bind the bank card before they can withdraw cash.",
+ "women_not_d": "Ms. can't comment on the dynamics of women",
+ "man_not_d": "Men can't comment on men's dynamics",
+ "have_picture": "Have photos to attract women.",
+ "up_cancle": "Sliding cancels sending",
+ "msg_not": "Message cannot be empty",
+ "need_record": "This feature requires permission to record",
+ "downloading_video": "Downloading video file",
+ "reinput": "Please re-enter the question number",
+ "dy_delete": "Your activity is reported anonymously by the user. After the system verifies that the activity has been deleted, please do not violate the rules.",
+ "pro_delete": "Your program is reported anonymously by the user. After the system has verified that the program has been deleted, please do not violate the rules.",
+ "con_delete": "Your comment has been reported anonymously by the user. The system has verified that the comment has been deleted. Please do not violate the rules.",
+ "coin_returen": "Reported by anonymous users, the system verifies that you have recently violated the rules and has received your recent return of H currency. If there is a next time, the account will be frozen.",
+ "voicing": "Illegal acts such as pornography and obscenity are prohibited during the call.",
+ "help": "Customer service",
+ "translate_on": "Manual translation on",
+ "translate_off": "Manual translation off",
+ "becomeSvip": "Consuming /s1 H coins will be renewed for SVIP",
+ "need_svip": "Svip permission can be turned on",
+ "cannot_vip": "SVIP cannot be renewed as VIP",
+ "offline": "You are offline and cannot send and receive messages",
+ "otherLogin": "The account is logged in on another device, you are offline",
+ "no_new": "No new news for the time being",
+ "over": "Translated",
+ "bad_ev": "Are you sure you want to make a bad review of this translation?",
+ "right5": "Right 5",
+ "right6": "Right 6",
+ "man_vi": "Gentleman",
+ "women_vi": "Lady",
+ "kf_tips": "In order to improve service efficiency, if there is your problem below, please reply directly to the serial number!",
+ "rejected": "Rejected",
+ "buy_vip": "You have purchased /s1H coins to buy members.",
+ "buy_program": "You consumed /s1H coins to post a dynamic program.",
+ "del_add_money": "Your H currency withdrawal request has been processed, transferred /s1 to your account, please check",
+ "adding_money": "The /s1H currency you applied for withdrawal is under review.",
+ "free_translate": "Free translation commissioner real-time translation",
+ "personalTraff": "Exclusive customer service for you",
+ "ManTranslate": "In human translation...",
+ "robotTranslate": "In machine translation...",
+ "translated": "Manual translation completed",
+ "delete_progarm": "Healthy communication, please do not broadcast vulgar content, once it is found, it will be deleted.",
+ "open_location": "Targeting permission is not turned on",
+ "get_location": "Please enable targeting in your phone settings to get additional user distance",
+ "confirm_exit": "Press again to exit",
+ "free_program": "Free broadcasts per day /s1 chance",
+ "picture": "Image",
+ "camera": "Camera",
+ "video": "Video",
+ "red_money": "Red packet",
+ "stick": "Paste",
+ "press_say": "Hold and talk",
+ "get_money": "/s1 received your red packet",
+ "you_get_money": "You received the red packet of /s1",
+ "ones_money": "/s1 red packet",
+ "money_over": "Red packet has expired",
+ "downloading_fail": "Download file failed",
+ "downloading": "Downloading video file",
+ "back_money": "Unclaimed red packet will be refunded after 24 hours",
+ "no_money": "Red packet does not exist",
+ "already_money": "Red packet has been received",
+ "back_user": "Expired, has been refunded to the account",
+ "waiting_user": "Waiting for the other party",
+ "other_get": "The other party has received",
+ "little": "Take the money and spend it.",
+ "put_money": "Cash into the red packet",
+ "mount": "Amount",
+ "over_time": "Expired",
+ "has_get": "Received",
+ "no_gift": "No gifts for the time being",
+ "sent_gift": "Gift",
+ "fill_tips": "If you fill in successfully, you can get /s1H coins, which cannot be modified after binding.",
+ "bind_code": "Bind invitation code",
+ "invide_code": "Invitation code",
+ "confirm_delete": "Confirm deletion",
+ "has_eva": "You have already evaluated",
+ "open": "open",
+ "voice": "Voice",
+ "release_send": "Release send",
+ "time_little": "Recording time is too short",
+ "not_online": "The other party is not online, can't connect to Mai",
+ "give_red_money": "You sent a red packet of /s2 H coin to /s1",
+ "get_red_money": "You received /s1’s red packet of /s2 H coins.",
+ "give_other_money": "You have won the /s1 /s2H coin",
+ "get_other_money": "You got a reward for /s2 H coins of /s1.",
+ "svip": "Super member",
+ "recommend": "Recommend",
+ "paid_you4": "You paid (/s2H coins) to view the red packet photo of /s1",
+ "paid_you5": "You paid for /s2H coins to view /s1's album",
+ "paid_you6": "You paid to unlock all the information of /s1",
+ "UG_LINE0": "Hibok license and service agreement",
+ "UG_LINE1": "[First and Introduction]",
+ "UG_LINE2": "Qianhai Youlong Technology Co., Ltd. (hereinafter referred to as “Qianhai Youlong Technology Co., Ltd.”) hereby reminds users to carefully read and fully understand this Service Agreement (hereinafter referred to as “Agreement”). Users should carefully read and fully understand this Agreement. The terms, including the exemption or limitation of Qianhai Youlong Technology Co., Ltd.'s liability and the restrictions on the rights of users. Please read carefully and choose to accept or not accept this Agreement (minors should be accompanied by a legal guardian). You are not authorized to register, log in or use the services covered by this Agreement unless you accept all of the terms of this Agreement. Your registration, login, use, etc. will be deemed acceptance of this Agreement and you agree to be bound by the terms of this Agreement.",
+ "UG_LINE3": "This Agreement is an agreement between you (hereinafter referred to as \"User\" and Qianhai Youlong Technology Co., Ltd. regarding the registration, registration and use of the \"Hibok service\". This Agreement describes the relationship between Qianhai Youlong Technology Co., Ltd. and the User regarding \"Hibok services\". Rights and obligations. “User” means the individual or organization that registers, logs in, uses, and browses the Service. Your acceptance of this Agreement is subject to all terms and conditions, including any modifications made by Qianhai Youlong Technology Co., Ltd. to any Terms of Service at any time. The Agreement may be updated by Qianhai Youlong Technology Co., Ltd. at any time. The updated terms of the agreement will be replaced by the original terms of the agreement without prior notice. Users can check the terms of the latest agreement in this app. After Qianhai Youlong Technology Co., Ltd. amends the terms of the agreement, If the user does not accept the revised terms, please stop using the services provided by Qianhai Youlong Technology Co., Ltd. immediately, and the user's continued use of the services provided by Qianhai Youlong Technology Co., Ltd. will be deemed to have accepted the revised agreement.",
+ "UG_LINE4": "First, the use of rules",
+ "UG_LINE5": "1. The user fully understands and agrees that only the platform for information sharing, transmission and acquisition is provided to the user. The user must be responsible for all actions under the registered account, including but not limited to any content you transmit and any resulting results. .",
+ "UG_LINE6": "2. Qianhai Youlong Technology Co., Ltd. assumes no responsibility for any content transmitted by or through the Services that does not reflect Qianhai Youlong Technology Co., Ltd.'s views or policies.",
+ "UG_LINE7": "3. The user fully understands and agrees that it is a social information browsing product based on the user relationship network. The user must bear full responsibility for the authenticity, legality and validity of the registered information, and the user must not impersonate others; Any information shall be transmitted in the name; no malicious use of the registered account may cause misidentification by other users; otherwise, Qianhai Youlong Technology Co., Ltd. shall have the right to immediately stop providing the service, recover the account number and assume all legal liabilities arising therefrom.",
+ "UG_LINE8": "4. The user shall be solely responsible for the authenticity, legality, harmlessness and validity of the information transmitted on the website. Any legal liability related to the information transmitted by the user shall be borne by the user and shall not be related to Qianhai Youlong Technology Co., Ltd.",
+ "UG_LINE9": "5. Qianhai Youlong Technology Co., Ltd. reserves the right to change, suspend, limit, terminate or revoke the services of any or all of the services of the Service at any time without any notice due to business development needs, and the user shall bear this risk.",
+ "UG_LINE10": "6. The services provided may include advertisements, and the user agrees to display advertisements provided by third-party suppliers and partners during use.",
+ "UG_LINE11": "7. Users may not use or service to make, upload, copy or send the following content:",
+ "UG_LINE12": "(1) against the basic principles established by the Constitution;",
+ "UG_LINE13": "(2) endangering national security, divulging state secrets, subverting state power, and undermining national unity;",
+ "UG_LINE14": "(3) damaging national honors and interests;",
+ "UG_LINE15": "(4) Inciting ethnic hatred, ethnic discrimination, and undermining national unity;",
+ "UG_LINE16": "(5) Destroying the state's religious policies and promoting cults and feudal superstitions;",
+ "UG_LINE17": "(6) Spreading rumors, disrupting social order and undermining social stability;",
+ "UG_LINE18": "(7) spreading obscenity, pornography, gambling, violence, murder, terror or abetment;",
+ "UG_LINE19": "(8) insulting or slandering others and infringing upon the lawful rights and interests of others;",
+ "UG_LINE20": "(9) Information containing other content prohibited by laws and administrative regulations.",
+ "UG_LINE21": "8. Qianhai Youlong Technology Co., Ltd. may, in its reasonable judgment, cease to transmit any of the foregoing in accordance with law, in violation of relevant laws and regulations or the provisions of this Agreement; or infringement, obstruction, threats to the rights or safety of any person, or the act of impersonating another person. And shall have the right, at its sole discretion, to take appropriate legal action against any person who violates these Terms, including but not limited to removing illegal, infringing, improper, etc. from the Service, terminating the violators' membership and preventing them from Use all or part of the service, and keep relevant information and report to relevant departments according to laws and regulations.",
+ "UG_LINE22": "9. User rights and obligations:",
+ "UG_LINE23": "(1) The ownership of the Qianhai Youlong Technology Co., Ltd. account is owned by Qianhai Youlong Technology Co., Ltd. After the user completes the application for registration, he or she will obtain the right to use the account. The right to use belongs to the initial applicant and is prohibited from being donated, borrowed, rented, transferred or sold. Qianhai Youlong Technology Co., Ltd. has the right to recycle the user's account due to business needs, and has the right to use the user's photos, videos, voices, etc. for product promotion activities.",
+ "UG_LINE24": "(2) The user has the right to change or delete the personal data, registration information and transmission content on Qianhai Youlong Technology Co., Ltd. However, please note that deleting the information will also delete any text and images you have stored in the system. The user is responsible for this risk.",
+ "UG_LINE25": "(3) The user is responsible for the safekeeping of the registered account information and the account password. The user is responsible for the registered account and the behavior under the password. The User agrees not to use the account number or password of another member under any circumstances. You agree to notify Qianhai Youlong Technology Co., Ltd. immediately if you suspect that someone else is using your account or password.",
+ "UG_LINE26": "(4) The User shall abide by the terms of this Agreement and use the Service correctly and appropriately. If the User violates any of the terms of this Agreement, Qianhai Youlong Technology Co., Ltd. shall have the right to terminate the service of the default user Qianhai Youlong Technology Co., Ltd. account in accordance with the Agreement. At the same time, Qianhai Youlong Technology Co., Ltd. reserves the right to withdraw Qianhai Youlong Technology Co., Ltd. account number and username at any time.",
+ "UG_LINE27": "(5) If the user has his or her common English account, the user has the right to register the English account as an account first, but if the user does not register the account after the service is online, or the user has registered the WeChat account, but If the English account is not used as the WeChat account, the user is deemed to have waived the right to register the English account as a WeChat account. Qianhai Youlong Technology Co., Ltd. has the right to recycle and distribute the English account to other users, so as to avoid wasting resources. The problem is the user's responsibility.",
+ "UG_LINE28": "(6) If the user does not log in to the account after registering the account for a long time, Qianhai Youlong Technology Co., Ltd. has the right to recycle the account, so as to avoid wasting resources, and the problems are caused by the user.",
+ "UG_LINE29": "(7) The user may use the report function to maintain the user platform's rights and interests. If the user receives the report feedback, the reported user is obliged to inform or cooperate with the customer service personnel to verify the situation. The report content is verified. The mask park has the right to warn and restrict the user. The account usage function and other methods restrict the user's violations. The serious violation of the Hibok has the right to directly freeze the account, and the balance in the account is not returned. If the account is frozen and needs to be appealed, the user can contact customer service.",
+ "UG_LINE30": "Second, privacy protection",
+ "UG_LINE31": "The user agrees that the personal privacy information refers to those information that can personally identify the user or involve personal communication, including the following information: the user's real name, mobile phone number, WeChat account, facebook account, and IP address. The non-personal private information refers to the general information that the user clearly and objectively reflects the basic record information of the Qianhai Youlong Technology Co., Ltd. server and all other personal privacy information, and the above-mentioned private information that the user agrees to disclose. . Respecting the privacy of the user's personal privacy information is a consistent system of Qianhai Youlong Technology Co., Ltd. Qianhai Youlong Technology Co., Ltd. will take reasonable steps to protect the user's personal privacy information. Qianhai Youlong Technology Co., Ltd., in addition to legal or legal requirements or government consent. The user's personal privacy information will not be disclosed or disclosed to third parties other than the partner unit without the user's consent. However, the user chooses to agree at the time of registration, or the user and Qianhai Youlong Technology Co., Ltd. and the cooperation unit have otherwise agreed on the disclosure or use of the user's personal information, and the user shall bear any risk that may arise, Qianhai Youlong Technology Co., Ltd. does not Responsible. At the same time, in order to operate and improve Qianhai Youlong Technology Co., Ltd.'s technology and services, Qianhai Youlong Technology Co., Ltd. may collect or provide non-personal private information to users of third parties, which will help Qianhai Youlong Technology Co., Ltd. to provide users with a better user experience and improve Quality of service of Qianhai Youlong Technology Co., Ltd. Qianhai Youlong Technology Co., Ltd. collects data based on user interactions with Qianhai Youlong Technology Co., Ltd. and user choices, including user privacy settings and products and features used by users. Data collected by Qianhai Youlong Technology Co., Ltd. may include SDK/API/JS code version, IP address, platform, timestamp, application identifier, application version, application distribution channel, standalone device identifier, iOS advertising identifier (IDFA), Android ad Primary identifier, network card (MAC) address, International Mobile Equipment Identity (IMEI), device model, terminal manufacturer, terminal device operating system version, session start/stop time, language location, time zone, and network status (WiFi, etc.) Hard disk, CPU and battery usage, etc. This will enable Qianhai Youlong Technology Co., Ltd. to conduct internal data analysis and research, third-party SDK statistical services, and improve Qianhai Youlong Technology Co., Ltd.'s products or services. In order to ensure the authenticity of the user's identity, the user is provided with better security protection, and the biometric information (such as personal sensitive information) such as identity information or facial features that the user needs to submit is required to complete the real person authentication required or necessary for the specific product service. The above information will only be used to verify the authenticity of the user's identity. The above information provided by the user will continue to be authorized by Qianhai Youlong Technology Co., Ltd. during the user's use of the Service. Qianhai Youlong Technology Co., Ltd. will stop using it when the user logs out of the account. The above information will be stored in the People's Republic of China. For cross-border transmission, Qianhai Youlong Technology Co., Ltd. will separately obtain the user's authorization. App user authenticity authentication requires the user to provide some information that can verify the authenticity of the user's identity. Relevant information is only used for platform review and will not be disclosed to any other users or for commercial purposes, except for legal or related departments requesting intervention.",
+ "UG_LINE32": "Third, Qianhai Youlong Technology Co., Ltd. Trademark Information ",
+ "UG_LINE33": "The logos, characters or their components, and other Qianhai Youlong Technology Co., Ltd. logos and products and service names involved in Qianhai Youlong Technology Co., Ltd.'s services are trademarks of Qianhai Youlong Technology Co., Ltd. (hereinafter referred to as “Qianhai Youlong Technology Co., Ltd. Logo”). The Qianhai Youlong Technology Co., Ltd. logo may not be displayed or used or otherwise disposed of in any way without the prior written consent of Qianhai Youlong Technology Co., Ltd., and may not indicate to others that you have the right to display, use, or otherwise be authorized to deal with the Qianhai Youlong Technology Co., Ltd. logo.",
+ "UG_LINE34": "Fourth, legal responsibility and exemption",
+ "UG_LINE35": "1. The user violates the provisions of this Agreement or the relevant terms of service, resulting in or arising from any claims, claims or losses claimed by any third party, including reasonable attorneys' fees, and the user agrees to compensate Qianhai Youlong Technology Co., Ltd. and the partner company, affiliates, And protect it from damage.",
+ "UG_LINE36": "2. Qianhai Youlong Technology Co., Ltd. and its partners are not responsible for any losses suffered by users due to communication line failures, technical problems, network, computer failures, system instability and other various force majeure causes of third parties such as the telecommunications department.",
+ "UG_LINE37": "3. Due to technical failures and other irresistible incidents affecting the normal operation of the service, Qianhai Youlong Technology Co., Ltd. and the cooperation unit promised to cooperate with the relevant units in the first time to deal with the repairs in time, but all losses suffered by the users, Qianhai Youlong Technology Co., Ltd. and The partner unit is not responsible.",
+ "UG_LINE38": "4. This service, like most Internet services, may be affected by various security issues, including but not limited to user reasons, network service quality, social environment and other factors. For example, other users use the user's data to cause real life. Harassment; other software downloaded or installed by users or other websites that are visited contain \"Trojan Horse\" and other viruses, which threaten the security of the user's computer information and data, which in turn affects the normal use of the service. Users should strengthen the information security and user information protection awareness, and pay attention to strengthen password protection to avoid loss and harassment.",
+ "UG_LINE39": "5. Users must understand that the use of this service may be affected by unstable factors in various links due to Internet services. Therefore, the service has the risk of service interruption or failure to meet user requirements due to force majeure, computer virus or hacker attack, system instability, user location, user shutdown, and any other technology, internet, communication line reasons. The user is responsible for the above risks and Qianhai Youlong Technology Co., Ltd. does not guarantee. Qianhai Youlong Technology Co., Ltd. assumes no responsibility for the fact that the user cannot send and receive reading information or receive incorrect information.",
+ "UG_LINE40": "6. The user must understand that there are threats, defamatory, offensive or illegal content or acts or violations of the rights of others (including intellectual property rights) from any other person in the course of using the service. The risk of anonymous or impersonal information is subject to the above risks. Qianhai Youlong Technology Co., Ltd. and the partner company do not make any type of guarantee for the service, whether explicit or implied, including all relevant information authenticity, merchantability, suitable for a certain A specific use, title and non-infringement of implied warranties and conditions shall not be liable for any direct, indirect, incidental, special or consequential damages resulting from any improper or unlawful use of the Services by the User.",
+ "UG_LINE41": "7. The information content defined by Qianhai Youlong Technology Co., Ltd. includes: text, software, sound, photos, videos, graphics; all content in the advertisement; commercial information provided by Qianhai Youlong Technology Co., Ltd. for users, all of which are subject to copyright, trademark, and other intellectual property rights. And the protection of ownership laws. Therefore, users can only use these contents under the authorization of Qianhai Youlong Technology Co., Ltd. and advertisers, and cannot copy, modify, compile, or create derivative products related to the content.",
+ "UG_LINE42": "8. Under no circumstances shall Qianhai Youlong Technology Co., Ltd. be liable for any indirect, consequential, punitive, incidental, special or penal damages, including loss of profits suffered as a result of the user's use of the Services, even if notified of the The possibility of loss is also the same). Notwithstanding the fact that this Agreement may contain conflicting rules, Qianhai Youlong Technology Co., Ltd.'s entire liability to you, for whatever reason or behavior, shall not exceed the fees paid to Qianhai Youlong Technology Co., Ltd. during your membership due to the use of the Services.",
+ "UG_LINE43": "Five, membership terms",
+ "UG_LINE44": "1. Hibok members have equal rights to members and shall abide by Qianhai Youlong Technology Co., Ltd.'s specifications and rules, including but not limited to these Terms of Service and the User Agreement.",
+ "UG_LINE45": "2. The loss related to the suspension of membership services due to violation of the Qianhai Youlong Technology Co., Ltd. User Agreement shall be borne by the user.",
+ "UG_LINE46": "3. Members can enjoy the value-added services of Hibok members during the membership period.",
+ "UG_LINE47": "4. If the member actively terminates or cancels the membership during the validity period of the membership, Qianhai Youlong Technology Co., Ltd. is not responsible for refunding the service fee corresponding to the validity period of the remaining membership of the member.",
+ "UG_LINE48": "5. Members shall bear the legal responsibility for transmitting, publishing information and using Hibok free services or fee-based services in Hibok. Members' use of Hibok services, including free services and fee-based services, shall abide by various laws, regulations, rules and regulations. file.",
+ "UG_LINE49": "6. After the membership service is opened, it cannot be transferred or unsubscribed.",
+ "UG_LINE50": "7. In the course of the use of Qianhai Youlong Technology Co., Ltd.'s free service or fee-based service, there is a violation of laws and regulations. Qianhai Youlong Technology Co., Ltd. reserves the right to cancel the membership of the member without any compensation, and the member shall bear full responsibility.",
+ "UG_LINE51": "Six other terms",
+ "UG_LINE52": "1. Qianhai Youlong Technology Co., Ltd. solemnly reminds users to pay attention to the terms of the Agreement that exempt Qianhai Youlong Technology Co., Ltd. from liability and aggravate user obligations. Please read carefully and consider risks. Minors should read this Agreement accompanied by a legal guardian. The final interpretation and modification of the above terms and conditions is owned by Qianhai Youlong Technology Co., Ltd.",
+ "UG_LINE53": "2. The invalidity of some or all of the terms set forth in this Agreement shall not affect the validity of other terms.",
+ "UG_LINE54": "3. The interpretation, validity and settlement of disputes in this Agreement shall apply to the laws of the People's Republic of China. If there is any dispute or dispute between the user and Qianhai Youlong Technology Co., Ltd., it should be settled through friendly negotiation. If the negotiation fails, the user hereby completely agrees to submit the dispute or dispute to the people's court of Qianhai Youlong Technology Co., Ltd.'s domicile.",
+ "UG_LINE55": "4. The copyright of this Agreement is owned by Qianhai Youlong Technology Co., Ltd., and Qianhai Youlong Technology Co., Ltd. reserves all rights to interpret and modify.",
+ "UG_LINE56": "Qianhai Youlong Technology Co., Ltd.",
+ "net_error": "Network anomaly",
+ "enter_name": "Please type in your name",
+ "translate": "Aa",
+ "locate": "Location",
+ "voice_tips": "Press and hold the recording, release the send",
+ "unlock": "Unlock",
+ "input_content": "Enter chat content",
+ "connecting": "Connecting...",
+ "logining": "Landing...",
+ "reject_reply": "/s1 rejected your request to view",
+ "warning_text": "You can redeem H coin within 3 days after no one reports it (1: 1000Vietnamese Dong)",
+ "more_big": "The number of inputs is not greater than /s1",
+ "little_min": "The number of inputs is not less than /s1",
+ "voice_msg": "/s1 invites you to a call",
+ "send_gift": "You rewarded each other /s1 /s2",
+ "receive_gift": "Your opponent rewarded you /s1 /s2",
+ "cannot_join": "Non-members cannot register",
+ "alreay_back": "Returned",
+ "video_more_big": "File is too large",
+ "select_all": "Select all",
+ "re_connect": "Reconnect",
+ "voice_tips2": "Release to send, swipe to cancel",
+ "country": "country",
+ "have_picture_view": "Under review",
+ "speaker_play": "Speaker play",
+ "handset_playback": "Handset playback",
+ "play_model": "Turn Off Speaker",
+ "password_less": "Password is too short",
+ "years_old": "Years old",
+ "coin_returen1": "After an anonymous user reports, the system verifies that you have recently violated the rules. Do not perform any illegal actions. If the next time, the account will be frozen",
+ "already_new": "Already the latest version",
+ "test_it": "Experience now",
+ "found_new": "Discover new version",
+ "ad": "ad",
+ "attention": "Focus",
+ "fans": "Fans",
+ "apply_see": "/s1 applies to view my profile",
+ "agree_apply": "/s1 passed my review request",
+ "see_redBag": "/s1 viewed my red envelope photo",
+ "notice": "remind",
+ "notice_open": "Turn on notification permissions for notifications",
+ "open_notice": "Notification permission is not turned on",
+ "not_open": "Notifications are not turned on and cannot be received",
+ "withdraw_fail": "The /s1 H coin you applied for withdrawal has been returned, please confirm that the bound account is correct",
+ "dynamics": "Moments",
+ "Remark": "Remark",
+ "setRemark": "Setting Notes",
+ "content_num": "/s1 comment",
+ "Redeem": "/s1H Coins for Points Exchange",
+ "location_permission": "No access to phone storage",
+ "camera_permission": "No access to the camera",
+ "photo_permission": "No access to albums",
+ "video_permission": "No access to microphone",
+ "your_redMoney_over": "The red envelope you sent has expired",
+ "other_redMoney_over": "The red envelope sent by the other party has expired",
+ "server_error_tips": "Looks like something went wrong ...",
+ "emoji": "emoji",
+ "today_score": "Sign up today to receive /s1 points",
+ "sign_tips": "1. Daily sign-in can receive points. The more accumulated days, the higher the points. \n2. The points can be exchanged for H coins. The exchange will consume the corresponding points. Please redeem carefully. \n3. The sign-in will be reset on the last day of each month. Redeem in time.",
+ "sign_in": "Sign in",
+ "my_score": "My scores",
+ "signin_now": "Sign in now",
+ "sign_in_day": "Accumulated sign in for /s1 day",
+ "have_get": "Redeemed",
+ "scan": "Scan",
+ "my_qr": "My QR code",
+ "scan_and_add": "Scan and add friends",
+ "amap": "Amap",
+ "baidumap": "Baidu Map",
+ "googlemap": "Google Map",
+ "applemap": "Apple Map",
+ "go_open": "Go open",
+ "Preview": "Preview",
+ "Photo_album": "Photo album",
+ "all_photo": "All pictures",
+ "have_select": "You have selected /s1 pictures",
+ "loading": "Loading...",
+ "new_chat_msg": "You have new chat messages",
+ "new_video_msg": "You have new Lianmai news",
+ "apply_friends": "/s1 apply to be your friend",
+ "applyed_friends": "/s1 passed your friend request",
+ "contact_permission": "No access to contacts",
+ "contact": "Contacts",
+ "search": "search",
+ "contact_add": "Add friends from contacts",
+ "find": "Find",
+ "translate_robot": "Translation robot",
+ "robot_hello": "Hello i'm a translation robot...",
+ "Simplified_Chinese": "Simplified Chinese",
+ "traditional_Chinese": "Traditional Chinese",
+ "english": "English",
+ "Vietnamese": "Vietnamese",
+ "Korean": "Korean",
+ "Japanese": "Japanese",
+ "add_friends": "add friend",
+ "stranger": "stranger",
+ "receive_stranger": "Receive messages from strangers",
+ "signin": "SignIn",
+ "stranger_close": "They refuse to receive messages from strangers, continue to unlock all information?",
+ "add": "add",
+ "added": "added",
+ "stranger_close_tips": "They refuse to receive messages from strangers.",
+ "translate_fail": "Translation failed",
+ "no_photos": "Please upload photos first, and then set up red envelope photos. ",
+ "successful_appeal1": "Your appeal evaluation: /s1 the appeal failed. ",
+ "add_success": "Add succeeded and wait for their consent",
+ "other_pay": "Payment by others",
+ "friend_verification": "Friend verification ",
+ "add_friends_tips": "You have sent a verification application and wait for them to pass",
+ "i_am": "I am /s1",
+ "agree": "Agree",
+ "privacyAgreement": "\"Hi\"You need to approve the Privacy Agreement before use ",
+ "privacy": "Privacy Agreement",
+ "notification_addfriend": "Hi!someone has applied to add you as a friend and to see who it is ",
+ "distance_long": "You can only add friends face to face ",
+ "chat_tips": "For accuracy of translation, please do not abbreviate ",
+ "fans_list": "Fans list ",
+ "system_not_open": "During beta test",
+ "service_withdraw_tips": "Withdrawal is not supported for IOS client at present. You can withdraw by Android client, or click the button below",
+ "withdraw_tips": "Click to withdraw ",
+ "add_member": "Add member ",
+ "delete_member": "Delete member",
+ "change_group_name": "Change group name",
+ "my_group_nickname": "My group nickname",
+ "group_chat": "Group chat",
+ "create_group_chat": "Create group chat",
+ "added_friends_tips": "You need to send a verification application and wait for them to pass ",
+ "group_chat_name": "Group chat name",
+ "my_group_nickname_tips": "You can set your group nickname here, which will only be displayed in this group ",
+ "man_gold": "Male god message",
+ "woman_gold": "Goddess message",
+ "choose_group_owner": "Choose a new group owner",
+ "group_announcement": "Group announcement",
+ "chat_news": "Chat news",
+ "group_qr": "Group QR code",
+ "group_setting": "Group management",
+ "close_news_notice": "Close news notice",
+ "set_chat_top": "Sticky on top",
+ "show_group_member_name": "Show group member nicknames",
+ "quit_group_tips": "No other members in the group chat will be notified and this group chat message will not be received anymore ",
+ "quit_and_delete": "Quit and delete",
+ "show_more_member": "Show more members",
+ "group_invite": "Invitation confirmation",
+ "change_group_owner": "Transfer of group ownership",
+ "group_setting_tips": "After enabling, group members need confirmation from the group owner to invite friends to the group. Scanning QR code to enter the group will also be disabled",
+ "invite_detail": "Invitation details",
+ "undefine_name": "Unnamed",
+ "group_qr_code": "Group QR code business card",
+ "group_qr_code_tips": "The QR code is valid within 7 days (before /s1 month /s2 days), re-entry will be updated",
+ "Goddess_heat": "Goddess heat",
+ "Goddess_heat_tips": "Gifts accumulated",
+ "new_friends": "New friends",
+ "before_three_day": "Three days ago",
+ "after_three_day": "Last three days",
+ "group_clean_chat_record": "Clear chat history",
+ "check": "Check",
+ "apply_fro_friends": "Request to add you as a friend",
+ "no_vip_cannot_withdraw": "Non-members cannot withdraw",
+ "not_true_woman": "This user is not authenticated, be careful not to be cheated",
+ "join_group": "Join group chat",
+ "sign_in_apple": "Login through Apple",
+ "only_host": "Only group owner can edit group announcements",
+ "send_gift1": "You sent /s1 gifts to others ",
+ "receive_gift1": "They sent /s1 gifts to you ",
+ "not_in_group": "You are no longer in this group ",
+ "creating_group": "Creating, please wait ",
+ "article": "Article",
+ "group_open_verification": "Verification has been opened, and you can only enter the group by invitation",
+ "group_memeber": "Group members",
+ "invite_members": "Invite friends to join in the group chat",
+ "total_members": "/s1 persons in total",
+ "qr_outtime": "QR code expired ",
+ "no_goupr_info": "No group information",
+ "you_invite": "You invited /s1 to join the group chat ",
+ "invite_you": "You are invited into group chat by /s1 ",
+ "invite_someone": "/s1 invites /s2 to join the group chat ",
+ "you": "You",
+ "delete_group": "/s1 moves /s2 out of group chat ",
+ "you_group_owner": "You have become a new group owner",
+ "someone_group_owner": "/s1 has become a new group owner ",
+ "change_group_owner1": "The group name has been changed to /s1 ",
+ "update_group_announce": " Group announcement has been updated ",
+ "you_qr": "You join group chat by scanning QR code",
+ "others_qr": "/s1 join group chat by scanning QR code ",
+ "invite_confirm": " \"/s1 \" want to invite /S2 friends to join the group chat \\$ to confirm \\$",
+ "want_invite_confirm": " \" /s1 \"want to invite \" /s2 \" to join the group chat ",
+ "join_group_confirm": " \"/s1 \"joins group chat, confirmed",
+ "you_invite_gourp": "You are invited into group chat by /s1 ",
+ "someone_join_group": " \"/s1\" joins group chat ",
+ "group_setting_tips1": " Group owner has opened the \" group chat invitation confirmation \", group members can invite friends into the group only after group owner's confirmation ",
+ "group_setting_tips2": "The group owner has restored the default group entering method ",
+ "members_max": " Group members have reached the upper limit ",
+ "group_max": " The number of groups has reached the upper limit ",
+ "my_money_info": "my bills",
+ "my_left_money": "my balance",
+ "money_tips": "H coins can be obtained by recharging or exchange, and cannot be withdrawn",
+ "get_money_detail": "income details",
+ "hibok_money": "Hibox revenue",
+ "charge_h": "exchange h coins ",
+ "charge_tips": "withdrawal rules",
+ "splash_tips1": "variable positioning",
+ "splash_tips2": "Translation robot",
+ "splash_tips3": "friends-making APP",
+ "splash_tips_content1": "gorgeous goddess, choose what you love ",
+ "splash_tips_content2": "chat together by voice interaction",
+ "splash_tips_content3": "solving language problems",
+ "splash_go": "experience immediately",
+ "change_h_coin": "you exchanged /s1H coins through your income",
+ "Representation_succes": " your application is successful, and the system has refunded",
+ "system_give": " presented by system ",
+ "exchange_fail": "your withdrawal application failed and has been returned",
+ "hibok_exchange": "exchange /s1H coins through Hibox income ",
+ "bind_code_success": "binding invitation code succeeded",
+ "translate_money": " you have spent /s1H coins on manual translation",
+ "system_back": " system return cancelled",
+ "you_give": "you gave rewards to others ",
+ "you_get": " you got rewards from others",
+ "enter_num_qian": " number of exchanges (unit K) ",
+ "enter_num_qian1": " number of withdrawals (unit K) ",
+ "daily_translate_voucher": "翻译券",
+ "msg_notice":"通知消息",
+ "select_notice_people":"选择提醒的人",
+ "search_phone":"查找手机号",
+ "not_have_user":"用户不存在",
+ "not_add_Myself":"你不能添加自己",
+ "you_are_blaklisted":"对方已拉黑了你",
+ "confrim_recovery":"确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)",
+ "send_to": "發送到"
+}
\ No newline at end of file
diff --git a/i18n/ja-JP.json b/i18n/ja-JP.json
new file mode 100644
index 0000000..4365a7e
--- /dev/null
+++ b/i18n/ja-JP.json
@@ -0,0 +1,1164 @@
+{
+ "appName": " Hi公園",
+ "login": "登録",
+ "registration": "新規取得",
+ "other_login": "他の登録",
+ "account": "アカウント",
+ "enter_username": "アカウントを入力してください",
+ "password": "パスワード",
+ "enter_password": "パスワードを入力してください",
+ "forget_password": "パスワードを忘れた",
+ "reset_password": "パスワードをリセットする",
+ "number_registration": "携帯番号で新規取得",
+ "enter_number": "携帯番号を入力してください",
+ "code": "検証コード",
+ "enter_code": "受け取った検証コードを入力してください",
+ "send_code": "検証コードを送信する",
+ "send_again": "再送する",
+ "set_password": "パスワードを設定する",
+ "password_limit": "パスワードは少なくても6桁に設定する",
+ "set_password2": "登録パスワードを設定してください",
+ "next_step": "次へ",
+ "agreed_agreement": "クリックすると、《ユーザー協議》を読んで同意したことになります",
+ "enter_password2": "パスワードを入力してください",
+ "reset_now": "すぐリセット",
+ "choose_gender": "性別を選択",
+ "who": "あなたは...",
+ "determine": "確定",
+ "cannot_modified": "性別を選択後変更できません",
+ "tip": "ヒント",
+ "choose_quit": "あなたは間もなく新規取得完成しますが、今ログアウトしますか?",
+ "confirm": "確認",
+ "use": "使用",
+ "cancel": "キャンセル",
+ "close": "閉じる",
+ "delete": "削除",
+ "forget_it": "やめる",
+ "ok": " OK ",
+ "choose_quit2": "登録後に性別を変更することはできません、確定ですか?",
+ "tip_content": "ヒント:同性別のユーザとのコミュニケーションすることができません",
+ "welcome": "ようこそ",
+ "enter_incode": "招待コードを入力してください",
+ "must_incode": " Hiは招待コードを持つ男性のみにサービスを提供しています",
+ "your_incode": "あなたの招待コード",
+ "how_get": "招待コードがないですか?以下の方法で入手できます",
+ "method1": "方法1",
+ "free": "無料申請",
+ "apply_now": "すぐ申請",
+ "check_incode": "招待コードを査収してください",
+ "so_get": "個人情報を記入して、審査した後招待コードを送ります",
+ "apply_incode": "招待コードを申請する",
+ "location": "所在地",
+ "cityname": "あなたいる都市の名前",
+ "message_channel": "情報ルート",
+ "how_know": "どこからこのAPPを知っていますか",
+ "wechat_number": "ウィーチャットID ",
+ "your_wechat": "あなたのウィーチャットID ",
+ "facebook": "フェイスブック",
+ "your_facebook": "あなたのフェイスブック",
+ "submit_application": "申請を提出します",
+ "enter_city": "あなたにいる都市を入力してください",
+ "so_know": " APPを獲得ルートを教えてください",
+ "your_social": "あなたのSNSアカウントを教えてください",
+ "receive_incode": "あなたの申請を出来るだけ早く処理します、もし審査に合格したらメッセージセンターで私たちが送った招待コードを受け取ります",
+ "wait_incode": "招待コードはまだ発行されていませんので、暫くお待ちください!",
+ "successful_application1": "申し込み成功",
+ "application_failed1": "レビューに失敗しました",
+ "successful_copy": "コピー成功",
+ "method2": "方法2",
+ "joinvip": " VIPになり",
+ "join_now": "すぐ加入する",
+ "joined": "加入しました",
+ "join_odds": " VIPになるとさまざまな特権があります、招待コードなしでの登録を含めます",
+ "not_joinvip": "あなたはまだVIPになっていません",
+ "join_after": " VIPになったら、招待コードなしで登録できます",
+ "incode_passed": "招待コードの認証をパスしました",
+ "welcome_join": "いらっしゃいませ、あなたのアカウントを他人に漏らさないでください。登録異常が発見されたら、アカウントは自動的に凍結されます",
+ "member_centre": " VIPセンター",
+ "members_privilege": " VIP特権",
+ "see_more": "もっと見える",
+ "unlimited_see": "毎日無制限でユーザを見えます",
+ "see_cheaper": "もっと節約で見る",
+ "free10": "毎日/s1回のチャンスで有料アルバム或いはSNSアカウントを閲覧できます",
+ "see_longer": "もっと長く見えます",
+ "towto6": "写真閲覧後焼却の時間が2秒から/s1に上げます",
+ "see_better": "もっと気持ち良く見える",
+ "free_release": "デート放送無料発表",
+ "choose_price": "コースを選択してください",
+ "pay_method": "支払い方法",
+ "pay_amount": "支払い金額",
+ "not_enough": "残高が足りない",
+ "confirm_pay": "支払い確認",
+ "complete_material": "資料を完備する",
+ "basic_information": "基本資料",
+ "upload_avatar": "アバターをアップロッド",
+ "choose": "選択してください",
+ "fill_out": "入力してください",
+ "choose_multiple": "複数の選択肢",
+ "optional": "オプショナル",
+ "least": "少なくても/sl個を入力してください",
+ "introduce_yourself": "自己紹介してください",
+ "most": "多くても/sl個を選んでください",
+ "nickname": "ニックネーム",
+ "only1_8": "ニックネームは1~20文字のみです",
+ "Resident_city": "現在の都市",
+ "Please_select_a_resident_city": "現在の都市を選択してください",
+ "City1": "芹苴",
+ "City2": "岘港",
+ "City3": "海防",
+ "City4": "河内",
+ "City5": "胡志明",
+ "City6": "安江",
+ "City7": "北江",
+ "City8": "北件",
+ "City9": "薄辽",
+ "City10": "北宁",
+ "City11": "巴地头顿",
+ "City12": "槟椥",
+ "City13": "平定",
+ "City14": "平陽",
+ "City15": "平福",
+ "City16": "平順",
+ "City17": "金瓯",
+ "City18": "高平",
+ "City19": "得楽",
+ "City20": "得农",
+ "City21": "奠边",
+ "City22": "同奈",
+ "City23": "同塔",
+ "City24": "嘉莱",
+ "City25": "河江",
+ "City26": "海陽",
+ "City27": "河南",
+ "City28": "河静",
+ "City29": "和平",
+ "City30": "後江",
+ "City31": "興安",
+ "City32": "庆和",
+ "City33": "坚江",
+ "City34": "昆嵩",
+ "City35": "莱州",
+ "City36": "林同",
+ "City37": "谅山",
+ "City38": "老街",
+ "City39": "隆安",
+ "City40": "乂安",
+ "City41": "寧平",
+ "City42": "寧顺",
+ "City43": "富寿",
+ "City44": "富安",
+ "City45": "広平",
+ "City46": "広南",
+ "City47": "広義",
+ "City48": "広寧",
+ "City49": "広治",
+ "City50": "朔庄",
+ "City51": "山羅",
+ "City52": "西寧",
+ "City53": "太平",
+ "City54": "太原",
+ "City55": "清化",
+ "City56": "承天順化",
+ "City57": "前江",
+ "City58": "茶荣",
+ "City59": "宣光",
+ "City60": "永隆",
+ "City61": "永富",
+ "City62": "安沛",
+ "City63": "南定",
+ "birthday": "誕生日",
+ "choose_birthday": "誕生日を選んでください",
+ "year": "年",
+ "month": "月",
+ "day": "日",
+ "hour": "時",
+ "minute": "分",
+ "second": "秒",
+ "just": "たった今",
+ "minute_ago": "/s1分前",
+ "hour_ago": "/s1時間前",
+ "day_ago": "/s1日前",
+ "week_ago": "/s1週間前",
+ "month_ago": "/s1ヶ月前",
+ "morning": "午前",
+ "noon": "昼ごろ",
+ "afternoon": "午後",
+ "night": "夜",
+ "all_day": "一日中",
+ "yesterday": "昨日",
+ "two_yesterday": "一昨日",
+ "overnight": "徹夜",
+ "one": "一桁",
+ "ten": "十",
+ "hundred": "百",
+ "thousand": "千",
+ "ten_thousand": "万",
+ "aries": "おひつじ座",
+ "taurus": "おうし座",
+ "gemini": "ふたご座",
+ "cancer": "かに座",
+ "leo": "しし座",
+ "virgo": "おとめ座",
+ "libra": "てんびん座",
+ "scorpio": "さそり座",
+ "sagittarius": "いて座",
+ "capricorn": "やぎ座",
+ "aquarius": "みずがめ座",
+ "pisces": "うお座",
+ "monday": "月曜日",
+ "tuesday": "火曜日",
+ "wednesday": "水曜日",
+ "thursday": "木曜日",
+ "friday": "金曜日",
+ "saturday": "土曜日",
+ "sunday": "日曜日",
+ "job": "職業",
+ "choose_career": "職業を選択ください",
+ "career1": "インフォメーション",
+ "career2": "インターネット",
+ "career3": " IT ",
+ "career4": "電信運行",
+ "career5": "ネットゲーム",
+ "career6": "金融保険",
+ "career7": "投資",
+ "career8": "株式ファンド",
+ "career9": "保険",
+ "career10": "銀行",
+ "career11": "信託保証",
+ "career12": "ビジネスサービス",
+ "career13": "相談",
+ "career14": "自営業",
+ "career15": "美容、美髪",
+ "career16": "旅行",
+ "career17": "ホテル飲食",
+ "career18": "レクリエーション",
+ "career19": "貿易",
+ "career20": "汽車",
+ "career21": "不動産",
+ "career22": "不動産管理",
+ "career23": "内装、表装",
+ "career24": "探偵",
+ "career25": "工程製造",
+ "career26": "建築",
+ "career27": "土木建築工事",
+ "career28": "機械製造",
+ "career29": "電子",
+ "career30": "生物医学",
+ "career31": "食品",
+ "career32": "服装",
+ "career33": "エネルギー",
+ "career34": "交通運輸",
+ "career35": "航空",
+ "career36": "鉄道",
+ "career37": "航运船舶",
+ "career38": "パブリック交通",
+ "career39": "物流運輸",
+ "career40": "文化メディア",
+ "career41": "メディア出版",
+ "career42": "デザイン",
+ "career43": "文化伝播",
+ "career44": "コマーシャルアイデア",
+ "career45": "アニメ",
+ "career46": "広報会議",
+ "career47": "撮影",
+ "career48": "娯楽スポーツ",
+ "career49": "映画とテレビ",
+ "career50": "スポーツ",
+ "career51": "音楽",
+ "career52": "モデル",
+ "career53": "パブリック事業",
+ "career54": "医療",
+ "career55": "法律",
+ "career56": "教育",
+ "career57": "政府機関",
+ "career58": "公益",
+ "career59": "学生",
+ "career60": "無",
+ "program": "番組",
+ "select_program": "国籍を選択してください",
+ "healthy_exercise": "健康スポーツ",
+ "night_party": "パーティー",
+ "gourmet_party": "食べ物",
+ "watch_movie": "映画を見る",
+ "play_games": "ゲームを遊ぶ",
+ "travel_together": "旅行",
+ "voice_chat": "音声チャット",
+ "other": "他",
+ "expect_lover": "希望相手",
+ "choose_lover": "希望相手を選んでください",
+ "beautiful": "顔を見る",
+ "rich": "お金持ち",
+ "care_me": "愛護をください",
+ "look_feeling": "気持ちによる",
+ "doesnt_matter": "どうでもいい",
+ "least_account": "少なくとも一つのSNSアカウントを記入してください",
+ "hide_account1": "ソーシャルアカウントを非表示",
+ "more_information": "詳細情報",
+ "height": "身長",
+ "weight": "体重",
+ "not_show": "表示しません",
+ "self_introduction": "個人紹介",
+ "registration_success1": "新規取得成功",
+ "exit": "ログアウトしますか",
+ "exit_registration": "あなたの個人情報はまだ完備していません、今ログアウトしたら次入る時は登録済みのアカウントで直接ログインしてください",
+ "cant_see": "男性は男性の詳細情報を確認出来ません",
+ "cant_see2": "女性は女性の詳細情報を確認出来ません",
+ "see_one": "今日はまだ/s1人の女性情報が確認できます",
+ "only_see": "非VIPユーザーは毎日15人の女性情報しか見られません",
+ "continue_see": "続き見る",
+ "user_frozen": "ユーザーが凍結しました",
+ "search_user": "ニックネームを入力ください/職業で検索します",
+ "nearby": "近辺",
+ "member": " VIP ",
+ "new_registration": "新規取得",
+ "authenticate": "認証",
+ "first_online": "オンライン",
+ "not_positioned": "位置付けが開けてないから他ユーザとの距離が計算できません",
+ "unknown": "未知",
+ "secrecy": "秘密を守る",
+ "collection": "コレクション",
+ "cancel_collection": "コレクションをキャンセル",
+ "canceled_collection": "コレクションをキャンセルしました",
+ "like": "お気に入り",
+ "added_like": "お気になりに追加しました",
+ "canceled_like": "お気になりをキャンセルしました",
+ "blacklist": "ブロックする",
+ "blacklist_choose": "ブロックすると、このユーザーからのメッセージを受け取れなくなり、お互いにモーメンツの更新が表示されなくなります、このユーザーをブロックしますか",
+ "blacklisted": "ブロックしました",
+ "reject_message": "相手をブロックしました、相手のメッセージを拒否します",
+ "remove_blacklist": "ブロックリストから削除",
+ "blacklist_removed": "ブロックリストから削除しました",
+ "receive_message": "相手をブロックリストから削除しました、メッセージ拒否を解除しました",
+ "online": "オンライン",
+ "paid_photo": "有料アルバム",
+ "application_view": "ブラウズを申請する",
+ "passed": "パスしました",
+ "park": "公園",
+ "radio": "放送局",
+ "news": "情報",
+ "me": "私",
+ "more_operations": "詳細操作",
+ "anonymous_report": "匿名告発",
+ "certified_video": "認証ビデオ",
+ "passed_video": "彼女はビデオを通じて真実性を認証しました",
+ "not_video": "彼女はまだ身分の真実性を認証していません",
+ "her_appointment": "彼女からデートを誘っていますよ",
+ "pay_join": "彼は有料で入る",
+ "passed_review": "彼は身分安全審査に合格しました",
+ "invited_user": "ベテランユーザー/s1贈った招待コードを通して入りました",
+ "his_appointment": "彼からデートを誘っていますよ",
+ "her_dynamics": "彼女のダイナミック",
+ "his_dynamics": "彼のダイナミック",
+ "low_key": "彼女は非常に控えめ",
+ "low_key2": "彼は非常に控えめ",
+ "her_photo": "彼女のアルバム",
+ "his_photo": "彼のアルバム",
+ "set_lock": "彼はアルバムのロックを設置しました",
+ "set_lock2": "彼女はアルバムのロックを設置しました",
+ "free_unlock": "アルバムのロックを解除(/s1)、VIPは無料",
+ "unlock_user": "/s1のアルバムロックを解除",
+ "pay_unlock": "有料でロックを解除(/s1H幤)",
+ "become_member": " VIPになり、無料でロックを解除します",
+ "consumption_once": " 1回のチャンスで/s1のアルバムロックを解除しますか?",
+ "remaining_once": "(今日はまだ/s1回チャンスがあります)",
+ "no_times": "今日の無料機会はもうなくなりました、/s1を贈って/s2の全部資料をロック解除するか",
+ "pay": "支払い",
+ "view_user": "彼は制限を設定、資料を見るには彼の同意が必要です",
+ "view_user2": "彼女は制限を設定、資料を見るには彼女の同意が必要です",
+ "need_photo": "レビューの申請はなたの写真を相手に送り必要があります、ご安心して、あなたの写真は相手が長いスクリーンを押して2秒後に焼却します",
+ "choose_photo": "写真を選択",
+ "send_application": "申請が発送済み、相手が確認したらメッセージが届きます",
+ "not_authenticate": "あなたはまだ認証していません",
+ "after_authenticate": "あなたの真実性を認証してから、他人との対話することができます",
+ "authenticate_now": "すぐ認証する",
+ "destroy_after": "読んだらすぐ焼却",
+ "destroyed": "焼却しました",
+ "red_photo1": "読んだらすぐ焼却のご礼儀写真",
+ "ask_me": "二人きりチャットで私に請求してください",
+ "filled_in": "記入済み、クリックして確認してください",
+ "unlock_information": "全資料をロック解除する",
+ "unlock_choose": "1回無料でロックを解除する",
+ "your_evaluation": "あなたの本当の評価",
+ "her_evaluation": "彼女の本当の評価",
+ "his_evaluation": "彼の本当の評価",
+ "evaluate": "評価",
+ "friendly": "友好",
+ "interesting": "面白い",
+ "readily": "爽やか",
+ "patient": "辛抱強い",
+ "indifferent": "冷たい",
+ "bad_temper": "気性が荒い",
+ "courtesy": "礼儀正しい",
+ "generous": "気前がいい",
+ "lie": "口が軽い",
+ "unfriendly": "不友好",
+ "anonymous_evaluation": "匿名評価",
+ "cant_evaluate": "あなたはまだ彼女を誘ったことがないからコメントできません",
+ "cant_evaluate2": "彼はまだあなたを誘ったことがないからコメントできません",
+ "bad_evaluate": "関連のスクリーンショットを提供してください、こちらはフォローして確認します",
+ "submit": "提出",
+ "evaluation_success": "コメント成功",
+ "private_chat": "チャット",
+ "close_reminder": "メッセージのアラームをオフにする",
+ "closed_reminder": "メッセージのアラームをオフにしました",
+ "open_reminder": "メッセージのアラームをオープンにする",
+ "opened_reminder": "メッセージのアラームをオープンにしました",
+ "her_account": "彼女のSNSアカウント",
+ "his_account": "彼のSNSアカウント",
+ "copy": "コピー",
+ "send_account": "彼女に私のSNSアカウントを送ります",
+ "enter_account": "あなたのSNSアカウントを入力してください",
+ "for_example": "例:ウィーキャットID abc ",
+ "sent_she": "彼女に送信します",
+ "chat": "音声通話",
+ "cantt_voice": "相手はマイクの功能をオフしました",
+ "authentication_voice": "あなたの真実性を認証後音声ができます",
+ "requesting_voice": "音声を請求しています",
+ "waitting_answer": "反応を待っています",
+ "answer": "受け入れ",
+ "hang_up": "ハングアップ",
+ "chatting": "音声繋がる中",
+ "handsfree": "ハンズフリー",
+ "giving_gift": "プレゼントを贈る",
+ "give_success": "プレゼントを贈りました",
+ "others_gift": "相手からプレゼントをくれました",
+ "given_gift": "あなたは/s1H幤のプレゼントを贈りました",
+ "earned_gift": "あなたは/s1H幤プレゼントを貰いました",
+ "available_balance": "利用可能残高/s1",
+ "recharge": "チャージ",
+ "give": "贈る",
+ "balance_insufficien": "すみません、あなたの残高が足りません",
+ "first_recharge": "プレゼントを贈る前チャージしてくださいね",
+ "give_coin": "今回は/s1H幤を贈りました",
+ "get_coin": "今回の音声は/s1H幤を貰いました。",
+ "give_get": "今回の音声は/s1H幤を贈りました、/s2H幤を貰いました。",
+ "chat_over": "音声会話は完了しました、長さ/s1",
+ "message_center": "インフォメーションセンター",
+ "can_chat": "相手のユーザー詳細ページで二人きりチャット申請できます",
+ "text_chat": "チャット",
+ "system_information": "システムメッセージ",
+ "system_notification": "システム通知",
+ "report_failure": "あなたが告発した/s1の状況は事実ではありません、もっと有効な証拠を提出して再告発してください",
+ "report_success": "あなたが告発した/s1の状況は事実ですので、このユーザを処理しました",
+ "successful_application": "招待コードの申請が成功!招待コード【/s1】(クリックしてコピーできます)",
+ "successful_application2": "招待コードの申請が成功、友達のご紹介、ありがとうございます。招待コード【/s1】(クリックしてコピーできます)",
+ "application_failed": "招待コードの申請が失敗した!残念ながら、あなたの申請は審査に合格できませんでした、真実な情報を記入して審査パス率が上げる",
+ "important_notice": "【重要なお知らせ】:",
+ "authentication_failed": "あなたの認証資料は要求に合わないから修正して再提出してください",
+ "request1": "1. 認証要求に基づいて認証ビデオを撮ってください",
+ "request2": "2. 写真集に目鼻立ちのはっきりした顔写真をアップロードしてください",
+ "successful_authentication": "あなたの認証申請は審査に合格しました,おめでとうございます",
+ "re_upload": "あなたがアップロードした写真は審査に合格しませんでした、必要に応じて再アップロードしてください",
+ "upload_success": "新しくアップロードされた写真はもう審査に合格しました、おめでとうございます",
+ "caveat": "あなたのデートの申し込みは規則違反で削除されました、何回かの違反や事態重大な場合はシステムからあなたのアカウントを制限し凍結しますので、ご了承ください",
+ "caveat2": "あなたのコメントは規則違反で削除されました。何回かの違反や事態重大な場合はシステムからあなたのアカウントを制限し凍結しますので、ご了承ください",
+ "radio_message": "ラジオニュース",
+ "no_message": "このような情報はしばらくありません",
+ "dating_news": "/s1は//s2にデート情報を発表しました。クリックして確認してください",
+ "go_see": "確認",
+ "thumbs_up": "/s1はあなたのダイナミックをいいねにした",
+ "thumbs_up2": " /s1はあなたのデート番組をいいねした",
+ "comment1": "/s1はあなたのダイナミックにコメントしました",
+ "comment2": "/s1はあなたのデート番組にコメントしました",
+ "replied_comment": "/s1はあなたのコメントを返信しました",
+ "signed_up": "/s1はあなたのデート番組を申し込みました",
+ "favorite_user": "あなた気に入りユーザー/s 1がデートを発表しました。クリックして確認してください",
+ "favorite_user2": "お気に入りユーザ/s 1がダイナミックをリリースしました。クリックして確認してください",
+ "wallet_reminder": "ウォレットのリマインダ",
+ "paid_you": "/s1(/s2H 幤)を払ってあなたのご祝儀写真を見ました",
+ "paid_you2": "/s1は(/s2H幤)を払ってあなたのアルバムを見ました",
+ "paid_you3": "/s1は有料で、あなたの資料を全部ロックしました",
+ "view_application": "申請を確認します",
+ "view_application2": "/s1はあなたの詳細ページ閲覧をリクエスする",
+ "aging": "許可(有効期間15日間))",
+ "refuse": "拒否",
+ "passed_request": "リクエストをパスしました",
+ "l15_days": "/s1はもうあなたの閲覧申請をパスしました、有効期間は15日間です",
+ "evaluation_notice": "コメントのお知らせ",
+ "rate_her": "もう/s1を誘いましたか?早く彼女を評価してください",
+ "received_evaluation": "あなたに連絡した女性ユーザー(匿名)があなたにコメントした:/s1",
+ "received_evaluation2": "あなたに連絡した男性ユーザー(匿名)があなたにコメントした:/s1",
+ "application_appeal": "コメントは事実と合わない場合、申告してください、こちらは事実を確実します",
+ "appeal": "申告します",
+ "appealed": "申告しました",
+ "waiting_results": "私たちはできるだけ早く状況を確認して、内部メールで処理結果を連絡します",
+ "successful_appeal": "あなたの申告評価:/s 申告成功、コメントを取り消します",
+ "social_account": " SNSアカウント",
+ "get_account": "/s1はあなたにSNSアカウントを送信します",
+ "edit_information": "資料編集",
+ "save": "保存",
+ "passed_verification1": "あなたの身分安全認証をパスしました",
+ "by_code": "あなたはベテランユーザー/s 1の招待コードで入りました",
+ "by_paying": "あなたは有料で入りました",
+ "passed_verification": "あなたはビデオを通じて身分の真実性を認証しました",
+ "not_certified": "あなたはまだ認証されていません",
+ "verificating": "あなたの真実性を認証しています",
+ "real_girl": "認証を受けた女性の方がもっと人気がありますよ",
+ "certificating": "認証中",
+ "re_upload2": "ビデオを再アップロードをお待ちしております",
+ "update_certification": "認証更新",
+ "enjoy_privileges": " VIPをアップして特権を尊ぶ",
+ "expires": "/s1満期",
+ "wallet": "財布",
+ "setting": "プライバシー",
+ "my_dynamic": "私のダイナミック",
+ "my_album": "私のアルバム",
+ "first_photo": "第一枚写真をアップロードします",
+ "no_photo": "写真があったら男性を引き付けることができますよ",
+ "upload_photos": "写真をアップロード",
+ "upload_video": "ビデオをアップロード",
+ "upload": "写真をアップロードする",
+ "set_photo": "ご祝儀の写真を設定する",
+ "photo_order": "長いドラッグで写真の並べ替えができます",
+ "my_evaluation": "私の評価",
+ "my_show": "私の番組",
+ "i_like": "私の気に入り",
+ "your_favorite": "ご好きな女性がここを表示します",
+ "your_favorite2": "ご好きな男性がここを表示します",
+ "no_data": "データがありません",
+ "historical_visitor": "過去の訪問者",
+ "visit_you": "/s1人が訪問したことがある",
+ "visit_photo": "/s1人があなたの写真を焼却しました",
+ "recovery_photo": "ワンタッチで回復",
+ "setting2": "設定",
+ "apply_code": "友達に招待コードを申請してあげます",
+ "issue_choose": "招待コードの申し込みは無料です、あなたの過去消費履歴によって招待コードを発行するかどうかを評価します。公園の雰囲気を維持するために、ぜひ信頼できる友達に招待コードを贈ってしてください",
+ "successfully_submit": "申請書提出成功",
+ "share_app": "友達にAPPを共有する",
+ "need_help": "助けてください",
+ "need_help2": "顧客サービスに連絡する",
+ "need_help3": "サービスの効率を高めるために、以下の問題があれば、直接番号を回答ください",
+ "question1": "【1】アカウントが凍結された理由は何ですか??",
+ "answer1": "下記のいずれかの状況が発生したら、アカウントは凍結されます:①詐欺師②仲介③嫌がらせ広告④複数人が告発され。⑤他のアカウントがすでにありました。⑥何度も違法放送を発表して、警告を無視しました。⑦ユーザーが自分でログアウトを要求する",
+ "question2": "【2】財布の現金はいつ換金できますか?",
+ "answer2": "すべての収益は直接財布に入ります。換金には三日間かかります(請求時間による計算開始)。三日後に受け取った金額は財布に入ります。金額>=10元の場合換金できます",
+ "question3": "【3】私が出したご祝儀はなぜ表示されていませんか?",
+ "answer3": "ネットの原因かもしれません。ご安心してください、この場合、相手はあなたのご祝儀を受け取ることができません。ご祝儀は24時間後に自動的にあなたの支払ルートに返却されます",
+ "question4": "【4】換金はどれぐらいかかりますか?",
+ "answer4": "換金申請を提出してから二つの出勤日以内に入金します。ご注意:アカウントは間違いないようご注意ください!",
+ "question5": "【5】どうやって匿名で他のユーザー/ラジオ放送の内容を告発しますか?",
+ "answer5": "相手の詳細ページに入るか、ラジオ放送を選択し、右上をクリックして「匿名通報」を選択し、関連の告発情報を記入してください",
+ "question6": "【6】どのように認証ユーザになりますか?",
+ "answer6": "認証をパスするには以下の要求を満たす必要があります。①個人資料には有効なsnsアカウントを記入する②アルバムは少なくとも本人のはっきりした顔写真をアップロードする③認証ページで検証コードを確認し、紙にニックネーム+認証コードを記入する④この紙を持って、あなたの顔と一緒にビデオを撮ってアップロードする",
+ "question7": "【7】認証されたビデオは公開しなくてもいいですか?",
+ "answer7": "設定欄で公開するかどうかを選択できます。ユーザーセンター→認証ビデオをクリックして、左下に“認証ビデオを私の詳細ページに表示します",
+ "question8": "【8】どうやって認証がキャンセルされるのを避けるべきですか?",
+ "answer8": "アルバムには少なくとも一枚本人の写真があります",
+ "question9": "【9】ラジオ放送が削除された理由は何ですか?",
+ "answer9": "ラジオ放送は敏感図を発表できません。敏感語は含みますが、これに限らず、個人情報(顔写真、ニックネーム、連絡先を含む)を発表できません、違法放送は削除されます",
+ "question10": "【10】どうやってアカウントをキャンセルしますか?",
+ "answer10": "アカウントの抹消はAPPにログインできなくなりますので、後でサービスを使用の場合は改めて新規取得必要です、それでもアカウントをキャンセルする場合は、シリアル番号[12]に顧客サービスに連絡してください ",
+ "question11": "【11】パスワードを忘れたらどうすればいいですか?",
+ "answer11": "携帯番号で登録したユーザー或いは携帯番号を関連したたユーザーはページ右上の「パスワード忘れ」機能でパスワードをリセットできます。携帯番号を関連していないユーザはまず携帯番号を関連して、そして新しいログインパスワードを設定してください",
+ "question12": "【12】その他の問題/人工サービスに連絡",
+ "answer12": "こんにちは、なにかお手伝いところがありますか?ご質問を説明してください。(顧客サービスの出勤時間は毎日8時から翌日02時までです。問い合わせ人数が多いので、お待ちしてください)",
+ "certification_center": "認証センター",
+ "for_example2": "認証ビデオの撮影例",
+ "certification_conditions": "認証条件",
+ "conditions1": "1. 個人のイメージが良い",
+ "conditions2": "2. アルバムに少なくとも一枚本人の写真をアップロードしてください",
+ "verification_method": "認証方法",
+ "method3": "1. 紙にニックネームと検証コードを書いてください",
+ "method4": "2. この紙を持って、あなたの顔と一緒にビデオを撮ってください(3~15秒)(3~15秒)",
+ "upload_video2": "認証ビデオをアップロードする",
+ "after_authentication": "認証成功後にあなたのアバター写真にrealのマックが付いてる",
+ "show_video": "認証ビデオを私の詳細ページに表示する",
+ "uploaded_video": "認証ビデオがアップロードしました",
+ "under_review": "審査中(24時間以内))",
+ "certification_status": "認証状態",
+ "certified": "認証パスしました",
+ "wait_resubmitted": "認証は再提出する必要があります",
+ "reason_failure": "あなたの認証ビデオは要求に合わないです。原因は:",
+ "claim": "認証要求に基づいて認証ビデオを撮ってください",
+ "claim2": "アルバムにはっきりした顔の写真をアップロードしてください",
+ "re_upload_video": "認証ビデオを再アップロードしてください",
+ "update_video": "アップロードした認証ビデオを更新する",
+ "mask_coin": "H幣",
+ "get_way": "チャージやマイク付けなど方法でH幣が貰える。",
+ "coin_use": " H幣は、音声通話と報酬に使用できます。",
+ "coin_total": "H幣総額",
+ "can_redeemed": "両替可",
+ "who_account": "/s1アカウント",
+ "bind_account": "/s1アカウントを関連する",
+ "your_account": "あなたの/s1アカウント",
+ "get_coin2": "チャージで/s1H幣を貰いました",
+ "viewed_your": "/s1はあなたのsnsアカウントを確認しました",
+ "give_gift": "/s1からプレゼントをくれました:1个/s2",
+ "add_coin": "+/s1H幣",
+ "give_one": " /s2に1個/s1を贈りました",
+ "less_coin": "-/s1H幣",
+ "exchange_cash": "換金",
+ "withdrawal_application": "換金申請申请",
+ "redeem_choose": "/s1枚のH貨は/s2に両替できます、両替後/s3枚H幣を残っています、両替確定ですか?",
+ "application_submitted": "換金申請が提出しました",
+ "working_days": "二日間(出勤日)内で処理します、ご疑問がありれば顧客サービスに問い合わせしてください",
+ "cash": "現金",
+ "handling_fee": "チャットベージで貰ったご祝儀はここに入ります、入金されてから3日間以内に通報がない場合は換金可能です、換金の場合は5%の手数料が掛かります",
+ "total_account": "アカウント総額",
+ "cannot_redeemed": "金額が不足で両替できません",
+ "successful_redemption": "両替成功",
+ "redeem_choose2": "あなたのアカウント総額は/s1元、今回/s2元換金可能です、換金申請は確定ですか?",
+ "personal_details": "個人情報",
+ "public": "公開(推薦)",
+ "paid_album": "アルバムは有料で閲覧",
+ "must_pay": "あなたのアルバムは有料でしか見られない、費用はあなたが決めます、これはあなたの訪問量を減らすかもしれません",
+ "set_amount1": "表示金額を設定する",
+ "first_upload": "有料アルバムを設定する前に写真をアップロードしてください",
+ "need_permission": "閲覧前に私の確認が必要です",
+ "permission_choose": "あなたのホームページを閲覧する前に、他人は必ず写真をあなたに送って身分を確認必要です、確定ですか?",
+ "hide_me": "近くの人のリストから私を隠す",
+ "hide_distance": "他人に私の位置を隠す",
+ "hide_account": "他人にわたしのSNSアカウントを隠す",
+ "chat_setting": "音声コントロール",
+ "chat_me": "密談の権限を持つユーザーに私と音声を許可する",
+ "successfully_saved": "正常に保存されました",
+ "on_dynamic": "あなたはまだダイナミックをリリースしたことはありません",
+ "release_dynamics": "ダイナミックをリリース",
+ "dynamic_details": "ダイナミック詳細",
+ "release": "投稿",
+ "i_posted": "私が発表した",
+ "delete_dynamic": "ダイナミックを削除",
+ "delete_choose": "このダイナミックを削除するのは確定ですが?",
+ "posted_on": "/s1にリリースしました",
+ "thumbs_up3": "いいね",
+ "already_praised": "いいねにした",
+ "comment": "コメント",
+ "send": "送信",
+ "comment_closed": "コメントを閉じました",
+ "your_comment": "投稿者だけがあなたのコメントを見られます",
+ "everyone_comment": "みんなさんがあなたのコメントを見えます",
+ "prohibit_comments": "コメント禁止",
+ "comments_disabled": "コメント禁止しました",
+ "open_comments": "コメントオープン",
+ "already_open": "コメントオープンしました",
+ "reply": "返信",
+ "report": "告発",
+ "report_choose": "このコメントを告発しますか?",
+ "successful_report": "告発できました、私たちは出来るだけ早く処理します",
+ "successfully_deleted": "削除しました",
+ "please_civilization": "文明交流できる人はもっと人気があります、下品、ポルノ、または他人のプライバシーを暴露するコンテンツを投稿しないでください",
+ "same_sex": "同性ユーザーには隠す",
+ "member_free": " VIPは無料、非VIPは/slH幤が必要",
+ "certified_free": "認証された女性は3回無料です、その後、支払い/s1H幤が必要です",
+ "enter_something": "テキストを入力or写真を選んでください",
+ "raid_release": "有料リリース(/s1H币)",
+ "become_member2": " VIPになり、無料投稿",
+ "now_certification": "今すぐ認証、無料投稿",
+ "successfully_released": "投稿成功",
+ "no_program": "あなたは番組を投稿したことがない",
+ "program_details": "番組詳細",
+ "program_theme": "番組テーマ",
+ "click_select": "クリックして選択",
+ "city": "都市",
+ "select_city": "都市選択",
+ "time": "時間",
+ "select_date": "日付を選択",
+ "select_time": "時間を選択",
+ "unlimited_time": "時間限定なし",
+ "supplementary_explanation": "補充説明",
+ "image": "画像",
+ "delete_program": "番組を削除",
+ "delete_choose2": "この番組を削除しますか?",
+ "please_choose": "番組のテーマを選んでください",
+ "please_choose2": "希望する相手を選んでください",
+ "please_choose3": "都市を選んでください",
+ "please_choose4": "日付を選んでください",
+ "please_choose5": "時間を選んでください",
+ "release_program": "番組を投稿",
+ "sign_up": "申し込み",
+ "end_registration": "登録を閉じる",
+ "end_choose": "デートを終了しますか?",
+ "contact_her": "彼女に連絡する",
+ "talk_him": "彼と二人チャット",
+ "report_choose2": "この申し込みメッセージを告発しますか?",
+ "release_time": "投稿時間",
+ "activity_time": "イベント時間",
+ "any_sex": "性別を問わず",
+ "look_women": "女性だけを見る",
+ "look_men": "男性だけを見る",
+ "unlimited_area": "地域問わず",
+ "program_deleted": "この番組は削除しました",
+ "cant_comment": "非VIPはコメントできません",
+ "sign_up2": "申し込み",
+ "need_photo2": "申し込みはあなたの正面写真が必要です(相手しか見られない)",
+ "registration_success": "申し込み成功、相手は気に入ったらあなたと連絡する",
+ "has_ended": "もう終了しました",
+ "men_cant": "男性は男性の番組に応募できまえん",
+ "ms_cant": "女性は女性の番組に応募できません",
+ "men_cant2": "男性は男性の番組をコメントできなせん",
+ "ms_cant2": "女性は女性の番組をコメントできません",
+ "message_push": "メッセージ送信、パスワード修正",
+ "phone_number": "携帯番号",
+ "bind_phone1": "携帯番号を関連する",
+ "more_safer": "携帯番号を関連して、あなたのアカウントの安全性を高めます",
+ "modify_choose": "関連した携帯番号を修正したいですか?",
+ "change_password": "パスワードを修正する",
+ "first_bind": "ユーザー登録パスワードを設定する前に携帯番号を関連する必要です",
+ "old_password": "元パスワード",
+ "current_password": "現行の登録パスワードを入力してください",
+ "new_password": "新しいパスワード",
+ "set_new": "6桁までの新しいパスワードを設定してください",
+ "clear_cache": "画像キャッシュをクリア",
+ "cleared_successfully": "削除しました",
+ "user_agreement1": "ユーザー使用協議",
+ "sign_out": "ログアウト",
+ "out_choose": "ログアウトしますか?",
+ "push_settings": "送信設定",
+ "permission_denied": "権限が拒否されました",
+ "push_setting2": "メッセージ送信設定",
+ "private_chat2": "二人チャット内容",
+ "new_date": "新しいデート",
+ "passed_request2": "私の視点からのアプリケーション",
+ "men_view": "男性が私のプロフィールを見たい",
+ "men_view2": "ある男性は私のSNSアカウントを見ました",
+ "men_view3": "ある男性は私のお祝儀写真を見ました",
+ "men_view4": "私の資料を確認した男性からSNSアカウントを送ってくれました",
+ "applied_successfully": "招待コード申請成功",
+ "after_open": "開いたら、該当するメッセージタイプを送信する",
+ "if_something": "もしあなたが最近3日間で彼女/彼に費用を支払ったとしたら、告発を確実した後、システムは自動的あなたに消費金額を返します",
+ "advertise": "広告を発表",
+ "false_photo": "偽り写真",
+ "erotic_vulgarity": "エロ低俗",
+ "harassment": "騒擾悪口",
+ "she_liar": "彼女は詐欺師です",
+ "he_liar": "彼は詐欺師です",
+ "provide_screenshots": "確認をフォローするために、関連のスクリーンショットを提供してください",
+ "describe_details": "詳細を説明してください(200字以内))",
+ "report_reason": "告発の原因を選んでください",
+ "report_success2": "告発成功",
+ "successfully_modified": "修正成功",
+ "boy": "男性",
+ "girl": "女性",
+ "already_applied": "申請しました",
+ "view_registration": "サインアップ",
+ "expand": "展開",
+ "collapse": "取入れる",
+ "application_notice": "申請のお知らせ",
+ "agrees_application": "あなたの申請をパスするユーザーがいる",
+ "red_photo": "ご祝儀写真",
+ "dont": "不法露出の低俗な写真/ビデオを掲載しないでください、深刻の場合はアカウントが永遠凍結処理する",
+ "current_version": "現行バージヨン",
+ "bank_card": "銀行コード関連する",
+ "choose_bank": "口座開設銀行を選んでください",
+ "bank_number": "銀行カード番号を入力してください",
+ "id_number": "証明番号を記入してください",
+ "name": "名前",
+ "bank_number2": "銀行カード番号",
+ "license_number": "証明番号",
+ "bind_phone": "携帯番号を関連する",
+ "his_homepage": "彼のホームページ",
+ "her_homepage": "彼女のホームページ",
+ "wechat_pay": "ウィーチャット支払い",
+ "facebook_pay": "フェイスブック支払い",
+ "google_pay": " google支払い",
+ "payment_successful": "支払い成功",
+ "set_amount": "換金金額を設定",
+ "enter_amount": "Hコインの数を入力してください",
+ "can_withdraw": "換金可能",
+ "language_set": "言語設定",
+ "user_agreement": "ユーザー協議",
+ "renewal_fee": "続料",
+ "open_immediately": "すぐ開通",
+ "total": "トータル",
+ "half_month": "半月",
+ "month2": "/s1ヶ月",
+ "cancel_shield": "シールドを解除",
+ "blacklist2": "ブロック",
+ "longTime": "( VIPは6秒延長できます)",
+ "longClick": "画面を押してチェックする",
+ "stop_program": "先に有効なプログラムを終了してください",
+ "not_love": "男性は男性をコレクションできない",
+ "not_love2": "女性は女性をコレクションできない",
+ "women_free": "女神は無料リリースできます",
+ "not_up_man": "彼はまだ写真をアップロードしてない",
+ "not_up_women": "彼女はまだ写真をアップロードしてない",
+ "not_illage": "プラットフォームを通じて不法取引をしないでください、告発された事実を確認出来たら、アカウントは永遠凍結で処理する",
+ "alreay_join": "申し込み済み",
+ "sure_delete": "この写真は削除しますか",
+ "white_now": "すぐ入力",
+ "personal": "あなたは自己紹介はまだ入力してない、魅力的な個人紹介はデートの成功に大きく影響を与えますよ",
+ "success": "成功",
+ "fail": "失敗",
+ "moneyPageTip": "認証されたユーザーのみご祝儀写真を設定できる",
+ "alreadyJoin": "あなたは申しみました、相手は気に入ったらあなたと連絡します",
+ "waring": "ルール違反警告",
+ "userPravicy": "ユーザーのプライバシーを尊重し、スクリーンショットを撮らないでください。次回があれば、他のユーザーの写真を見ることを禁止する",
+ "outTime": "デート時間が切りました、変更してください",
+ "reviewing": "審査中",
+ "reviewed": "審査成功",
+ "reviewedFail": "審査失敗",
+ "needCard": "ユーザーは先に銀行カードを関連してから換金することができる",
+ "women_not_d": "女性は女性のダイナミックをコメントできません",
+ "man_not_d": "男性性は男性のダイナミックをコメントできません",
+ "have_picture": "写真があれば女性を引き付けることができるよ",
+ "up_cancle": "上にスライドして送信をキャンセルする",
+ "msg_not": "メッセージはブランクにできません",
+ "need_record": "この機能は録音権限を与える必要があります",
+ "downloading_video": "ビデオファイルをダウンロードしている",
+ "reinput": "問題のシリアル番号を再入力してください",
+ "dy_delete": "あなたのダイナミックはユーザーに匿名で告発されました。システムで確認した結果よりこの動態は削除されました。二度と不正操作の場合、アカウントは永遠凍結されます。",
+ "pro_delete": "あなたの番組はユーザーから匿名で告発されました。システムで確認した結果より番組を削除しました。二度と不正操作の場合、アカウントは永遠凍結されます。",
+ "con_delete": "あなたのコメントはユーザーから匿名で告発されました。システムで確認した結果よりコメントを削除しました。二度と不正操作の場合、アカウントは永遠凍結されます。",
+ "coin_returen": "匿名ユーザーの告発より、システムはあなた最近ルール違反したことを確認出来た、ご受け取ったH幤を返済しました、二度と不正操作の場合、アカウントは永遠凍結されます",
+ "voicing": "通話中はエロやわいせつなどの違法行為が禁止されています、一旦発見したらアカウントは永遠凍結を処理する",
+ "help": "顧客サービス",
+ "translate_on": "人工翻訳をオンにする",
+ "translate_off": "人工翻訳をオフにする",
+ "becomeSvip": "/s1 H幤を使ってSVIPになります",
+ "need_svip": " svip権限をオンにできます",
+ "cannot_vip": " SVIPはVIPのチャージができません",
+ "offline": "あなたはもうオフラインです。メッセージの送信と受信ができません",
+ "otherLogin": "アカウントは他のデバイスに登録されました、もうオフラインです",
+ "no_new": "暫く新しいニュースがありません",
+ "over": "翻訳完了",
+ "bad_ev": "この翻訳内容に悪評価しますか?",
+ "right5": "もっと気持ちよくチャットする",
+ "right6": "もっと気持ちよくに使える",
+ "man_vi": "お兄ちゃん",
+ "women_vi": "お姉ちゃん",
+ "kf_tips": "サービスの効率を高めるために、以下に問題があれば、直接シリアル番号を回答してくださいね!",
+ "rejected": "拒否されました",
+ "buy_vip": "あなたは/s1H幤を支払って、VIPを購入しました",
+ "buy_program": "あなたは/s1H幤を支払って、ダイナミック番組を発表しました",
+ "del_add_money": "あなたは/s1H幤換金申請は処理出来ました、あなたの銀行カードに/s1を振込ました、ご査収ください",
+ "adding_money": "あなたが換金/s1H幤の申請は審査中です",
+ "free_translate": "無料で通訳専任者がリアルタイムで通訳してくれます",
+ "personalTraff": "あなたに専用顧客サービスを提供する",
+ "ManTranslate": "人工翻訳中...",
+ "robotTranslate": "マシン翻訳中...",
+ "translated": "人工翻訳完了",
+ "delete_progarm": "健康交流、低俗な内容を放送しないでください、発見したら削除します",
+ "open_location": "位置決め権限未許可",
+ "get_location": "他のユーザーの距離を得るために、位置決め権限を設定してください",
+ "confirm_exit": "もう一度押してログアウトします",
+ "free_program": "毎日/s1回のチャンスに無料放送を発表します",
+ "picture": "写真",
+ "camera": "カメラ",
+ "video": "ビデオ",
+ "red_money": "ご祝儀",
+ "stick": "スティック",
+ "press_say": "押したまま話す",
+ "get_money": "/s1はあなたのご祝儀を受け取りました",
+ "you_get_money": "あなたは/s1のご祝儀を受領しました",
+ "ones_money": "/s1のご祝儀",
+ "money_over": "ご祝儀は期限切り",
+ "downloading_fail": "ファイルのダウンロードに失敗しました",
+ "downloading": "ビデオファイルをダウンロードしています",
+ "back_money": "未受け取ったご祝儀は、24時間後に払い戻しいたします",
+ "no_money": "ご祝儀は存在しません",
+ "already_money": "ご祝儀は受領しました",
+ "back_user": "期限切り、アカウントへ返却しました",
+ "waiting_user": "受取を待つ",
+ "other_get": "相手が受け取りました",
+ "little": "ささやかな気持ちですが、どうぞお受け取りください",
+ "put_money": "お金を入れます",
+ "mount": "金額",
+ "over_time": "期限切り",
+ "has_get": "受け取りました",
+ "no_gift": "暫くプレゼントがない",
+ "sent_gift": "プレゼントを贈る",
+ "fill_tips": "入力してから/s1H幤が得る、関連する後修正できません",
+ "bind_code": "招待コード関連する",
+ "invide_code": "招待コード",
+ "confirm_delete": "削除確認",
+ "has_eva": "あなたは既にコメントしました",
+ "open": "オープン",
+ "voice": "音声",
+ "release_send": "離して送信",
+ "time_little": "録音時間が短すぎます",
+ "not_online": "相手はオンラインではなく、連絡ことができません",
+ "give_red_money": "あなたは/s1へ/s2H幤のご祝儀を送りました",
+ "get_red_money": "あなたは/s1から/s2H幤のご祝儀を受領しました",
+ "give_other_money": "あなたは/s1へ/s2H幤を贈りました",
+ "get_other_money": "あなたは/s1から/s2H幤を貰いました",
+ "svip": "スーパーメンバー",
+ "recommend": "お薦め",
+ "paid_you4": "あなたは(/s2H幤)を支払って、/s1のご礼儀写真を見ました",
+ "paid_you5": "あなたは(/s2H幤)を支払って、/s1の写真を見ました",
+ "paid_you6": "あなたが有料で/s1の全部資料をロック解除しました",
+ "UG_LINE0": " hiAPP許可及びサービス協議",
+ "UG_LINE1": "[序言]",
+ "UG_LINE2": "Qianhai Youlong Technology Co., Ltd.(以下は“Qianhai Youlong Technology Co., Ltd.”と略称) ユーザーは、このサービス契約(以下「契約」と略称)を真面目読み、完全に理解必要です。Qianhai Youlong Technology Co., Ltd.の責任の免除またはユーザー権利の制限を含む本契約の条款を完全に理解すること。深く読みこの契約に同意するかどうかを選択してください(未成年者は法的保護者と一緒に読んでください)。 本契約のすべての条件に同意しない限り、本契約の対象となる関連サービスを登録、ログイン、または使用する権利はありません。 あなたの登録、ログイン、使用などは、本契約に同意したものとみなされ、また本契約の条件に拘束されることも同意すること。",
+ "UG_LINE3": "本「契約」は、あなた「以下は“ユーザー”と略称」を「hiサービス」のユーザー登録、ログイン、および使用に関するQianhai Youlong Technology Co., Ltd.との間の契約です。本契約は、「hiサービス」に関連するQianhai Youlong Technology Co., Ltd.とユーザー間の権利と義務について説明しています。「ユーザー」とは、登録、ログイン、使用、閲覧する個人または団体を意味します。本契約を同意することは、本契約の条款を受けることとQianhai Youlong Technology Co., Ltd.がいつでも契約条款変更することも受け入れること。本「契約」は、Qianhai Youlong Technology Co., Ltd.がいつでも更新できます。更新された契約条款が発表されると、元の契約条款を置き換えます、改めて通知しませんので、ユーザーはこのAPPで契約条款の最新バージョンが確認できます。Qianhai Youlong Technology Co., Ltd.が契約条件を改訂した後、ユーザーが改訂された条款に同意しない場合、Qianhai Youlong Technology Co., Ltd.が提供するサービスの使用を直ちに停止してください。CyhdLimitedが提供するサービスを継続使用ユーザーは、改訂された契約に同意したものとみなされます。",
+ "UG_LINE4": "一、使用規則",
+ "UG_LINE5": "1、ユーザーが十分了解且つ同意して、ただユーザーに情況シェア、伝送、取得用のプラットフォームに限られる。ユーザーは必ずアカウントを登録した後の全ての行為に責任を取ってください。ユーザーが伝送したあらゆる内容及びそれによって発生した全ての結果も含めている。",
+ "UG_LINE6": "2、ユーザーがサービス中或いはサービスを通して伝送した全ての内容はQianhai Youlong Technology Co., Ltd.の観点と政策を反映していないことである。Qianhai Youlong Technology Co., Ltd.はそのに対して一切責任を負わないことである。",
+ "UG_LINE7": "3、ユーザーが十分了解且つ同意して、ユーザーネットワークに基づく社交情況ブラウザ製品、ユーザーが必ずその上に登録した情況の真実性、合法性、有効性を全て責任を取ること。ユーザーは他人に見せ掛けていけない、他人の名義で一切の情報を広まっていけない。登録したアカウントを悪用して他のユーザーに誤認されてはいけない。でないとQianhai Youlong Technology Co., Ltd.は直ちにサーブすを停止し、ユーザーアカウントを回収して、ユーザーにそのにより単独で一切の責任を負うことになる。",
+ "UG_LINE8": "4、ユーザーが必ずその上に登録した情況の真実性、合法性、無害性、有効性を全部責任と取る。ユーザーが広まった情報に関わる一切の法律責任はユーザー本人が担当する、Qianhai Youlong Technology Co., Ltd.に関係ないことである。",
+ "UG_LINE9": "5、Qianhai Youlong Technology Co., Ltd.が業務発展の必要を保留し、一方的に当サービスの全部或いは一部分のサービス内容をどんな時になんにも通知しない場合に変更、止まる、限定、終止或いはサービスを廃止する権利があり、ユーザーはそのリスクを負うことである。",
+ "UG_LINE10": "6、提供しているサーブす中には広告がある可能性があり、ユーザーは使用過程中に第三方サプライヤー、経営パートナーと提供している広告を現れることを同意する。",
+ "UG_LINE11": "7、ユーザーは下記内容を利用又はサービス制作、アップロード、コーピー、送信をできないこと:",
+ "UG_LINE12": "(1 ) 憲法に定められる基本原則を反対する;",
+ "UG_LINE13": "(2) 国家安全に危害すること、国家秘密を漏れること、国家政策を顛倒すること、国家統一を破壊すること;",
+ "UG_LINE14": "(3) 国家の栄誉と利益を損害すること;",
+ "UG_LINE15": "(4) 民族の恨みを煽動すること、民族差別、民族団結を破壊すること;",
+ "UG_LINE16": "(5) 国家の宗教政策を破壊すること、邪教と封建迷信を宣伝すること;",
+ "UG_LINE17": "(6) 謡言を散布すること、社会秩序をすること、社会安定を破壊すること;",
+ "UG_LINE18": "(7) 猥褻、プルノ、ギャンブル、暴力、殺人、恐怖あるいは犯罪を扇動すること;",
+ "UG_LINE19": "(8) 他者を侮辱または中傷し、その法的権利および利益を侵害すること;",
+ "UG_LINE20": "(9) 法律および行政規制により禁止されている内容及び情報。",
+ "UG_LINE21": "8、Qianhai Youlong Technology Co., Ltd.は、その合理的な判断より、法令または本契約に違反、または他人の権利やセキュリティを侵害、妨害、脅迫する、または他人になります行為、Qianhai Youlong Technology Co., Ltd.は法律に従って前述のコンテンツの送信を停止する権利があるし、独自の裁量でこの条項に違反した人に対して適切な法的措置を取る権利もあり。これには、サービスからの違法、侵害、不適切なコンテンツの削除が含まれますが、これらに限定されません 、違反者のメンバーシップを終了し、サービスのすべてまたは一部を使用することを禁止し、法令に従って関連する情報を保存し関係部門へ報告すること。",
+ "UG_LINE22": "9、ユーザーの権利と義務:",
+ "UG_LINE23": "(1 ) Qianhai Youlong Technology Co., Ltd.アカウントはQianhai Youlong Technology Co., Ltd.が所有しています、ユーザーは新規取得登録手順を完了すると、アカウントを使用する権利を取得しますが、この権利は元の申請者のものであり、アカウントの付与、借用、賃貸、譲渡、販売は禁止されること。Qianhai Youlong Technology Co., Ltd.はビジネス上のニーズにより、アカウントを回収する権利があり、また、ユーザーの写真、ビデオ、音声を使って製品プロモーション活動を実施することの権利もあること。",
+ "UG_LINE24": "(2) ユーザーはQianhai Youlong Technology Co., Ltd.での個人情報、登録情報、および送信コンテンツを変更または削除する権利を持っていますが、関連情報を削除すると、システムに保存されているテキストや写真も削除されます。 ユーザーはこのリスクを負うこと。",
+ "UG_LINE25": "(3) ユーザはアカウント情報とアカウントパスワードを安全に保つこと責任があり、ユーザーは、登録されたアカウントとパスワードが以下のアクションに対して法律責任を負う。ユーザーは、いかなる状況でも他のメンバーのアカウントまたはパスワードを使用しないことに同意する。 あなたは、誰かがあなたのアカウントまたはパスワードを使用していることを疑い場合、Qianhai Youlong Technology Co., Ltd.に直ちに連絡することを同意する。",
+ "UG_LINE26": "(4) ユーザは本契約の各条款を遵守し、正しく適度に使用するものとします、ユーザーが本契約の条款に違反した場合、Qianhai Youlong Technology Co., Ltd.は契約に従ってサービスを終了する権利を持、 同時に、Qianhai Youlong Technology Co., Ltd.はアカウントとユーザー名をいつでも回収する権利を保留しています。",
+ "UG_LINE27": "(5) ユーザーが自分の英語アカウントを持っている場合、優先的に該当アカウントをアカウントとして登録する権利を持ちます、ただし、サービスがオンラインになってから一定期間内ユーザーがアカウントを登録していない場合、あるいは、ユーザーはウィーキャットアカウント登録しますが、該当英語アカウントをウィーキャットアカウントとして使用しない場合、ユーザーは該当英語アカウントをウィーキャットアカウント登録する権利を諦めることに見られる、資源を無駄しないために、Qianhai Youlong Technology Co., Ltd.は該当英語アカウントを回収及び他ユーザーに配分使用権利があります、それらに引きこされる問題はユーザー自身責任を負うこと。",
+ "UG_LINE28": "(6)資源を無駄しないために、ユーザーはアカウントを登録した後、長期間該当アカウントをログインしない場合、Qianhai Youlong Technology Co., Ltd.は該当アカウントを回収する権利があり、それらに引きこされる問題はユーザー自身責任を負うこと。",
+ "UG_LINE29": "(7) ユーザは紛争を起きた場合、告発機能を使ってプラットフォーム利益を維持できるユーザーから告発フィードバックを受け取った場合、状況を確認するために、告発されたユーザーは顧客サービス担当者に積極的に回答または協力する義務があります、告発された内容を確認できたら、ユーザに警告し、アカウント使用機能を制限してルール違反ことを制約する権利があります、厳重者に対してhiはアカウントを直接凍結する権利がありますし、アカウントの残高も返金されません。もし、アカウントは凍結された場合、ユーザーはサービス担当者に連絡可能です 。",
+ "UG_LINE30": "二、プライバシー保護",
+ "UG_LINE31": "ユーザーは、個人のプライバシー情報とは、ユーザーに対して個人識別、個人的なコミュニケーション情報を指すことに同意する、下記の情報を含め:ユーザーの本名、携帯電話番号、ウィーキャット、faceboodアカウント、IPアドレス。非個人のプライバシー情報とは、ユーザーの操作状態及びサービスの使用習慣、客観的にQianhai Youlong Technology Co., Ltd.サーバーへ反映されている基本情報、および個人のプライバシー情報の範囲外の他のすべての一般情報、ユーザーが開示することを同意する上記のプライバシー情報を指す。ユーザーの個人プライバシーを尊敬することはQianhai Youlong Technology Co., Ltd. 一貫の制度です、法律あるいは法律許可した政府部門からの要求あるいはユーザーの許可を得た原因以外、Qianhai Youlong Technology Co., Ltd.は合理的の方法でユーザーの個人プライバシーを保護する、ユーザーの許可がない限り、Qianhai Youlong Technology Co., Ltd.は協力パートナー以外の第三者にユーザーの個人プライバシー情報を開示する。ただし、ユーザーは登録の時、許可を選択して、またはQianhai Youlong Technology Co., Ltd.と協力パートナーとユーザーの個人プライバシー情報の開示は別の約束は以外、同時に発生する可能のリスクはユーザー自分負担する必要です、Qianhai Youlong Technology Co., Ltd.はこれについて責任を負いません。また、Qianhai Youlong Technology Co., Ltd.の技術とサービスを運用および改善するため、Qianhai Youlong Technology Co., Ltd.は自ら収集、使用あるいは第三者にユーザーの非個人プライバシー情報を提供する、これにより、Qianhai Youlong Technology Co., Ltd.はユーザーにより良いユーザーエクスペリエンスを提供し、Qianhai Youlong Technology Co., Ltd.のサービスの品質を向上させることができる。Qianhai Youlong Technology Co., Ltd. はユーザーとのインタラクティブ、またはユーザーの選択より収集出来たデータ、ユーザーのプライバシー設定及びユーザー使用製品と機能。Qianhai Youlong Technology Co., Ltd.が収集するデータには、SDK / API / JSコードバージョン、IPアドレス、プラットフォーム、タイムスタンプ、アプリケーション識別子、アプリケーションバージョン、アプリケーション配布チャネル、独立したデバイス識別子、iOS Advertising Identifier(IDFA)、Android Advertising識別子、ネットワークカード(MAC)アドレス、International Mobile Equipment Identity(IMEI)、デバイスモデル、端末メーカー、端末デバイスのオペレーティングシステムのバージョン、セッションの開始/停止時間、言語の場所、タイムゾーン、ネットワークステータス(WiFiなど) ハードドライブ、CPU、バッテリーの使用量などを含まれる場合がある。これにより、Qianhai Youlong Technology Co., Ltd.は、内部データ分析と調査、第三者SDK統計サービスを実施し、Qianhai Youlong Technology Co., Ltd.の製品またはサービスを改善することができます。ユーザーID情報の信頼性を確保し、ユーザーにより良いセキュリティを提供するために、ユーザーはID情報または顔の特徴などの生物識別情報(どちらも個人敏感情報)を提供して、特定の製品サービスまたは本人の認証を完成する。上記の情報は、ユーザーの身元の信頼性を確認するためにのみ使用されます。ユーザーが提供する上記の情報は、ユーザーがサービスを使用している間、Qianhai Youlong Technology Co., Ltd.による使用を引き続き許可します。Qianhai Youlong Technology Co., Ltd.はユーザーがログアウトすると使用を停止します。上記の情報は、中華人民共和国に保存されます。 国境を越えて送信が必要な場合、Qianhai Youlong Technology Co., Ltd.はユーザーの承認を取得します。 APPユーザーの認証はユーザーがユーザーのIDの信頼性を検証できる情報を提供する必要があります。関連情報はプラットフォーム監査にのみ使用され、介入を必要とする法務部門または関連部門を除き、他のユーザーに開示されたり、商業目的に使用されたりすることはありません。",
+ "UG_LINE32": "三、Qianhai Youlong Technology Co., Ltd.商標情報",
+ "UG_LINE33": " Qianhai Youlong Technology Co., Ltd.サービスに関するlogoなどの図形、文字またはその構成、及び他Qianhai Youlong Technology Co., Ltd.マークと製品、サービス名称などは全部Qianhai Youlong Technology Co., Ltd.の商標です(以下略称“Qianhai Youlong Technology Co., Ltd.標示”)事前に Qianhai Youlong Technology Co., Ltd.の書式許可がないとユーザーはQianhai Youlong Technology Co., Ltd.標示 をいかなる方法で表示または他の処理が禁止、あなたがQianhai Youlong Technology Co., Ltd.標示の展示、使用、またはその他の権利を持っていることを他人に表明してはいけません。",
+ "UG_LINE34": "四、法律責任及び免責",
+ "UG_LINE35": "1、ユーザーは本「協議」または関連サービス条項の規定に違反し、任意の第三者の主張によるいかなる賠償、要求または損失を引き起こし、合理的な弁護士費を含み、ユーザーはQianhai Youlong Technology Co., Ltd.と協力会社、関連会社を賠償することに同意し、損害を免除させること。",
+ "UG_LINE36": "2、ユーザは、電信部門の通信回線の故障、技術問題、ネットワーク、コンピュータの故障、システムの不安定性及びその他の様々な不可抗力の原因によって被ったすべての損失については、Qianhai Youlong Technology Co., Ltd.及び協力機関は責任を負いません。",
+ "UG_LINE37": "3、技術障害などの不可抗事件によってサービスの正常運行に影響を与えた場合、Qianhai Youlong Technology Co., Ltd.と協力会社は第一時間内に関連会社と協力し、直ちに処理して修復することを承諾しましたが、ユーザーが被ったすべての損失に対して、Qianhai Youlong Technology Co., Ltd.と協力会社は責任を負いません。",
+ "UG_LINE38": "4、本サービスは大多数のインターネットサービスと同じで、ユーザーの原因、ネットサービスの質、社会環境などの要素の違いによって影響されるかもしれません。様々な安全問題に侵される可能性があります、他人がユーザーの資料を利用して、現実的な生活における嫌がらせを引き起こすかもしれません。ユーザーがインストールした他のソフトウェアや訪問した他のウェブサイトには「トロイの木馬」などのウィルスが含まれています。ユーザーのコンピュータ情報やデータの安全を脅かし、本サービスの正常な利用に影響を及ぼすなど。ユーザーは情報の安全と利用者資料の保護意識を強化し、損失や迷惑にならないように、パスワードの保護を強化してください。",
+ "UG_LINE39": "5、ユーザーは、本サービスの利用はインターネットサービスに関わるため、各環節の不安定要素の影響を受ける可能性があることを理解してください。したがって、本サービスは、不可抗力、コンピュータウイルスまたはハッカー攻撃、システムの不安定性、ユーザーの位置、ユーザのシャットダウン、その他のいかなる技術、インターネット、通信回線の原因などによるサービスの中断またはユーザーの要求を満たすことができないリスクがあります。ユーザーは以上のリスクを負担し、Qianhai Youlong Technology Co., Ltd.は担保しない。その結果、ユーザが閲覧情報を送信したり、受信したりすることができなくなり、Qianhai Youlong Technology Co., Ltd.は一切の責任を負いません。",
+ "UG_LINE40": "6、ユーザーは、サービスの使用中に、脅迫的、中傷的、好ましくない、または違法なコンテンツ、行動、または他者の権利(知的財産を含む)の侵害を含む、他者からの匿名性または匿名性があることを理解する必要があります 詐欺的な情報のリスク、ユーザーは上記のリスクを負わなければなりません、。Qianhai Youlong Technology Co., Ltd.と協力会社は本サービスに対していかなる種類の保証をしないで、明確であるかまたは暗黙的であるかに関わらず、すべての関連情報の真実性、適商性、ある特定の用途、所有権と非侵害性に適した黙示担保と条件を含み、それによっていかなる使用者の不正または不法使用サービスによって発生した直接、間接、偶然、特殊及び後続の損害に至るかについていかなる責任も負いません。",
+ "UG_LINE41": "7、Qianhai Youlong Technology Co., Ltd.で定義されている情報の内容は、文字、ソフトウェア、音声、写真、ビデオ、図表;広告中のすべての内容を含み;Qianhai Youlong Technology Co., Ltd.はユーザーに提供された商業情報で、これらのすべて著作権、商標権、その他の知的財産権と所有権は法律の保護を受けます。したがって、ユーザーはQianhai Youlong Technology Co., Ltd.と広告主の授権がある状況でしかこれらのコンテンツを使用できません。これらの内容を無断でコピー、修正、編集すること、またはコンテンツに関する派生商品を創造することは一切禁止です。",
+ "UG_LINE42": "8、いずれの場合も、Qianhai Youlong Technology Co., Ltd.は任意の間接性、結果性、懲罰性、偶然性、特殊性または刑罰性の損害、ユーザーのサービスご利用による利益損失も含め、以上について責任を負いません(たとえすでにそのような損失の可能性が告知されたとしても。)。本契約にはパラドックスな規定が含まれているかもしれませんが、Qianhai Youlong Technology Co., Ltd.があなたに対して負担しているすべての責任は、どのような行為があっても、いつまでもメンバー期間内にサービスを利用してQianhai Youlong Technology Co., Ltd.に支払う費用を超えません。",
+ "UG_LINE43": "五、VIP条項",
+ "UG_LINE44": "1、Hibok VIPは平等に会員の権利を享有し、同時にQianhai Youlong Technology Co., Ltd.の規則、本サービス条項と「ユーザー協議」を含むがこれに限らないの各条項を遵守しなければならない。",
+ "UG_LINE45": "2、Qianhai Youlong Technology Co., Ltd.の「ユーザー協議」に違反したた原因でVIPサービスの利用を一時停止させたことに関する損失はユーザー自身で負担すること。",
+ "UG_LINE46": "3、VIPはVIP資格の有効期限内にhiviipの各種付加価値サービスも享有できること。",
+ "UG_LINE47": "4、VIPがVIP資格の有効期限内に自発的にVIP資格を終了したり、キャンセルしたりする場合、Qianhai Youlong Technology Co., Ltd.は当該VIPの残りのVIP資格の有効期限に対応するサービス費用を返還しないこと。",
+ "UG_LINE48": "5、VIPは自分でhiの中で情報を伝達して、発表しておよびhi無料サービスあるいは有料サービスを使う法律責任を負って、VIPはhiサービスを使って、無料サービスと有料サービスの行為を含んで、すべて各法律法規、規則、規範性文書を守るべきであること。",
+ "UG_LINE49": "6、VIPサービスを開通後は他人に譲り渡す、キャンセルなどはできません。",
+ "UG_LINE50": "7、VIPはQianhai Youlong Technology Co., Ltd.無料サービスまたは有料サービスを利用する過程で、法律法規に違反する行為がある場合、Qianhai Youlong Technology Co., Ltd.は会員資格を取り消す権利があり、一切の補償もありません、会員は自ら責任を負うべきです。",
+ "UG_LINE51": "六、他条款",
+ "UG_LINE52": "1、Qianhai Youlong Technology Co., Ltd.は慎重にユーザーに本「協議」中のQianhai Youlong Technology Co., Ltd.の責任を免除し、ユーザーの義務を強める条項に注意してください。未成年者は法定保護者の同伴で本「協議」を読むべきです。以上の各条項の内容の最終説明権と修正権はQianhai Youlong Technology Co., Ltd.の所有になります。",
+ "UG_LINE53": "2、本「協議」に定められた如何なる条項の一部または全部無効者は、他の条項の効力に影響しません。",
+ "UG_LINE54": "3、本「協議」の解釈、効力及び紛争の解決は中華人民共和国の法律に適用される。ユーザーとQianhai Youlong Technology Co., Ltd.の間に如何なる紛争や紛争が発生した場合、まず友好的に協議して解決しなければならず、協議が成立しない場合、ユーザーはここで紛争や争議をQianhai Youlong Technology Co., Ltd.住所地の人民法院の管轄に提出することに完全に同意すること。",
+ "UG_LINE55": "4、本『契約』の著作権はQianhai Youlong Technology Co., Ltd.が所有し、Qianhai Youlong Technology Co., Ltd.は一切の解釈と修正の権利を保留します。",
+ "UG_LINE56": "Qianhai Youlong Technology Co., Ltd.",
+ "net_error": "ネットワーク異常",
+ "enter_name": "お名前を入力してください",
+ "translate": "訳",
+ "locate": "位置",
+ "voice_tips": "押しまま録音,離して送信",
+ "unlock": "アンロック",
+ "input_content": "チャット内容を入力してください",
+ "connecting": "接続中...",
+ "logining": "登録中...",
+ "reject_reply": "/s1はあなたのレビューリクエストを拒否されたました",
+ "warning_text": " H幣は入金三日間以内告発されない場合、両替可能です(1:1000ベトナムドン)",
+ "more_big": "入力数量は大きくても/s1",
+ "little_min": "入力数量は少なくても/s1",
+ "voice_msg": "/s1音声呼び出しに招待する",
+ "send_gift": "あなたは相手に/s1个/s2を贈りました",
+ "receive_gift": "先方は/s1个/s2アイテムを贈りました",
+ "cannot_join": "非VIPは申し込みできない",
+ "alreay_back": "バックしました",
+ "video_more_big": "ファイルが大き過ぎ",
+ "select_all": "全てを選択",
+ "re_connect": "再接続",
+ "voice_tips2": "離して送信、スライドしてキャンセル",
+ "country": "国",
+ "have_picture_view": "写真検定中",
+ "speaker_play": "スピーカー再生",
+ "handset_playback": "受話器再生",
+ "play_model": "受話器モード",
+ "password_less": "パスワードが短すぎる",
+ "years_old": "歳",
+ "coin_returen1": "匿名のユーザーからの告発を受けて、最近の不正行為を確認しました。二度と不正行為をしないでください。次回があれば、アカウントを凍結します",
+ "already_new": "すでに最新バージョンです",
+ "test_it": "すぐ試します",
+ "found_new": "新しいバージョンが発見",
+ "ad": "広告",
+ "attention": "注目",
+ "fans": "ファン",
+ "apply_see": "/s1 は私の資料ベージを見るリクエストがあります",
+ "agree_apply": "/s1 は私のリクエストをパスしました",
+ "see_redBag": "/s1 はご祝儀写真を見ました",
+ "notice": "注意",
+ "notice_open": "携帯電話の設定で通知権限をオンにして、メッセージの通知が受け取ります。",
+ "open_notice": "通知権限がオンになっていません",
+ "not_open": "通知権限がオンになっていませんので、通知を受信できません",
+ "withdraw_fail": "換金を申請した/s1H幤が返却されました、関連されたアカウントが正しいかを確認してください",
+ "dynamics": "タイムカプセル",
+ "Remark": "注釈とタグ",
+ "setRemark": "設定ノート",
+ "content_num": "/s1通のコメント",
+ "Redeem": "ポイント交換で/s1H幤を得る",
+ "location_permission": "携帯メモリーにアクセスする権限がありません",
+ "camera_permission": "カメラにアクセスする権限がありません",
+ "photo_permission": "アルバムにアクセスする権限がありません",
+ "video_permission": "マイクにアクセス権限がありません",
+ "your_redMoney_over": "ご祝儀が期限切り",
+ "other_redMoney_over": "相手からのご祝儀が期限切り",
+ "server_error_tips": "ちょっと不具合があるようです...",
+ "emoji": "ステッカー",
+ "today_score": "本日サインして/s1ポイントが受け入れる",
+ "sign_tips": "1.毎日サインしてポイントが受け入れます、累積日数が多ければ多いほどポイントが高くなります.\n2.ポイントはH幤に交換できます、交換はポイントを消費しますので慎重に交換してください.\n3.サインは毎月の最終日にリセットされ、ポイントもクリアされます。時間内に交換することを忘れないでください.",
+ "sign_in": "サイン",
+ "my_score": "私のポイント",
+ "signin_now": "すぐサインする",
+ "sign_in_day": "累計サイン/s1日",
+ "have_get": "交換しました",
+ "scan": "スキャン ",
+ "my_qr": "自分のQRコード",
+ "scan_and_add": "スキャンして友人を追加する",
+ "amap": "高徳マップ",
+ "baidumap": "百度マップ",
+ "googlemap": "Google マップ",
+ "applemap": "Apple マップ",
+ "go_open": "オンにする",
+ "Preview": "プレビュー",
+ "Photo_album": "アルバム",
+ "all_photo": "全ての画像",
+ "have_select": "/s1枚の画像を選択しました",
+ "loading": "読み込み中…",
+ "new_chat_msg": "新しいメッセージがあります",
+ "new_video_msg": "新しい音声メッセージがあります",
+ "apply_friends": "/s1から友人になる申請が入りました",
+ "applyed_friends": "/s1は友人の追加をパスしました",
+ "contact_permission": "連絡先にアクセスする権限がありません",
+ "contact": "連絡先",
+ "search": "検索",
+ "contact_add": "携帯のアドレス帳から追加",
+ "find": "発見",
+ "translate_robot": "翻訳ロボット",
+ "robot_hello": "こんにちは、私は翻訳ロボットです…",
+ "Simplified_Chinese": "中国語(簡体字)",
+ "traditional_Chinese": "中国語(繁体字)",
+ "english": "英語",
+ "Vietnamese": "ベトナム語",
+ "Korean": "韓国語",
+ "Japanese": "日本語",
+ "add_friends": "友人の追加",
+ "stranger": "見知らぬ人",
+ "receive_stranger": "見知らぬ人からのメッセージを受信する",
+ "signin": "SignIn",
+ "stranger_close": "メッセージの受信を拒否された、すべての情報のロックを解除し続けますか。",
+ "add": "追加",
+ "added": "追加済み",
+ "stranger_close_tips": "相手は見知らぬ人からのメッセージの受信を拒否した。",
+ "translate_fail": "翻訳失敗",
+ "no_photos": "ご祝儀写真を設定する前に写真をアップロードしてください。",
+ "successful_appeal1": "あなたのアピールコメント:/s1アピール失敗",
+ "add_success": "追加しました,相手の同意を待つ",
+ "other_pay": "他人が立て替える",
+ "friend_verification": "友人認証",
+ "add_friends_tips": "認証申請は発送しました、相手の承認待ち",
+ "i_am": "私は/s1",
+ "agree": "許可",
+ "privacyAgreement": "\"Hi\"《プライバシー協議》に同意していただくと使えます",
+ "privacy": "プライバシー協議",
+ "notification_addfriend": "Hi!友人要請が入りました、誰か確認しましょう",
+ "distance_long": "顔を付き合わせて友人追加しかできませんよ",
+ "chat_tips": "翻訳内容の正確さのために、略語は遠慮してください",
+ "fans_list": "ファンリスト",
+ "system_not_open": "機能内テスト中",
+ "service_withdraw_tips": "iOSクライアントはまだサポートされていません。Androidクライアントを使って引き出したり、下のボタンを押して引き出したりできます",
+ "withdraw_tips": "クリックして引き出し",
+ "add_member": "メンバー追加",
+ "delete_member": "メンバー削除",
+ "change_group_name": "グループ名を修正",
+ "my_group_nickname": "マイエイリアスグループ",
+ "group_chat": "グループチャット",
+ "create_group_chat": "グループチャットを作る",
+ "added_friends_tips": "認証申請を送信必要、相手がパスまで待ちます",
+ "group_chat_name": "グループ名",
+ "my_group_nickname_tips": "ここであなたのグループニックネームを設定できます、このニックネームはこのグループにしか表示されません",
+ "man_gold": "男神タイムカプセル",
+ "woman_gold": "女神タイムカプセル",
+ "choose_group_owner": "新しいグループオーナーを選択",
+ "group_announcement": "グループ通知",
+ "chat_news": "チャットメッセージ",
+ "group_qr": "グループQRコード",
+ "group_setting": "グループを管理",
+ "close_news_notice": "ミュート通知",
+ "set_chat_top": "一番上に表示する",
+ "show_group_member_name": "グループメンバーのニックネームを表示",
+ "quit_group_tips": "退出後グループチャットの他のメンバーには通知せず,これからこのグループからメッセージを受け取りません",
+ "quit_and_delete": "削除して退出",
+ "show_more_member": "さらにメンバーを見る",
+ "group_invite": "グループチャットの招待確認",
+ "change_group_owner": "グループオーナー管理権譲渡",
+ "group_setting_tips": "有効にすると、グループメンバーは、グループに友人を招待するためにグループオーナーからの確認を必要とします。ORコードスキャンしてグループに入ることは同時に停止されました。",
+ "invite_detail": "招待内容",
+ "undefine_name": "未命名",
+ "group_qr_code": "グループQRコードカード",
+ "group_qr_code_tips": "該当QRコード七日内(/s1月/s2日前)有効,再度ログインすると更新されます",
+ "Goddess_heat": "女神人気",
+ "Goddess_heat_tips": "累計収穫のプレゼント",
+ "new_friends": "新しい友人",
+ "before_three_day": "三日前",
+ "after_three_day": "この三日間",
+ "group_clean_chat_record": "チャット履歴の削去",
+ "check": "確認",
+ "apply_fro_friends": "友人要請",
+ "no_vip_cannot_withdraw": "非VIPは引き出しできません",
+ "not_true_woman": "このユーザは認証されていません、騙されないように注意してください",
+ "join_group": "グループチャットに参加する",
+ "sign_in_apple": "Appleで登録",
+ "only_host": "グループオーナーだけがグループ通知を編集することができる",
+ "send_gift1": "あなたは相手に/s1個プレゼントを贈りました",
+ "receive_gift1": "相手は/s1個プレゼントをあなたに贈りました",
+ "not_in_group": "あなたはもうこのグループにいません",
+ "creating_group": "作成中です,少々お待ちください",
+ "article": "条",
+ "group_open_verification": "このグループはすでにグループ認証をオンにしました。招待によってのみグループに入ることができます",
+ "group_memeber": "グループメンバー",
+ "invite_members": "/s1名友人をこのグループに招待する",
+ "total_members": "トータル/s1人",
+ "qr_outtime": "QRコードが失効しました",
+ "no_goupr_info": "このグループ通知がありません",
+ "you_invite": "あなたは/s1をグループに招待する",
+ "invite_you": "あなたは/s1にグループへ招待されました",
+ "invite_someone": " /s1 は /s2 を招待しました",
+ "you": "あなた",
+ "delete_group": " /s1は /s2 をグループに削除しました",
+ "you_group_owner": "あなたは新しいグループオーナーになりました",
+ "someone_group_owner": "/s1は新しいグループオーナーになりました",
+ "change_group_owner1": "グループ名は/s1に変更しました",
+ "update_group_announce": "グループ通知は更新しました",
+ "you_qr": "あなたはQRコードスキャンしてグループに入る",
+ "others_qr": "/s1はQRコードスキャンしてグループに入る",
+ "invite_confirm": "\"/s1\"は/s2名友人をグループに招待したい \\$確認\\$ ",
+ "want_invite_confirm": " \"/s1\" は\"/s2\" をグループに招待したいです ",
+ "join_group_confirm": "\"/s1\" はグループに入りました、確認済み",
+ "you_invite_gourp": "あなたは /s1にグループへ招待されました ",
+ "someone_join_group": " \"/s1\" はグループに入りました ",
+ "group_setting_tips1": "グループオーナーはすでに「グループチャット招待確認」をオンにしています。グループメンバーはグループオーナーを確認してから友達をグループに招待することができます",
+ "group_setting_tips2": "グループオーナーがデフォルトのグループ参加方法を戻す",
+ "members_max": "グループメンバーが上限になりました",
+ "group_max": "グループの数量は上限になりました",
+ "my_money_info": "私の請求書",
+ "my_left_money": "残高",
+ "money_tips": "H幣はチャージや両替で得られます、引き出しができません",
+ "get_money_detail": "所得明細",
+ "hibok_money": "Hibox收入",
+ "charge_h": "H幤に両替",
+ "charge_tips": "引き出し規則",
+ "splash_tips1": "百変の位置",
+ "splash_tips2": "翻訳ロボット",
+ "splash_tips3": "交友APP",
+ "splash_tips_content1": "百変の女神,好きのを選ぶ",
+ "splash_tips_content2": "音声チャット",
+ "splash_tips_content3": "言語問題解決",
+ "splash_go": "すぐ体験",
+ "change_h_coin": "収入から/s1H幤を両替します",
+ "Representation_succes": "申し立ては成功し、システムは返金しました",
+ "system_give": "システム支払い",
+ "exchange_fail": "引き出し申請は失敗しました,返送されました",
+ "hibok_exchange": "Hibox収入で/s 1 H幤に両替します",
+ "bind_code_success": "招待コード関連成功",
+ "translate_money": "人工翻訳のために/s1H幤を消費しました",
+ "system_back": "システムキャンセルリターン",
+ "you_give": "相手にプレゼントを贈る",
+ "you_get": "相手からプレゼントを貰った",
+ "enter_num_qian": "交換数量(单位K)",
+ "enter_num_qian1": "引き出し数量(单位K)",
+ "daily_translate_voucher": "翻译券",
+ "msg_notice":"通知消息",
+ "select_notice_people":"选择提醒的人",
+ "search_phone":"查找手机号",
+ "not_have_user":"用户不存在",
+ "not_add_Myself":"你不能添加自己",
+ "you_are_blaklisted":"对方已拉黑了你",
+ "confrim_recovery":"确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)",
+ "send_to": "發送到"
+}
\ No newline at end of file
diff --git a/i18n/ko-KR.json b/i18n/ko-KR.json
new file mode 100644
index 0000000..e52acc3
--- /dev/null
+++ b/i18n/ko-KR.json
@@ -0,0 +1,1163 @@
+{
+ "appName": " 흔호 공원",
+ "login": "로그인",
+ "registration": "회원가입",
+ "other_login": "기타 로그인",
+ "account": "아이디 ",
+ "enter_username": "아이디 입력하세요",
+ "password": "암호 ",
+ "enter_password": "암호 입력하세요",
+ "forget_password": "암호 찾기",
+ "reset_password": "암호 재설정하기 ",
+ "number_registration": "휴대폰 번호 등록",
+ "enter_number": "휴대폰 번호 입력하세요",
+ "code": "검증 코드",
+ "enter_code": "받은 인증 코드 입력하세요",
+ "send_code": "인증 코드 보내기",
+ "send_again": "다시 보내기 ",
+ "set_password": "암호 설정",
+ "password_limit": "암호 6짜리이상 설정하세요",
+ "set_password2": "로그인 암호 설정하세요",
+ "next_step": "다음 단계",
+ "agreed_agreement": "가입 버튼을 누르면《사용자 협의》을 읽고 동의함",
+ "enter_password2": "로그인 암호 입력하세요",
+ "reset_now": "바로 재설정하기",
+ "choose_gender": "성별 선택",
+ "who": "누구...",
+ "determine": "확정",
+ "cannot_modified": "성별을 선택한후에 수정할 수 없음",
+ "tip": "힌트",
+ "choose_quit": "바로 회원가입이나 탈퇴 여부?",
+ "confirm": "확인",
+ "use": "사용",
+ "cancel": "취소",
+ "close": "닫다",
+ "delete": "삭제",
+ "forget_it": "안합니다",
+ "ok": "좋습니다",
+ "choose_quit2": "등록한후에 성별 변경 할수 없습니다 .확인하시겠요?",
+ "tip_content": "힌트: 당신은 동성별 사용자와 얘기할 수 없음",
+ "welcome": "환영합니다",
+ "enter_incode": "초대 번호를 입력하세요",
+ "must_incode": "흔호 초대번호 갖은 남자만 서비스 제공함",
+ "your_incode": "당신의 초대번호 ",
+ "how_get": "초대 코드 없습니까? 다음 방식으로 받을 수 있습니다",
+ "method1": "방식 1 ",
+ "free": "공짜 신청",
+ "apply_now": "바로 신청",
+ "check_incode": "초대번호 받음",
+ "so_get": "개인 정보를 작성해서 심사 통과 후 다시 요청 코드를 보내 드립니다",
+ "apply_incode": "초대번호 신청하다",
+ "location": "소재지",
+ "cityname": "도시 ",
+ "message_channel": "정보 경로",
+ "how_know": "앱을 어디서 알게 되셨어요?",
+ "wechat_number": "Wechat 아이디 ",
+ "your_wechat": "당신의 Wechat 아이다 ",
+ "facebook": "페이스북",
+ "your_facebook": "당신의 페이스북 ",
+ "submit_application": "신청을 제출하다",
+ "enter_city": "도시명 입력하세요",
+ "so_know": "앱을 받을수 있는 경로를 알려 주세요",
+ "your_social": "사교 아이디 알려주세요",
+ "receive_incode": "당신의 신청를 최대한 빨리 처리해 드리겠습니다. 심사 통과후 고객센터에서 코드 번호를 받을수 있습니다",
+ "wait_incode": "초대 번호는 아직 발급되지 않았으니 조금만 기다려 주십시오",
+ "successful_application1": "신청 성공",
+ "application_failed1": "검토 실패",
+ "successful_copy": "복사 성공",
+ "method2": "방식 2",
+ "joinvip": "회원 가입",
+ "join_now": "바로 가입",
+ "joined": "가입 되었다",
+ "join_odds": "회원 가입 은 각종 특권 을 갖을 수 있다,요청번호 필요 없는 등록 포함",
+ "not_joinvip": "당신 아직 회원 아니였습니다",
+ "join_after": "회원 가입 후 코드 번호 없어도 등록 됩니다",
+ "incode_passed": "초대번호 인증 통과",
+ "welcome_join": "가입을 환영하다!당신의 계좌번호를 다른 사람에게 알려주지 마시오,로그인 이상을 발견하면 아이디가 자동으로 동결된다",
+ "member_centre": "고객센터",
+ "members_privilege": "회원특권",
+ "see_more": "더 많은 보기 ",
+ "unlimited_see": "사용자를 하루에 무제한으로 조회",
+ "see_cheaper": "더 싸게 볼 수 있습니다",
+ "free10": "매일/s1차 무료 기회 유료앨범이랑 사교 아이디 볼수 있다",
+ "see_longer": "더 오래 볼 수 있음",
+ "towto6": " 보고 바로 간 사진의 시간을 2초에서 /s1초로 올리기",
+ "see_better": "더 즐겁게 보다",
+ "free_release": "무료 데이트 방송 ",
+ "choose_price": "세트 선택",
+ "pay_method": "지불 방식",
+ "pay_amount": "지불 금액",
+ "not_enough": "지갑 잔액이 부족하다",
+ "confirm_pay": "지불 확인",
+ "complete_material": "정보 작성",
+ "basic_information": "기본 정보",
+ "upload_avatar": "이미지 작성",
+ "choose": "선택하세요",
+ "fill_out": "써 주세요",
+ "choose_multiple": "많이 선택할 수 있다",
+ "optional": "고르다",
+ "least": "최소 작성 s1",
+ "introduce_yourself": "자기 소개 좀 해 주세요",
+ "most": "최다/s1 선택",
+ "nickname": "닉네임",
+ "only1_8": "닉네임은 1-20 글짜만 가능합니다",
+ "Resident_city": "현재 도시",
+ "Please_select_a_resident_city": "현재 도시를 선택하십시오",
+ "City1": "칸토",
+ "City2": "다낭",
+ "City3": "하이퐁",
+ "City4": "하내 ",
+ "City5": "호치민",
+ "City6": "안강",
+ "City7": "북강",
+ "City8": "북건",
+ "City9": "볼리 아오",
+ "City10": "북닝",
+ "City11": "바디 붕타우",
+ "City12": "빈랑",
+ "City13": "평정",
+ "City14": "평약",
+ "City15": "평복",
+ "City16": "평순 ",
+ "City17": "김오",
+ "City18": "고평",
+ "City19": "더락",
+ "City20": "더농",
+ "City21": "모비안",
+ "City22": "동내 ",
+ "City23": "동타",
+ "City24": "가래",
+ "City25": "하강",
+ "City26": "해양",
+ "City27": "하남",
+ "City28": "하정",
+ "City29": "하평",
+ "City30": "후강",
+ "City31": "흥안",
+ "City32": "경하",
+ "City33": "견강",
+ "City34": "쿤호",
+ "City35": "라이저우",
+ "City36": "린동",
+ "City37": "령산",
+ "City38": "노가",
+ "City39": "롱안 ",
+ "City40": "루안",
+ "City41": "닝평",
+ "City42": "닝순",
+ "City43": "부수",
+ "City44": "부안",
+ "City45": "광평 ",
+ "City46": "광남",
+ "City47": "광의",
+ "City48": "광닝",
+ "City49": "광지",
+ "City50": "수장",
+ "City51": "산라",
+ "City52": "서닝",
+ "City53": "태평",
+ "City54": "태원",
+ "City55": "청화",
+ "City56": "승천순화",
+ "City57": "전강",
+ "City58": "차영",
+ "City59": "선광",
+ "City60": "영롱",
+ "City61": "영부",
+ "City62": "안폐",
+ "City63": "남정",
+ "birthday": "새일",
+ "choose_birthday": "생일날짜 선택",
+ "year": "년",
+ "month": "월",
+ "day": "일",
+ "hour": "시 ",
+ "minute": "분",
+ "second": "초",
+ "just": "방금",
+ "minute_ago": "/s1 분 전",
+ "hour_ago": "/s1 시간 전",
+ "day_ago": "/s1일 전",
+ "week_ago": "/s1 주전",
+ "month_ago": "s1 달 전",
+ "morning": "오전 ",
+ "noon": "점심",
+ "afternoon": "오후",
+ "night": "저녁",
+ "all_day": "하루종일",
+ "yesterday": "어제 ",
+ "two_yesterday": "그저께",
+ "overnight": "밤새",
+ "one": "개 ",
+ "ten": "십",
+ "hundred": "백",
+ "thousand": "천",
+ "ten_thousand": "만",
+ "aries": "양자리",
+ "taurus": "황소자리",
+ "gemini": "쌍둥이자리",
+ "cancer": "게자리",
+ "leo": "사자자리",
+ "virgo": "처녀자리",
+ "libra": "천칭자리",
+ "scorpio": "전갈자리",
+ "sagittarius": "사수자리",
+ "capricorn": "염소자리",
+ "aquarius": "물병자리",
+ "pisces": "물고기자리",
+ "monday": "월요일",
+ "tuesday": "화요일",
+ "wednesday": "수요일",
+ "thursday": "목요일",
+ "friday": "금요일",
+ "saturday": "토요일",
+ "sunday": "일요일",
+ "job": "직업",
+ "choose_career": "직업 선택",
+ "career1": "정보 기술",
+ "career2": "인터넷",
+ "career3": "IT",
+ "career4": "통신 운영",
+ "career5": "네트워크 게임",
+ "career6": "금용 보험",
+ "career7": "투자 ",
+ "career8": "주식 기금",
+ "career9": "보험",
+ "career10": "은행",
+ "career11": "신탁 담보",
+ "career12": "상업 서비스",
+ "career13": "컨설팅",
+ "career14": "자영업자",
+ "career15": "미용 미발",
+ "career16": "여행",
+ "career17": "호텔,식당",
+ "career18": "레저 오락",
+ "career19": "무역",
+ "career20": "자동차 ",
+ "career21": "부동산",
+ "career22": "부동산 관리",
+ "career23": "인테리어",
+ "career24": "탐정",
+ "career25": "공사 제조",
+ "career26": "건설",
+ "career27": "토목공사 ",
+ "career28": "기계제조",
+ "career29": "전자",
+ "career30": "생물의학",
+ "career31": "식품",
+ "career32": "복장",
+ "career33": "에너지",
+ "career34": "교통운송",
+ "career35": "항공",
+ "career36": "철도",
+ "career37": "운수선박",
+ "career38": "대중교통",
+ "career39": "물류 수송",
+ "career40": "문화 미디어",
+ "career41": "미디어 출판",
+ "career42": "디자인",
+ "career43": "문화 전파",
+ "career44": "광고창의",
+ "career45": "만화",
+ "career46": "홍보 전시회",
+ "career47": "촬영",
+ "career48": "오락 체육",
+ "career49": "영화",
+ "career50": "스포츠",
+ "career51": "음악",
+ "career52": "모델",
+ "career53": "공공사업",
+ "career54": "의료",
+ "career55": "법률",
+ "career56": "교육",
+ "career57": "정부 기관",
+ "career58": "공공 복지",
+ "career59": "학생",
+ "career60": "무",
+ "program": "프로그램",
+ "select_program": "국적을 선택하십시오",
+ "healthy_exercise": "건강 스포츠",
+ "night_party": "나이트 파티",
+ "gourmet_party": "음식",
+ "watch_movie": "영화감상",
+ "play_games": "게임을 하다",
+ "travel_together": "동반 여행",
+ "voice_chat": "음성 채팅",
+ "other": "기타",
+ "expect_lover": "이상형",
+ "choose_lover": "이상형 선택",
+ "beautiful": "외모",
+ "rich": "부자",
+ "care_me": "자상함",
+ "look_feeling": "첫인상",
+ "doesnt_matter": "상관 없습니다",
+ "least_account": "사교 아이디를 최소 한개 적어 주세요",
+ "hide_account1": "소셜 계정 숨기기",
+ "more_information": "더 많은 정보",
+ "height": "키",
+ "weight": "체중",
+ "not_show": "표시하지 않음",
+ "self_introduction": "개인소개",
+ "registration_success1": "등록 성공",
+ "exit": "탈퇴 확정하세요?",
+ "exit_registration": "개인 정보를 완전하게 작성하지 못했습니다. 지금은 종료하십시오. 다음에 등록 된 아이다로 직접 로그인하십시오",
+ "cant_see": "남자는 다른 남자 사용자 정보 볼 수 없다",
+ "cant_see2": "여자는 다른 여자 사용자 정보 볼 수 없다",
+ "see_one": "당신은 오늘에 /S1명 여자 볼 수 있다",
+ "only_see": "비회원은 하루에 15명 여자 사용자만 볼 수 있다",
+ "continue_see": "계속 보기",
+ "user_frozen": "아이디 동결되였다",
+ "search_user": "닉네임/직업으로 검색",
+ "nearby": "근처",
+ "member": "회원",
+ "new_registration": "새 등록",
+ "authenticate": "인증",
+ "first_online": "온라인",
+ "not_positioned": "포지셔닝이 켜져 있지 않아서 다른 사용자와 거리를 계산할 수 없음",
+ "unknown": "미지",
+ "secrecy": "비밀",
+ "collection": "수장 ",
+ "cancel_collection": "수장 취소",
+ "canceled_collection": "수장 취소되였다",
+ "like": "좋아요",
+ "added_like": "좋아한 것을 가입했다",
+ "canceled_like": "좋아한 것을 취소했다",
+ "blacklist": "블랙리스트",
+ "blacklist_choose": "더 이상 서로와 동적을 볼 수 없습니다. 확실합니까?",
+ "blacklisted": "블랙리스트에 가입했다",
+ "reject_message": "상대방을 블랙리스트에 추가하고 상대방의 메시지 수신을 거부했다",
+ "remove_blacklist": "블랙리스트 삭제",
+ "blacklist_removed": "블랙리스트 제거",
+ "receive_message": "상대방을 블랙리스트를 제거하고 소식을 거부한거도 취소했다",
+ "online": "온라인",
+ "paid_photo": "유료앨범",
+ "application_view": "보기 신청",
+ "passed": "통과했다",
+ "park": "공원",
+ "radio": "라디오 방송",
+ "news": "소식",
+ "me": "나",
+ "more_operations": "더 많은 조작",
+ "anonymous_report": "익명신고",
+ "certified_video": "인증영상",
+ "passed_video": "이미 영상을 통해 진실성을 인증했다",
+ "not_video": "아직 신분의 진실성을 인증하지 않았다",
+ "her_appointment": "그녀가 데이트를 신청했어요",
+ "pay_join": "그는 유료로 가입했습니다",
+ "passed_review": "신분 안전 심사를 통과했다",
+ "invited_user": "그는 경력많은 사용자/s1 증정 초대 번호로 가입한다",
+ "his_appointment": "그는 데이트를 신청했어요",
+ "her_dynamics": "그녀의 동태",
+ "his_dynamics": "그의 동태",
+ "low_key": "그녀는 매우 겸손하다 ",
+ "low_key2": "그는 매우 겸손하다 ",
+ "her_photo": "그녀의 앨범",
+ "his_photo": "그의 앨범",
+ "set_lock": "그는 앨범 자물쇠를 설치했다",
+ "set_lock2": "그녀는 앨범 자물쇠를 설치했다",
+ "free_unlock": "앨범 해제(/s1),회원 무료",
+ "unlock_user": "앨범 해제/s1",
+ "pay_unlock": "비용을 지불 해제(/s1H화폐)",
+ "become_member": "회원을 되면 공짜 해제",
+ "consumption_once": "한 번 기회 사용 해제/s1앨범 여부?",
+ "remaining_once": "(당신이 오늘에 아직/s1한 번 기회 있다.)",
+ "no_times": "당신이 오늘 공짜 기회 다 썼습니다. 증정/S1로 /s2 모두자료를 해제할시겠습니까?",
+ "pay": "지불",
+ "view_user": "그는 제한을 설치하여 자료를 살펴보면 그의 동의를 요청해야 한다",
+ "view_user2": "그녀는 제한을 설치하여 자료를 살펴보면 그의 동의를 요청해야 한다",
+ "need_photo": "상대방에게 당신의 사진을 한 장 보내는 것을 신청합니다.걱정하지 마세요. 상대방이 스크린을 찍는 2초 후에 삭제할 거예요",
+ "choose_photo": "사진 선택",
+ "send_application": "신청 이미 발송했고 상대방이 확인한 후에 당신은 소식을 받겠습니다",
+ "not_authenticate": "당신이 아직 인증안 했습니다",
+ "after_authenticate": "당신의 진실성을 인증한 후에다른 사람과 연락할 수 있다",
+ "authenticate_now": "바로 인증",
+ "destroy_after": "본 후에 바로 삭제",
+ "destroyed": "삭제됨",
+ "red_photo1": "보고 삭제한 빨간 봉투 사진",
+ "ask_me": "단독 체팅으로 나한데 요청해 주세요",
+ "filled_in": "작성끝, 클릭 보기",
+ "unlock_information": "해제 모두 자료",
+ "unlock_choose": "공짜 해제 한번 사용하다",
+ "your_evaluation": "당신의 진실 평가",
+ "her_evaluation": "그녀의 진실 평가 ",
+ "his_evaluation": "그는 진실 평가 ",
+ "evaluate": "평가 ",
+ "friendly": "친절하다 ",
+ "interesting": "재미는 성격",
+ "readily": "상쾌하다",
+ "patient": "인내심",
+ "indifferent": "퉁명하다",
+ "bad_temper": "난폭한 성격",
+ "courtesy": "예의",
+ "generous": "대범하다 ",
+ "lie": "거짓말",
+ "unfriendly": "불친절한다",
+ "anonymous_evaluation": "무명평가 ",
+ "cant_evaluate": "그녀를 데이트 안했으니 평가 못 한다",
+ "cant_evaluate2": "그를 데이트 안했으니 평가 못 한다",
+ "bad_evaluate": "우리가 따라가서 확인하기 위해 관련 캡처를 제공하십시오",
+ "submit": "제출",
+ "evaluation_success": "평가 성공",
+ "private_chat": "단독 채팅",
+ "close_reminder": "메시지 닫기",
+ "closed_reminder": "메시지 닫기 성공",
+ "open_reminder": "메시지를 켜다",
+ "opened_reminder": "메시지를 켜다 성공",
+ "her_account": "그녀의 사교 아이디",
+ "his_account": "그의 사교 아이디",
+ "copy": "복제",
+ "send_account": "내 사교 아이디를 보내기",
+ "enter_account": "당신의 사교 아이디 입력하세요",
+ "for_example": "예하면:Wechat 아이다 abc",
+ "sent_she": "그녀에게 보내기 ",
+ "chat": "음성 통화",
+ "cantt_voice": "상대방이 인터넷 통화 기능을 꼈다",
+ "authentication_voice": "당신의 진실성을 인증한 후에야, 주동적인 인터넷 통화를 할 수 있다",
+ "requesting_voice": "인터넷 통화를 신청하는 중이에요",
+ "waitting_answer": "대기 중",
+ "answer": "받기 ",
+ "hang_up": "끄기 ",
+ "chatting": "통화중 ",
+ "handsfree": "면제",
+ "giving_gift": "상을 주기 ",
+ "give_success": "상을 주는 게 성공하다",
+ "others_gift": "상대방은 이미 상을 주었다",
+ "given_gift": "당신 가치/s1H 화폐 의선물을 주었다",
+ "earned_gift": "당신은 가치/s1H 화폐 의선물을 받았다",
+ "available_balance": "사용 가능 잔액/s1",
+ "recharge": "충전",
+ "give": "증정",
+ "balance_insufficien": "죄송합니다. 잔액이 부족합니다",
+ "first_recharge": "충전한 후에 선물을 증정하세요!",
+ "give_coin": "이번 통화 /s1H화폐 상을 주다",
+ "get_coin": "이번 통화 /s1H화폐 상을 받다",
+ "give_get": "이번 통화 /s1H화폐 상을 주고 /s2H화폐 상을 받다",
+ "chat_over": "통화가 끝나다.통화시간 /s1",
+ "message_center": "소식센터",
+ "can_chat": "당싱이 사용자 정보 페이지에서 개인 채팅을할 수 있습니다",
+ "text_chat": "채팅",
+ "system_information": "시스템 메시지",
+ "system_notification": "시스템 알림",
+ "report_failure": "신고한 사용자/s1상황이 사실이 아니라서 더 확실한 증거를 제공한 후에 신고하세요.감사합니다!",
+ "report_success": "신고한 사용자/s1가 상황이 사실이라서 시스템은 이미 이 사용자에 대한 처리하다",
+ "successful_application": "초대 신청 성공 !초청 코드【/s1】( 클릭 복사 가능)",
+ "successful_application2": "초청 코드 성공을 신청하다 ,믿을 만한 친구를 소개해 주셔서 감사합니다!초청 코드【/s1】(클릭 복사 가능).)",
+ "application_failed": "초청 번호 신청실패한다! 당신의 신청은 심사를 통과하지 못해서 아쉽다 ,진실 정보 작성을 효과적 으로 심사 통과율 을 높일 것 이다",
+ "important_notice": "중요 소식:",
+ "authentication_failed": "당신의 인증 자료 요구에 부합되지 않는다 , 수정하고 다시 제출해 주세요",
+ "request1": "1.인증 조권을 따라서 인증 영상 찍어주세요",
+ "request2": "2.앨범에 이목구비 또렷한 얼굴 본인 사진 올려주세요",
+ "successful_authentication": "축하합니다, 당신의 인증 신청은 이미 심사를 통과했습니다",
+ "re_upload": "당신이 새 올린 사진은 심사를 통과하지 않았으니 요구를 따라 다시 올려 주십시오",
+ "upload_success": "축하합니다.당신 새 올린 사진은 심사를 통과 성공했습니다",
+ "caveat": "데이트신청은 규칙 위반으로 삭제되었기 때문에, 여러 번 규칙 또는 플랜 심각한 시스템이 당신의 계좌에 대한 제한, 심지어는 봉호까지 지켜 주시기 바랍니다. 감사합니다",
+ "caveat2": "당신의 평론은 규칙 위반으로 삭제되었기 때문에, 여러 번 규칙 또는 플랜 심각한 시스템이 당신의 계좌에 제한되어 있으며, 심지어 봉호를 준수해 주십시오. 감사합니다",
+ "radio_message": "방송 소식",
+ "no_message": " 소식 없다",
+ "dating_news": "/s1가 /s2에게 데이트 소식을 발표하여 체크 를 클릭 하다",
+ "go_see": "가서 보기 ",
+ "thumbs_up": "/s1 당신의 동태를 칭찬했다",
+ "thumbs_up2": " /s1 당신의데이트 프로그램을 칭찬했다",
+ "comment1": "/s1 당신의 동태를 평론했다",
+ "comment2": "/s1 당신의 데이트 프로그램을평론했다",
+ "replied_comment": " /s1평론을 답장했다",
+ "signed_up": "/s1 당신의 데이트 프로그램 신청했다",
+ "favorite_user": "당신이 좋아하는 사용자 /s1 데이트를 발표하여 체크하기",
+ "favorite_user2": "당신이 좋아하는 사용자/s1동태를 발표하여, 체크하기",
+ "wallet_reminder": "지갑 알람",
+ "paid_you": "/s1 (/s2H화폐)비용을 지불하다 당신 빨간 봉투사진을 보았습니다",
+ "paid_you2": "/s1 (/s2H화폐)비용을 지불하다 당신의 앨범을 보았습니다",
+ "paid_you3": "/s1비용을 지불하다 당신의 모두 자료를 보았습니다",
+ "view_application": "보기 신청",
+ "view_application2": "/s1 자세한 페이지 보기 요청",
+ "aging": "허락(유한기간: 15일)",
+ "refuse": "거절하다",
+ "passed_request": "요청을 통관했다",
+ "l15_days": "/s1 이미 당신의 조사 신청을 통과하여 유효기간 15일",
+ "evaluation_notice": " 평가통지",
+ "rate_her": "/s1이미 약속하셨어요?빨리 평가하세요",
+ "received_evaluation": "연락떤 여자 사용자(익명)가 당신한테 평가를 했습니다. :/s1",
+ "received_evaluation2": "연락떤 남자사용자(익명)가 당신한테 평가를 했습니다. :/s1",
+ "application_appeal": "만약 평가가 사실이 아니라면, 당신이 상술한 것을 신청할 수 있으니, 우리는 확인할 것이다",
+ "appeal": "상술하다",
+ "appealed": "상술을 신청했다",
+ "waiting_results": "우리는 최대한 빨리 상황을 확인할 것이며, 편지를 통해 당신에게 처리 결과를 알려 줄 것이다",
+ "successful_appeal": "상술 평가 :/s1 상술 성공하면 우리 는 당신의평가 를 철회 할 것이다",
+ "social_account": "사교 아이디",
+ "get_account": "/s1에게 당신한테 사교 아이디 보냈다",
+ "edit_information": "자료를 편집하다",
+ "save": "보존",
+ "passed_verification1": "당신이 신분 안전 인정을 통관했다",
+ "by_code": "경력 많은사용자/s1초대 코드로 통해서 가입하다",
+ "by_paying": "비용을 지불으로 가입하다",
+ "passed_verification": "당신은 이미 영상을 통해서 신분의 진실성을 인증했다",
+ "not_certified": "당신이 아직 신분의 진실성릉 인증 안했다",
+ "verificating": "저희 당신의 진실성을 인증하는 중이다",
+ "real_girl": "인증을 통관했는 여자는 인기 더 많다",
+ "certificating": "인증중",
+ "re_upload2": "영상을 다시 올리겠습니다. ",
+ "update_certification": "업데이트 인증",
+ "enjoy_privileges": "회원존을 업그레이드 하여 특권을 있다",
+ "expires": "/s1만료",
+ "wallet": "지갑",
+ "setting": "프라이버시",
+ "my_dynamic": "나의 동태 ",
+ "my_album": "나의 앨범",
+ "first_photo": "제 첫 번째 사진을 올리다",
+ "no_photo": "사진이 있어야 남자를 사로잡을 수 있다",
+ "upload_photos": "사진을 올리다",
+ "upload_video": "영상을 올리다",
+ "upload": "사진 업로드",
+ "set_photo": "빨간 봉투 사진을 설치하다",
+ "photo_order": "화면을 누르고 끌면 사진을 정렬할 수 있다",
+ "my_evaluation": "나의 평가 ",
+ "my_show": "나의프로그램",
+ "i_like": "제가 좋아하는 거",
+ "your_favorite": "당신이 좋아하는 여자가 여기 나타난다",
+ "your_favorite2": "당신이 좋아하는 남자가 여기 나타난다",
+ "no_data": "데이터가 없습니다",
+ "historical_visitor": "역사 방문객",
+ "visit_you": "/s1 한 명이 당신을 본다",
+ "visit_photo": "누군가가/s1 당신의 사진을 삭제했다",
+ "recovery_photo": "단축 복구",
+ "setting2": "설치",
+ "apply_code": "친구대신 초대번호 신청하다",
+ "issue_choose": "초청 번호는 무료입니다. 우리는 당신의 역사적 소비에 따라 초청번호를 발송할지 평가할 것입니다.공원의 분위기를 유지하기 위해서 꼭 초청번호를 믿고 믿을 만한 친구에게 증정해 주십시오",
+ "successfully_submit": "신청을 성공 제출했다",
+ "share_app": "앱을 친구에게 공유하다",
+ "need_help": "질문이 있으니까 도움이 필요하다",
+ "need_help2": "고객을 연락하다",
+ "need_help3": "서비스 효율을 높이기 위해서 아래에 문제가 있으면 숫자를 바로 답장하십시오!",
+ "question1": "【1】아이디 동결된 이유는 무엇입니까 ?",
+ "answer1": " 아래 여러 상황이 나타나면 아이다가 동결될 수 있다 :① 사기꾼 ② 중개 ③ 소란 광고 ④ 많은 사람들이 신고하다 ⑤ 이미 기타 아이디 있다 ⑥ 여러번 위반 방송국 방송의 경고를 무시했다 ⑦ 사용자 스스로 취소 요구",
+ "question2": "【2】 지갑에 현금은 언제 제시할 수 있습니까?",
+ "answer2": "모든 수익은 지갑에 직접 들어가고, 현금을 꺼낸지 3일 걸린다(수취시간 계산에 따라 시작) , 사흘 후 받은 금액은 지갑, 금액 > = 10위안을 제시할 수 있다",
+ "question3": "【3】 내가 보낸 빨간 봉투는 왜 안 뜨다?",
+ "answer3": "인터넷 원인으로 인한 것 같다.안심해, 이런 상황에서 상대방이 당신의 돈을 받을 수 없어, 빨간 봉투는 24시간 후에 자동으로 당신의 지불 루트에 돌려줄 것이다",
+ "question4": "【4】 현금을 인출하려면 얼마나 걸립니까? ",
+ "answer4": "현금 인출 신청후 두 업무일 내에 장부를 제출하다 . 훈훈한 힌트: 현금 계좌번호 확인하세요 ! ",
+ "question5": "【5】 어떻게 익명 신고 기타 사용자/라디오 내용을 할수 있겠어요 ?",
+ "answer5": "상대방의 자세한 페이지에 들어가거나 어떤 라디오 를 선택하여 오른쪽 위 각 선택 을 클릭 (익명 신고서), 관련 제보 메시지 를 기입하면 제보할 수 있다",
+ "question6": "【6】어떻게 인증 사용자 될 수 있을까요?",
+ "answer6": "인증은 다음과 같은 요구를 충족시켜야 한다 :① 개인 자료는 유효 사교 아이디를 작성 하다 ②앨범 적어도 본인의 또렷한 정면사진 한 장 올려 주세요. ③인증 페이지 검증 코드 보기, 종이에 닉네임+검증 코드 ④ 이 종이를 들고 당신의 정면과 동영상을 맞추고 인증 영상을 업로드하는 것을 클릭하여 클릭하다",
+ "question7": "【7】인증 영상은 공개 안 해도 돼요?",
+ "answer7": "설정에서 공개 여부: 사용자 중심 - 인증 동영상을 클릭 - 왼쪽 밑 구석'인증 영상을 내 자세한 페이지에 표시할 수 있다.'",
+ "question8": "【8】인증 취소를 피하는 방법?",
+ "answer8": " 앨범에 적어도본인 사진으로 표기된 사진이 한 장 있다",
+ "question9": "【9】 라디오 방송 삭제의 원인?",
+ "answer9": "라디오 방송에 민감한 도를 발표하지 못하고 예민한 단어는 암시나 명시적인 단어에 한정되지 않고 개인정보 (포함 프로필, 닉네임, 연락처) 를 발포할 수 없다. 방송은 삭제될 것이다",
+ "question10": "【10】어떻게 아이디를 취소합니까?",
+ "answer10": "아이디를 취소한후에 APP 에서 로그인할 수 없습니다. 앞으로 서비스를 사용하려면 다시 아이디 만들어야 합니다. 신중히 고려하십시오.만약 당신이아이디를 취소를 결정한다면 ,번호【12】고객직원이랑 연락 주세요 ",
+ "question11": "【11】암호 잊으면 어떡해요?",
+ "answer11": "핸드폰 번호를 통해서 등록하거나 핸드폰 번호를 바인든사용자 , 로그인 페이지 오른쪽 모서리를 통과할 수 있습니다. “ 암호 잊기 ” 기능 암호 초기화 . 사용자 납치되지 않음 핸드폰 번호를 묶어주세요. , 새 로그인 암호 다시 설정하다",
+ "question12": "【12】기타 질문 / 수동 고객 서비스 이전",
+ "answer12": "안녕하십니까?당신의 문제를 말해 주십시오 ( 고객지원 근무 시간은 매일 8:00-다음날 02:00, 상담 고객이 많아서, 답변을 기다려야 할 수도 있다. )",
+ "certification_center": "인증 센터",
+ "for_example2": " 인증 영상 촬영 방식 실례",
+ "certification_conditions": " 인증 조건",
+ "conditions1": "1.개인 이미지 양호",
+ "conditions2": "2.앨범 적어도 본인 사진 한장 올리다",
+ "verification_method": "인증 방식",
+ "method3": "1.종이 한 장에 당신의 닉네임과 이하 검증 코드를 쓰세요",
+ "method4": "2.이 종이 가지고 당신의 정면과 영상 찍으세요.(3~15초)",
+ "upload_video2": "인증 영상 올리다",
+ "after_authentication": "인증 성공한 후에 당신의 프로필은 real 로고를 표시하고 있다",
+ "show_video": "인증 영상을 내 자세한 페이지에 표시하세요",
+ "uploaded_video": "인증 영상 올린다",
+ "under_review": "심사중(24 시간 내에))",
+ "certification_status": " 인증 상태",
+ "certified": "당신은 인증 통과했다",
+ "wait_resubmitted": "인증은 다시 꺼내야 한다",
+ "reason_failure": "당신의 인증 영상은 요구에 맞지 않습니다. 원인은:",
+ "claim": "인증 요구를 따라 인증 영상 찍어주세요",
+ "claim2": "앨범에 이목구비 정면 본인 사진을 또렷하게 올려주세요",
+ "re_upload_video": "다시 인증 영상 올리세요",
+ "update_video": "인증 영상 업데이트",
+ "mask_coin": "H 화폐 ",
+ "get_way": "당신은 충전가치나 밀 개설 등의 경로를 통해 H 화폐를 받을 수 있다",
+ "coin_use": "H화는 음성 통화 및 보상에 사용할 수 있습니다.",
+ "coin_total": " H 화폐 총액",
+ "can_redeemed": "환전 가능",
+ "who_account": "/s1 아이디",
+ "bind_account": "/s1 아이디 연동",
+ "your_account": "당신의 /s1 아이디 ",
+ "get_coin2": "당신이 총지를 통해서 /s1H 화폐 받았다",
+ "viewed_your": "/s1 당신의 사교 아이디 보았다",
+ "give_gift": "/s1가 /s2 한 개 증정했다",
+ "add_coin": "+/s1H 화폐 ",
+ "give_one": "당신이 /s2에게 /s1 한 개 증정했다",
+ "less_coin": "-/s1H 화폐 ",
+ "exchange_cash": "현금을 제시하다",
+ "withdrawal_application": "출금 신청",
+ "redeem_choose": "당신의/s1H화폐 환전 가능 /s2, 태환 후 잉여 /s3H화폐. 환전신청 확실합니까",
+ "application_submitted": "출금 신청을 보냈다",
+ "working_days": "저희가 두 업무일 내에 처리할 것이며, 의문이 있으면 고객센터직원이랑 상담을 할 수 있다",
+ "cash": "현금",
+ "handling_fee": "당신이 채팅 페이지에 돈봉투를 받을 때마다 돈봉투 금액이 여기에 들어갑니다.금액이 입금된 후 3일 이내에 아무도 신고하지 않으면 현금을 인출할 수 있으며, 현금 인출은 5%의 수수료를 받게 됩니다",
+ "total_account": "계좌총액",
+ "cannot_redeemed": "금액이 부족하여, 환불할 수 없다",
+ "successful_redemption": "환불을 성공한다",
+ "redeem_choose2": "당신의 계좌 총액은 /s1위안입니다.이번에 현금을 인출할 수 있습니다./s2위안입니다.확실하세요?",
+ "personal_details": "개인 상세",
+ "public": " 공개 (추천)",
+ "paid_album": "앨범 유료 보기",
+ "must_pay": "다른 사람은 반드시 비용을 지불해야만 당신의 앨범을 볼 수 있고, 비용은 당신이 정하는데, 이것은 당신의 방문량을 낮출 수 있다",
+ "set_amount1": "보기 금액 설정",
+ "first_upload": "먼저 사진을 올리고 유료 앨범을 설정하십시오",
+ "need_permission": "보기 전에 내 검증을 통과해야 합니다",
+ "permission_choose": "다른 사람은 반드시 사진을 보내서 당신이 신분을 검증한 후에야 당신의 홈페이지를 볼 수 있게 해야 합니다, 확실합니까?",
+ "hide_me": "주변 사람들 목록에서 나를 숨 깁니다",
+ "hide_distance": "다른 사람에게 나의 거리를 숨기다",
+ "hide_account": "다른 사람에게 내 사교 아이디를 숨기다",
+ "chat_setting": "통화 제어",
+ "chat_me": "사적인 대화를 나눌 권한이 있는 사람이 나에게 통화를 일으키도록 허락하다",
+ "successfully_saved": "저장 성공",
+ "on_dynamic": "당신은 아직 동태를 발표한 적이 없다",
+ "release_dynamics": "동태를 발표하다",
+ "dynamic_details": "동태 상세",
+ "release": "발표하다",
+ "i_posted": "제가 발표한 거",
+ "delete_dynamic": "동태를 삭제하다",
+ "delete_choose": "이 동태를 삭제하시겠습니까?",
+ "posted_on": "/s1를 발표하다",
+ "thumbs_up3": "좋아요",
+ "already_praised": "이미 좋아했니다",
+ "comment": "댓글",
+ "send": "보내기 ",
+ "comment_closed": "댓글을 닫혔습니다",
+ "your_comment": "발표자만 당신의 댓글을 볼 수 있습니다",
+ "everyone_comment": "모두 사람 당신의 댓글을 볼 수 있다",
+ "prohibit_comments": "댓글 금지",
+ "comments_disabled": "댓글을 금지했다",
+ "open_comments": "댓글 개방",
+ "already_open": "댓글 개방했다",
+ "reply": "대답하다",
+ "report": "신고하다",
+ "report_choose": "이 댓글을 신고하는 것이 확실합니까?",
+ "successful_report": "신고를 성공했으니 최대한 빨리 처리해 드리겠습니다",
+ "successfully_deleted": "삭제 성공",
+ "please_civilization": "말투가 교양 있는 사람이 더 인기가 있으니, 저속하고 야한 거래를 발표하거나, 기타 사람의 프라이버시 내용을 폭로하지 마시오",
+ "same_sex": "동일한 성별의 사용자에 대해 숨김",
+ "member_free": " 회원은 무료, 비회원은 /s1H화폐 지불을 해야 한다",
+ "certified_free": "인증했는여사3회 무료이며, 그후에는 /s1H화폐 지불이 필요합니다",
+ "enter_something": "문자 내용을 입력하거나 사진을 선택하십시오",
+ "raid_release": "유료 발표(/s1H화폐)",
+ "become_member2": "회원이 되다 , 무료 발표",
+ "now_certification": "즉시 인증 ,무료 발표",
+ "successfully_released": "발표 성공",
+ "no_program": "당신은 아직 프로그램을 발표한 적이 없어요",
+ "program_details": "프로그램 상세",
+ "program_theme": "프로그램 주제",
+ "click_select": "클릭하여 선택",
+ "city": "도시 ",
+ "select_city": "도시 선택",
+ "time": "시간 ",
+ "select_date": "날짜 선택",
+ "select_time": "시간 선택",
+ "unlimited_time": "시간 제한 없음",
+ "supplementary_explanation": "보충 설명",
+ "image": "배치도",
+ "delete_program": " 프로그램 삭제",
+ "delete_choose2": "이 프로그램을 삭제하시겠습니까?",
+ "please_choose": "프로그램 주제를 선택하십시오",
+ "please_choose2": "원하는 이상형을 선택하십시오",
+ "please_choose3": "도시를 선택하세요",
+ "please_choose4": "날짜를 선택하십시오",
+ "please_choose5": "시간을 선택하세요",
+ "release_program": "프로그램을 발표하다",
+ "sign_up": "신청하다",
+ "end_registration": "신청을 마치다",
+ "end_choose": "데이트를 끝내는 게 확실해요?",
+ "contact_her": "그녀를 연락하다",
+ "talk_him": "단독 채팅하다",
+ "report_choose2": "이 신청을 신고하시겠습니까?",
+ "release_time": "발표 시간",
+ "activity_time": "활동 시간",
+ "any_sex": "성별에 제한이 없다",
+ "look_women": "여자만 보기",
+ "look_men": "남자만 보기",
+ "unlimited_area": "지역 제한이 없다",
+ "program_deleted": "이 프로그램은 이미 삭제되었다",
+ "cant_comment": "비회원 댓글할 수 없다",
+ "sign_up2": "신청하다",
+ "need_photo2": "신청하려면 당신의 정면 사진을 보내야 합니다(상대방만 볼 수 있음)",
+ "registration_success": "신청이 성공적으로 이루어졌는데, 상대방이 적절하다고 생각되면 연락드리겠습니다",
+ "has_ended": "이미 마치다",
+ "men_cant": "남자은 남자의 프로그램에 신청을 할 수 없다",
+ "ms_cant": "여자은 여자의 프로그램에 신청을 할 수 없다",
+ "men_cant2": "남자은 남자의 프로그램에 댓글을 할 수 없다",
+ "ms_cant2": "여자은 여자의 프로그램에 댓글을 할 수 없다",
+ "message_push": "소식이 추송한다,암호 수정",
+ "phone_number": "전화번호 ",
+ "bind_phone1": "핸드폰 번호를 묶다",
+ "more_safer": "휴대폰 번호를 묶어서 당신의 계좌를 더 안전하게 만들어요",
+ "modify_choose": "묶은 휴대폰 번호를 수정하고 싶으세요",
+ "change_password": "암호 수정 ",
+ "first_bind": "사용자는 먼저 휴대폰 번호를 묶어야 로그인 암호를 설정할 수 있습니다",
+ "old_password": "기본 암호",
+ "current_password": "현재 로그인 암호를 입력하십시오",
+ "new_password": "새 암호",
+ "set_new": "6자리보다 많은 새 암호를 설정하십시오",
+ "clear_cache": "사진 캐시 지우기",
+ "cleared_successfully": "제거 성공",
+ "user_agreement1": "사용자 협의",
+ "sign_out": "로그아웃",
+ "out_choose": "로그아웃 계정이 확정되었습니까?",
+ "push_settings": "추송 설정",
+ "permission_denied": "권한이 거절되었습니다",
+ "push_setting2": "소식을 추송기 설정",
+ "private_chat2": "단독 채팅 소식",
+ "new_date": "새 데이트",
+ "passed_request2": "어떤 여자가 나의 관찰 요청을 통과하였다",
+ "men_view": "내 자료 페이지를 볼남자분이 신청하셨어요",
+ "men_view2": "내 사교 아이디을 볼남자분이 있어요",
+ "men_view3": "내 빨간봉투 사진을 본 남자분이 있어요",
+ "men_view4": "이미 자료를 본남자분이 나에게 사교 아이디를 보내 줬어요",
+ "applied_successfully": "요청 코드 신청을 성공했다",
+ "after_open": "열기 후 응답 메시지 형식 보내다",
+ "if_something": "만약 당신이 최근 3일 동안 그녀/그에게 비용을 지불한 적이 있다면, 우리가 제보를 심사한 후에, 시스템은 자동적으로 당신에게 소비 금액을 반송할 것입니다",
+ "advertise": "광고하다",
+ "false_photo": "허위 사진",
+ "erotic_vulgarity": "색정적이고 저속하다",
+ "harassment": "소란을 피우고 욕설을 퍼붓다",
+ "she_liar": "그녀는 사기꾼이다",
+ "he_liar": "그는 사기꾼이다",
+ "provide_screenshots": "우리가 확인에 따를 수 있도록 관련 캡처를 제공하십시오",
+ "describe_details": "자세한 내용을 묘사하십시오(200자 이내)",
+ "report_reason": "신고의 원인을 선택하세요",
+ "report_success2": "신고가 성공했다",
+ "successfully_modified": "수정 성공",
+ "boy": "남자 ",
+ "girl": "여자",
+ "already_applied": "신청했다",
+ "view_registration": "신청 보기 ",
+ "expand": "펼치다",
+ "collapse": "닫다",
+ "application_notice": "소식 신청 ",
+ "agrees_application": "당신의 신청에 동의하는 사용자가 있습니다",
+ "red_photo": "빨간봉투 사진",
+ "dont": "불법노출 저속한 사진/동영상을 올리지 마십시오, 심각한 경우 아이디 차단됩니다",
+ "current_version": "현재 버전",
+ "bank_card": "은행 카드를 묶다",
+ "choose_bank": "계좌의개설한 은행을 선택하십시오",
+ "bank_number": "은행 카드 번호 입력하세요",
+ "id_number": "증건 번호 입력하세요",
+ "name": "성명 ",
+ "bank_number2": "은행 카드 번호 ",
+ "license_number": "증건 번호 ",
+ "bind_phone": "묶은 전화번호 ",
+ "his_homepage": "그의 홈페이지",
+ "her_homepage": "그녀의 홈페이지",
+ "wechat_pay": "Wechat 지불",
+ "facebook_pay": "facebook 지불",
+ "google_pay": "google 지불",
+ "payment_successful": "지불 성공",
+ "set_amount": "인출 금액 설정",
+ "enter_amount": "H 코인의 수를 입력하십시오",
+ "can_withdraw": "인출 가능하다",
+ "language_set": "음성 설정 ",
+ "user_agreement": "사용자 협의 ",
+ "renewal_fee": "속비",
+ "open_immediately": "즉시 개통",
+ "total": "합계",
+ "half_month": "반 개월",
+ "month2": " /s1 개월 ",
+ "cancel_shield": "차단 취소",
+ "blacklist2": "블랙리스트",
+ "longTime": "(회원이 6초까지 연장 가능)",
+ "longClick": "화면을 눌러 보기",
+ "stop_program": "발효 중인 프로그램을 먼저 종료하세요",
+ "not_love": "남자은 남자를 소장할 수 없다",
+ "not_love2": "여자은 여자를 소장할 수 없다",
+ "women_free": "여신은 무료 발표할 수 있다",
+ "not_up_man": "그는 아직 사진을 올리지 않았다",
+ "not_up_women": "그녀는 아직 사진을 올리지 않았다",
+ "not_illage": "请플랫폼을 통해 불법 거래를 하지 마십시오. 신고 상황이 사실이면 아이디 차단됩니다",
+ "alreay_join": "신청했다",
+ "sure_delete": "이 사진 삭제할 건 확실하세요?",
+ "white_now": "즉시 입력하다",
+ "personal": "당신은 아직 개인소개를 작성하지 않았는데, 사람을 끄는 개인소개는 데이트 성공에 큰 영향을 많다",
+ "success": "성공",
+ "fail": "실패",
+ "moneyPageTip": "인증된 사용자만 빨간봉투 사진을 설정할 수 있음",
+ "alreadyJoin": "당신은 이미 신청을 했는데, 상대방이 적합하다고 느끼면 연락할 것이다",
+ "waring": "반칙 경고",
+ "userPravicy": "사용자의 프라이버시를 존중하며 캡처하지 마십시오.다음에 있으면, 당신이 다른 사용자의 사진을 보는 것을 금지할 것이다",
+ "outTime": "약속시간이 지났으니 수정해주세요",
+ "reviewing": "심사중 ",
+ "reviewed": "심사 성공",
+ "reviewedFail": "심사 실패",
+ "needCard": "사용자는 먼저 은행 카드를 묶어야 현금을 인출할 수 있다",
+ "women_not_d": "여자는 여성의 동태를 댓글할 수 없다",
+ "man_not_d": "남자는 남자의 동태를 댓글할 수 없다",
+ "have_picture": "사진이 있어야 여자를 끌어들일 수 있어요",
+ "up_cancle": "업로드 전송 취소 ",
+ "msg_not": "소식을 비워둘 수 없다",
+ "need_record": "이 기능은 녹음 권한을 부여해야 합니다",
+ "downloading_video": "동영상 파일을 다운로드하는 중이다",
+ "reinput": "문제 번호를 다시 입력하십시오",
+ "dy_delete": "당신의 동태는 사용자에게 익명으로 신고되어 시스템을 확인하고 이 동태를 삭제하고 다시는 규칙을 위반한 조작을 하지 마시오",
+ "pro_delete": "당신의 프로그램은 사용자에게 익명으로 신고되어 시스템을 확인하여 이미 이 프로그램을 삭제하였다 , 다시는 규칙을 위반한 조작을 하지 마시오",
+ "con_delete": "당신의 평론은 사용자 익명에 의해 신고되어 시스템이 확인되어 이 평론을 삭제했습니다 , 다시는 규칙을 위반한 조작을 하지 마시오 ",
+ "coin_returen": "익명 사용자 신고를 거쳐 시스템에 당신은 최근에 불법 행위가 존재하고 있음을 확인하다 , 이미 당신 최근의H 화폐로 반환했다. 다음에 또 있으면 계좌가 동결될 것이다",
+ "voicing": "통화중에 음란물 및 음란물과 같은 불법 행위는 금지됩니다.발견하면 아이디 영구성 참겨 처리하다",
+ "help": "고객 서비스",
+ "translate_on": "인공 번역 개시",
+ "translate_off": "인공 번역 폐쇄",
+ "becomeSvip": "/s1 H 화폐를 쓰고 충전하며, SVIP된다",
+ "need_svip": "svip 권한 개시 가능다",
+ "cannot_vip": "SVIP 는 VIP 로 속비할 수 없습니다",
+ "offline": "연결 안돼서 소식 못 보내고 못 받다",
+ "otherLogin": "아이디가 다른 장비에 로그인되어 있습니다. 탈출했다",
+ "no_new": "아직 새 소식 없다",
+ "over": "번역 완료",
+ "bad_ev": "이 번역을 안 좋은 평가 하시겠습니까?",
+ "right5": "더 재밌게 얘기하다",
+ "right6": "더 즐겁게 쓰다",
+ "man_vi": "오빠",
+ "women_vi": "누나",
+ "kf_tips": "서비스 효율을 높이기 위해서 문제가 있으면 숫자를 바로 답장하십시오!",
+ "rejected": "거절했다",
+ "buy_vip": "당신은/s1H화폐 회원 구매",
+ "buy_program": "/s1H 화폐 게시동적 프로그램을 구매했다",
+ "del_add_money": "당신이H 화폐 인출 신청은 이미 처리되었으니, 이미 이체되었다. /s1 당신의 은행 통장에 도착하니, 알아봐 주십시오. ",
+ "adding_money": "당신이 추출한/s1H화폐를 신청하고 있다",
+ "free_translate": "무료 전문번역사 즐시 번역",
+ "personalTraff": "고객서비스를 전문적으로 드리다",
+ "ManTranslate": "인공 번역 중…",
+ "robotTranslate": "기계 번역 중…",
+ "translated": "인공 번역 완료",
+ "delete_progarm": "건강 교류, 저속한 내용을 방송하지 말고, 발견하면 삭제 처리가 될 것이다",
+ "open_location": "위치 권한을 열리지 않다",
+ "get_location": "휴댚폰 설정에서 위치 권한을 설치하여 다른 사용자와 거리를 알수 있다",
+ "confirm_exit": "한번 더 누르면 탈출다",
+ "free_program": "하루에 /s1번 기회 공짜 방송",
+ "picture": "사진",
+ "camera": "카메라",
+ "video": "영상",
+ "red_money": "빨간봉투",
+ "stick": "붙이다",
+ "press_say": "키 를 누르고 말하다",
+ "get_money": "/s1님이 당신의 빨간 봉투을 받았다",
+ "you_get_money": "/s1의빨간 봉투를 받았다",
+ "ones_money": "/s1 빨간 봉투",
+ "money_over": "빨간 봉투가 기한 지났다",
+ "downloading_fail": "영상 파일 다운로드 실패",
+ "downloading": "영상 파일 다운로드 중",
+ "back_money": "아직 받지 않은 빨간 봉투,2 4시간 후에 환불할 예정입니다",
+ "no_money": "빨간 봉투 없다",
+ "already_money": "빨간 봉투을 받았다",
+ "back_user": "기한 시간 지났으니 다시 당신의계좌로 환불되었다",
+ "waiting_user": "상대방이 받기를 기다리다",
+ "other_get": "상대방이 이미 받았다",
+ "little": "작은 생각, 파도를 타고",
+ "put_money": "돈을 빨간 봉투에 넣다",
+ "mount": "금액",
+ "over_time": "기한 지났다",
+ "has_get": "이미 받았다",
+ "no_gift": "아직 선물 없다",
+ "sent_gift": "상을 주기",
+ "fill_tips": "작성에 성공하면 /s1H 화폐를 받을 수 있으며, 연동한 후에수정할 수 없습니다",
+ "bind_code": "초대 번호연동",
+ "invide_code": "초대 번호",
+ "confirm_delete": "확인 삭제",
+ "has_eva": "당신이 이미 평가했습나다",
+ "open": "오픈",
+ "voice": "음성",
+ "release_send": "손을 놓으면 발송하다",
+ "time_little": "녹음시간 너무 짧다",
+ "not_online": "상대방이 온라인 하지 않아서 통화할 수 없다",
+ "give_red_money": "당신이 /s1에게 /s2H 화폐 빨간 봉투를 보냈다",
+ "get_red_money": "당신이 /s1준 /s2H 화폐 빨간 봉투 받았다",
+ "give_other_money": "당신이 /s1에게 /s2H화폐상을 줬다",
+ "get_other_money": " 당신이 /S1의 /s2H 화폐상 받았다",
+ "svip": "슈퍼 회원",
+ "recommend": "추천",
+ "paid_you4": "당신이(/s2H)비용을 지불했습니다/s1의 빨간 봉투 사진을 보기",
+ "paid_you5": "당신이(/s2H)비용을 지불했습니다/s1의 사진을 보기",
+ "paid_you6": "당신이 /s1무두 자료 해제를 지불했다",
+ "UG_LINE0": "흔호 앱 허락및 서비스 협의",
+ "UG_LINE1": "[제1부 및 안내]",
+ "UG_LINE2": "Qianhai Youlong Technology Co., Ltd(하명“Qianhai Youlong Technology Co., Ltd.”) 에서 사용자에게 자세하게 읽고 충분히 이해할 것 을 일깨워 준다 본《 서비스 협의》( 하명 《 협의 >》)사용자는 자세하게 읽고, 본 《협의》의 각 조항을 충분히 이해해야 한다. 면제 또는 제한 포함 Qianhai Youlong Technology Co., Ltd. 책임의 면책 조항 및 사용자에 대한 권리 제한 조항. 신중하게 읽고 받아들이거나 본 협의를 받아들이지 않는 것을 선택하십시오 (미성년자는 법정 보호자가 함께 읽으십시오). 이 협의 모든 조항을 받아들이지 않으면 등록, 로그인할 권리가 없습니다. 이 협의에 관한 서비스를 사용할 수 없습니다. 귀하의 등록,사용 등은 본 협의에 대한 받아들이고, 이 《 협의 》 각 조항의 구속에 동의할 것이다. ",
+ "UG_LINE3": "본 '협의'는 귀하(이하 '사용자'라 함)와 Qianhai Youlong Technology Co., Ltd. 간에 사용자 등록, 로그인, 이용'흔호 서비스에 관해 수립된 프로토콜입니다.본 '합의'는 Qianhai Youlong Technology Co., Ltd.와 사용자 사이의 'Hibok 서비스 관련 권리 의무'에 대해 기술합니다.\"사용자\"는 본 서비스를 등록, 로그인, 사용, 브라우징하는 개인 또는 조직을 의미합니다.본 협약에 대한 귀하의 수락 즉, 전체 조항에 의해 구속되며, 임의 서비스 약관에 대해 Qianhai Youlong Technology Co., Ltd.가 언제든지 할 수 있는 어떠한 수정도 수용하는 것을 포함합니다.본 《합의》는 Qianhai Youlong Technology Co., Ltd.가 수시로 갱신할 수 있으며, 갱신 후 합의 조항이 공표되는 즉시 원래의 합의 조항을 대체하므로 더 이상 별도로 통지하지 않고, 사용자는 본 APP에서 최신 버전의 합의 조항을 열람할 수 있습니다.Qianhai Youlong Technology Co., Ltd.에서 프로토콜 조항이 수정된 후 사용자가 수정된 조항을 수락하지 않을 경우, Qianhai Youlong Technology Co., Ltd.가 제공한 서비스를 사용 중지하고 사용자가 계속해서 Qianhai Youlong Technology Co., Ltd.가 제공한 서비스를 받은 것으로 간주됩니다",
+ "UG_LINE4": "一、사용 규칙",
+ "UG_LINE5": "1、사용자가 충분히 알고 동의하는 것은 오직 사용자가 정보를 공유, 전송 및 획득할 수 있는 플랫폼을 제공하는 것 뿐이며, 사용자는 자신이 계정을 등록한 아래의 모든 행위에 책임을 져야 하며, 그러나 당신이 전송한 어떤 콘텐츠는 물론 그로 인해 발생하는 어떤 결과도 포함됩니다",
+ "UG_LINE6": "2、사용자가 서비스 중이거나 서비스로 전송되는 어떠한 내용도 Qianhai Youlong Technology Co., Ltd.의 관점이나 정책을 반영하지 않으며, Qianhai Youlong Technology Co., Ltd.는 이에 대해 어떠한 책임도 지지 않습니다",
+ "UG_LINE7": "3、사용자가 충분히 알고 동의하면, 사용자 관계망에 기반한 소셜 정보 뷰 제품이며, 사용자는 위에 있는 등록 정보의 진실성, 적법성, 유효성에 대해 모든 책임을 져야 하며, 사용자는 다른 사람의 이름을 사칭하여 어떠한 정보를 전파해서는 안 된다",
+ "UG_LINE8": "4、사용자는 위에서 전송한 정보의 진실성, 적법성, 무해성, 유효성 등에 대해 전적으로 책임을 져야 하며, 사용자가 전파하는 정보와 관련된 어떠한 법적 책임은 사용자 스스로가 져야 하며, Qianhai Youlong Technology Co., Ltd.와는 관련이 없다",
+ "UG_LINE9": "5、 Qianhai Youlong Technology Co., Ltd. 보류는 업무 발전의 필요에 따라 일방적으로 본 서비스의 전부 또는 일부에 대해 어떠한 통지도 없이 서비스를 변경, 일시 중지, 제한, 종료 또는 철회할 수 있는 권리를 사용자가 부담해야 합니다",
+ "UG_LINE10": "6、제공되는 서비스에는 광고가 포함될 수 있으며 사용자는 사용 중 제3자 공급업체, 파트너가 제공하는 광고와 함께 표시하기로 동의합니다",
+ "UG_LINE11": "7、사용자는 다음과 같은 내용을 작성, 업로드, 복사, 전송하거나 서비스를 이용할 수 없습니다:",
+ "UG_LINE12": "(1 )헌법 의 확정 된 기본 원칙 에 반대 하다.;",
+ "UG_LINE13": "(2)국가 의 안전 을 해치고 국가 의 비밀 을 유출 하여 국가 정권 을 전복시키다 ,국가 통일 파괴;",
+ "UG_LINE14": "(3)국가의 명예와 이익을 해치다;",
+ "UG_LINE15": "(4)민족 적개심, 민족 차별을 선동하여 민족 단결을 파괴하다;",
+ "UG_LINE16": "(5)국가 종교 정책을 파괴하고 사교와 봉건 미신을 선양하다;",
+ "UG_LINE17": "(6)헛소문을 퍼뜨려 사회 질서를 어지럽히고, 사회 안정을 파괴하다;",
+ "UG_LINE18": "(7)음란, 포르노, 도박, 폭력, 살인, 공포 또는 범죄를 교사하다;",
+ "UG_LINE19": "(8)다른 사람을 모욕하거나 비방하며, 타인의 합법적 권익을 침해하다;",
+ "UG_LINE20": "(9)법과 행정 법규가 금지하는 기타 내용을 포함한 정보",
+ "UG_LINE21": "8、Qianhai Youlong Technology Co., Ltd.는 그 합리적인 판단에 따라, 관련된 법률적 법규나 본 협약의 약속을 위반하거나, 침해하거나, 그 누구의 권리나 안전을 저해하거나, 위협할 수 있는 내용을 위반하거나, 타인의 행위를 허위로 하는 경우, Qianhai Youlong Technology Co., Ltd.는 합리적으로 판단한다. 위반자 의 멤버 자격 을 종지할 수 없다, 모든 또는 일부 서비스를 막고 법률 법규에 근거하여 관련 정보를 보존하고 관련 부서에 보고하는 등",
+ "UG_LINE22": "9、사용자 권리 및 의무:",
+ "UG_LINE23": "(1 )Qianhai Youlong Technology Co., Ltd. 아이디의 소유권은 Qianhai Youlong Technology Co., Ltd.에게 있으며, 사용자는 등록 요청을 완료한 후 계정의 사용권을 얻게 되며, 이 사용권은 초기 신청 등록인에 속하며, 증여, 차용, 대여 또는 대여를 금지합니다.Qianhai Youlong Technology Co., Ltd.는 운영상 필요에 따라 사용자의 계정을 회수하고 사용자 사진, 동영상, 음성 등을 사용하여 제품 홍보 활동을 할 수 있는 권한을 가지고 있습니다",
+ "UG_LINE24": "(2)사용자는 Qianhai Youlong Technology Co., Ltd..에 있는 개인 자료, 등록 정보 및 전송 내용 등을 변경, 삭제할 권한이 있지만, 해당 정보를 삭제하는 동시에 귀하가 시스템에 저장한 어떤 문자와 그림도 삭제할 수 있다는 점에 유의해야 합니다.사용자가 이 위험을 부담해야 합니다",
+ "UG_LINE25": "(3)사용자는 등록 계정 정보 및 계정 암호의 보안을 적절하게 보관해야 할 책임이 있으며, 사용자는 등록 계정 그리고 암호 하의 행위에 대해 법적 책임을 져야 합니다.사용자는 어떤 경우에도 다른 구성원의 계정이나 암호를 사용하지 않기로 동의합니다.다른 사람이 당신의 계정이나 비밀번호를 사용하고 있다고 의심했을 때, 당신은 Qianhai Youlong Technology Co., Ltd.에게 즉시 통지하는 것에 동의합니다",
+ "UG_LINE26": "(4)사용자는 본 협약의 각 조항을 준수하여 본 서비스를 정확하고 적절하게 이용해야 하며, 사용자가 본 협약의 어떤 조항을 위반하였을 경우 Qianhai Youlong Technology Co., Ltd.는 협약에 의거하여 위약 사용자 Qianhai Youlong Technology Co., Ltd. 계정에 대한 서비스를 중지할 권리가 있습니다.아울러 Qianhai Youlong Technology Co., Ltd.는 언제든지 Qianhai Youlong Technology Co., Ltd. 계정, 사용자 이름을 회수할 권리를 보유합니다",
+ "UG_LINE27": "(5)사용자가 자신의 상용 영문 계정을 가지고 있다면, 사용자는 이 영문 계정을 우선적으로 계정으로 등록할 권리가 있지만, 사용자가 서비스에 접속한 후 일정 기간 동안 계정을 등록하지 않았거나, 사용자가 위신 계정으로 등록할 권리가 있지만, 이 영문 계정을 사용하는 것은 아닙니다. 낭비를 초래하지 않도록 이 계정을 회수할 권한이 있으며, 이로 인한 문제는 사용자 스스로 부담합니다",
+ "UG_LINE28": "(6)사용자가 계정을 등록한 후 장기간 이 계정에 로그인하지 않으면 Qianhai Youlong Technology Co., Ltd.는 리소스 낭비를 초래하지 않도록 이 계정을 회수할 권한이 있으며, 이로 인한 문제는 사용자 스스로 부담합니다",
+ "UG_LINE29": "(7)사용자 가 발생 한 분쟁 은 고발 기능 유지 사용자 플랫폼 권익 을 사용 할 수 있으며, 만약 사용자 가 신고하여 피드백 을 받을 수 있다면 , 사용자 에게 자발적 으로 알려 주거나 고객 에게 협조 할 의무 가 있다 , 신고 내용 확인 사실이 사실인지, 마스크 공원은 사용자 경고, 계좌 사용 기능 제한 등 사용자 위칙 행위를 구속할 권리가 있다 , 엄중위권자 데이트는 계좌를 직접 동결할 권리가 있고 계좌의 잔액은 반환하지 않는다.계좌가 동결되면, 고객은 고객에게 연락할 수 있다",
+ "UG_LINE30": "二、프라이버시 보호",
+ "UG_LINE31": "사용자 동의 개인 프라이버시 정보는 사용자를 개인 식별하거나 개인 통신을 할 수 있는 정보를 말하며 다음을 포함한다. 사용자의 실제 이름, 휴대폰 번호, 위챗 계정, 페이스북 계정, IP 주소.비개인 프라이버시 정보란 본 서비스에 대한 사용자의 조작 상태 및 사용 습관과 같은 일부 명확하고 객관적으로 Qianhai Youlong Technology Co., Ltd. 서버단에 반영되는 기본 기록 정보와 기타 모든 개인의 프라이버시 정보의 범위 밖의 일반 정보를 의미하며, 또한 이용자가 공개에 동의한다.이용자 개인의 프라이버시 정보의 사유성을 존중하는 것은 Qianhai Youlong Technology Co., Ltd.의 일관된 제도이며, Qianhai Youlong Technology Co., Ltd.는 이용자의 개인 프라이버시 정보 보호, 법률 또는 법률에 의한 권한 부여에 관한 정부부처의 요청 또는 사용자의 합리적인 조치를 강구하지 아니한다.그러나, 사용자가 등록할 때 동의를 선택하거나, 사용자와 Qianhai Youlong Technology Co., Ltd. 및 제휴 단위 간에 사용자의 개인 프라이버시 정보의 공개나 별도의 약정이 있는 예외를 사용하면서 사용자는 이로 인해 발생할 수 있는 어떠한 위험도 스스로 부담해야 한다.아울러 Qianhai Youlong Technology Co., Ltd.의 기술 및 서비스를 운영 및 개선하기 위해 Qianhai Youlong Technology Co., Ltd.는 사용자의 비개인 프라이버시 정보를 자체 수집하여 사용하거나 제3자에게 제공하는 데 도움이 될 수 있으며, 이는 Qianhai Youlong Technology Co., Ltd. Limited 사용자들에게 더 나은 서비스를 제공하는 데 도움이 될 것이다.Qianhai Youlong Technology Co., Ltd. 데이터 수집은 사용자와 Qianhai Youlong Technology Co., Ltd.의 인터렉션과 사용자의 선택에 따라 사용자의 프라이버시 설정 그리고 사용자가 사용하는 제품과 기능을 포함한다.Qianhai Youlong Technology Co., Ltd.가 수집한 데이터는 SDK/API/JS 코드 버전, IP 주소, 플랫폼, 타임스탬프, 애플리케이션 식별자, 애플리케이션 배포 채널, 독립 디바이스 식별자, iOS 광고를 포함할 수 있습니다.이는 Qianhai Youlong Technology Co., Ltd.가 내부 데이터 분석과 연구, 제3자 SDK 통계 서비스를 전개하고 Qianhai Youlong Technology Co., Ltd.의 제품 또는 서비스를 개선하는 데 도움이 될 것입니다.사용자의 신원 진실성을 확보하고 사용자에게 더 나은 안전 보장을 제공하기 위해 사용자가 제출해야 하는 신원 정보나 안면 특징과 같은 생체 인식 정보(모두 개인 민감한 정보)는 구체적인 제품 서비스를 완료하는 데 필요하거나 필요한 실제 사용자의 인증에만 사용될 것입니다.사용자가 제공한 . 상기 정보는 사용자가 본 서비스를 사용하는 동안 Qianhai Youlong Technology Co., Ltd.에게 지속적으로 권한을 부여합니다.사용자가 계정을 해지할 때 Qianhai Youlong Technology Co., Ltd.가 사용 중지됩니다.상술한 정보는 중화인민공화국 경내에 저장될 것이다.크로스오버 전송이 필요한 경우, Qianhai Youlong Technology Co., Ltd.는 사용자의 라이선스 동의를 별도로 구합니다.App 사용자 진정성 인증에는 사용자의 신원을 확인할 수 있는 일부 자료가 필요합니다.관련 자료는 플랫폼 심사만을 사용하여 어떠한 다른 사용자에게 공개되거나 상업적 용도로 사용되지 않으며, 법률 또는 관련 부서의 개입 요청만 제외됩니다",
+ "UG_LINE32": "三、 Qianhai Youlong Technology Co., Ltd. 상업 로고 정보",
+ "UG_LINE33": "Qianhai Youlong Technology Co., Ltd. 서비스에서 다루는 logo와 같은 그래픽, 문자 또는 그 구성, 그리고 기타 Qianhai Youlong Technology Co., Ltd. 로고 및 제품, 서비스 (이하 이름은 Qianhai Youlong Technology Co., Ltd.라는 상표입니다.)Qianhai Youlong Technology Co., Ltd.의 사전 서면 동의 없이, 사용자는 Qianhai Youlong Technology Co., Ltd. 표시를 어떤 방식으로든 보여지거나 사용하거나 다른 방법으로 처리하거나, 다른 사람에게 당신이 Cyhd를 전시, 사용할 권리가 있음을 나타내지 또는 기타 권한 있는 행위",
+ "UG_LINE34": "四、법적 책임 및 면책",
+ "UG_LINE35": "1、사용자는 본 <합의> 또는 관련된 서비스 약관의 규정을 위반하여 발생하거나 발생한 어떠한 제3자가 주장하는 어떠한 클레임, 요청 또는 손해에 대해서도 합리적인 변호사비를 포함하여 Qianhai Youlong Technology Co., Ltd.와 협력사, 관련 회사를 배상하고 손해를 피하는데 동의합니다",
+ "UG_LINE36": "2、Qianhai Youlong Technology Co., Ltd.及合作单位不承担责任。사용자가 전기통신 부문과 같은 제3자의 통신회선 고장, 기술 문제, 네트워크, 컴퓨터 고장, 시스템 불안정성 및 기타 여러 가지 불가항력적인 이유로 입은 모든 손실에 대해 Qianhai Youlong Technology Co., Ltd. 및 협력 단위는 책임을 지지 않습니다",
+ "UG_LINE37": "3、기술적 고장과 같은 불가항적인 사건으로 서비스의 정상 운영에 영향을 미치는 경우, Qianhai Youlong Technology Co., Ltd. 및 협력 단위는 제1시간 이내에 해당 기관과 협조하여 적시에 처리하고 복구할 것을 약속하지만, 사용자가 이로 인해 입은 모든 손해, Qianhai Youlong Technology Co., Ltd.는 책임을 지지 않습니다",
+ "UG_LINE38": "4、본 서비스는 대부분의 인터넷 서비스와 마찬가지로 이용자의 원인, 인터넷 서비스 품질, 사회 환경 등의 차이에 한정되지 않고, 타인이 이용자의 자료를 이용, 접속하는 경우, 이용자가 접속하는 경우, 이용자의 접속을 저해할 수 있다.이용자는 정보보안 및 이용자 자료의 보호의식을 강화해야 하며, 손해나 스토킹을 당하지 않도록 패스워드 보호 강화에 유의해야 한다",
+ "UG_LINE39": "5、사용자는 본 서비스 사용은 Internet 서비스에 관련된 것으로 인해 각 세션의 불안정한 요소에 의해 영향을 받을 수 있다는 것을 알아야 합니다.따라서 본 서비스는 불가항력, 컴퓨터 바이러스 또는 해킹, 시스템 불안정, 사용자의 위치, 사용자의 셧다운 그리고 기타 어떤 기술, 인터넷락, 통신회선 원인 등에 의한 서비스 중단 또는 사용자의 요구를 충족하지 못할 리스크가 있습니다.사용자는 위 위험을 감수해야 하며 Qianhai Youlong Technology Co., Ltd.는 보증하지 않습니다.이로 인해 사용자가 읽기 메시지를 보내고 받을 수 없게 되거나 잘못된 메시지를 수신하게 되는 것에 대해 Qianhai Youlong Technology Co., Ltd.는 어떠한 책임도 지지 않습니다",
+ "UG_LINE40": "6、사용자 사용을 알아야 하는 과정에서 본 서비스에는 존재하고 타인의 어떠한 위협적인 비방성을 포함한 것이다.,,거슬린 내용이나 불법 행위나 타인에 대한 권리를 침해하거나()의 지적 재산권을 포함한 정보의 익명성 또는 위험에 대리 가입자 이상을 부담하고 협력사 리스크에 대한 본 Qianhai Youlong Technology Co., Ltd..어떠한 유형의 부당 업무와 상관 없이 명확한 담보나 숨은 정보를 포함, 모든 관계자성, 진실성에 적합하다 이제 특정 용도로 사용하고 있다.아닌 소유권과 특허 침해와 묵시적 담보에 대한 조건으로 이로 인해 부당한 어떠한 불법 이용자에 따른 서비스를 이용하거나 직간접적으로, 우연히, 특수한 피해 및 후속도 책임을 지지 않고 있다",
+ "UG_LINE41": "7、Qianhai Youlong Technology Co., Ltd.가 정의하는 정보는 문자, 소프트웨어, 음성, 사진, 비디오, 그래프, 광고에서 전체 내용; Qianhai Youlong Technology Co., Ltd.가 사용자들에게 제공하는 상업적 정보, 기타 모든 것들을 저작권으로 보호한다.그래서 사용자는 Qianhai Youlong Technology Co., Ltd.와 광고주의 권한 하에서만 이러한 콘텐츠를 사용할 수 있으며, 이.약간의 내용을 무단으로 복사, 수정, 편찬하거나 콘텐츠와 관련된 파생상품을 창출할 수 없다",
+ "UG_LINE42": "8、어떠한 경우에도 Qianhai Youlong Technology Co., Ltd.는 어떠한 간접성, 결과성, 징벌성, 우발적, 특수성 또는 형벌적 피해에 대하여 사용자의 서비스 이용으로 인한 이익손실을 포함하여 책임을 부담한다(예: 이미 고지되었다 하더라도). 본 협약에 상반되는 규정이 포함될 수 있음에도 불구하고, Qianhai Youlong Technology Co., Ltd.가 귀하에게 부과하는 모든 책임은 어떠한 이유로든, 어떤 행위 방식으로든 귀하가 멤버십 기간 동안 서비스를 이용함으로써 Qianhai Youlong Technology Co., Ltd.에게 지불한 비용을 초과하지 않습니다",
+ "UG_LINE43": "五、회원 약관",
+ "UG_LINE44": "1、흔호 회원 평등로 회원 권리를 쓸 수 있으며, 또한 Qianhai Youlong Technology Co., Ltd. 의 각종 규범, 규칙을 지켜해야 하며, 이 서비스조항과 사용자협의에 제한되지 않는다",
+ "UG_LINE45": "2、Qianhai Youlong Technology Co., Ltd. < 사용자 협의 > 위반하면 회원 서비스 중단된 관련 손실은 사용자가 스스로 부담한다 ",
+ "UG_LINE46": "3、회원 은 회원 자격 유효 기간 내에 흔호 회원 의 각종 추가 서비스 를 쓸수 있다 ",
+ "UG_LINE47": "4、회원 자격 유효기간 내에 회원 자격 정지나 취소, Qianhai Youlong Technology Co., Ltd. 는 회원 잉여 회원 자격 유효기간에 대한 서비스 비용을 반환하지 않습니다",
+ "UG_LINE48": "5、회원은 흔호중 전송이랑정보 및 흔호 무료 서비스 또는 요금 서비스를 이용한 법률 책임, 회원은 흔호 서비스, 무료 서비스와 요금 서비스를 포함하는 행위를 포함하여, 모든 법률 법규, 규범, 규범성 서류를 지켜해야 한다",
+ "UG_LINE49": "6、회원 서비스가 개통된 후에는 양도 또는 취소를 할 수 없습니다",
+ "UG_LINE50": "7、회원은 Qianhai Youlong Technology Co., Ltd. 무료 서비스 또는 유료 서비스를 이용하면서 법적 법규를 위반하는 행위가 있기 때문에, Qianhai Youlong Technology Co., Ltd.는 해당 회원의 자격을 취소할 권리가 있으며, 그에 대한 보상은 일체가 없이, 그리고 회원은 스스로 책임을 져야 한다",
+ "UG_LINE51": "六、기타 조항",
+ "UG_LINE52": "1、Qianhai Youlong Technology Co., Ltd. 사용자 주의본 협의에서 Qianhai Youlong Technology Co., Ltd. 책임과 사용자 의무를 강화하는 조항은 사용자가 자세히 읽으십시오. 자율적으로 위험을 고려합니다. 미성년자는 법정 보호자의 배동에서 본 《협의》를 읽어야 한다.이상 각종 조항 내용 의 최종 해석권 및 수정권 은 Qianhai Youlong Technology Co., Ltd. 소유",
+ "UG_LINE53": "2、본 《협의》 가 정한 무두 조항의 일부나 전부효자 는 다른 조항의 효력 에 영향을 하지 않는다",
+ "UG_LINE54": "3、본 《협의》의 해석, 효력 및 분쟁의 해결, 중화인민공화국 법률에 적용된다. 사용자와 Qianhai Youlong Technology Co., Ltd. 사이의 어떤 분쟁이나 논란이 발생한다면 우선 우호적인 협상이 이루어지지 않는다면, 사용자는 분쟁이나 논란을 제기하거나 논란을 제기할 수 있는 Qianhai Youlong Technology Co., Ltd. 주소 인민법원 관할",
+ "UG_LINE55": "4、본 <협의>'의 판권은 Qianhai Youlong Technology Co., Ltd. 모든 해석과 권리 수정이 보유합니다",
+ "UG_LINE56": "Qianhai Youlong Technology Co., Ltd.",
+ "net_error": "네트워크 이상하다",
+ "enter_name": "이름을 입력하세요",
+ "translate": "번역",
+ "locate": "위치 ",
+ "voice_tips": "누르면 녹음하고 놓치면 보내다",
+ "unlock": "해제",
+ "input_content": "체팅내용 입력하세요",
+ "connecting": "연결중…",
+ "logining": "등록중…",
+ "reject_reply": "/s1 당신의 보기 신청을 거절했다",
+ "warning_text": "H 돈을 입금한지 3일 안에서 아무도 신고하지 않으면 즉시 환전할 수 있다 (1:1000베트남 동)",
+ "more_big": "입력한 개수는 /s1 많으면 안된다",
+ "little_min": "입력한 개수는 /s1 적으면 안된다",
+ "voice_msg": "/s1 통화를 요청합니다",
+ "send_gift": "당신은 상대방에게 상을 주었다 /s1개 /s2",
+ "receive_gift": "상대방이 너에게 상을 주었다 /s1개 /s2",
+ "cannot_join": "비회원 신청 못한다",
+ "alreay_back": "반품했다",
+ "video_more_big": "파일이 너무 크다",
+ "select_all": "무두 선택 ",
+ "re_connect": "다시 연결 ",
+ "voice_tips2": "열히면 보내다, 슬라이딩으면 취소하다",
+ "country": "나라",
+ "have_picture_view": "사진을 심사중",
+ "speaker_play": "스피커 방송",
+ "handset_playback": "수화기 방송",
+ "play_model": "수화기 모드",
+ "password_less": "암호가 너무 짧음",
+ "years_old": "나이",
+ "coin_returen1": "익명의 사용자의 제보로,시스템은 당신이 최근 위반행위를 한 것을 확인하였으므로,더 이상 위반을 하지 마십시오.다음이 있는 경우 계정 동결 진행할것이다.",
+ "already_new": "이미 최신 버전입니다.",
+ "test_it": "즉시 체험",
+ "found_new": "새 버전이 발견됨",
+ "ad": "광고",
+ "attention": "관심을 가지다",
+ "fans": "팬",
+ "apply_see": "/s1 내 자료 페이지 보기 요청.",
+ "agree_apply": "/s1 내 보기 요청을 통과했다.",
+ "see_redBag": "/s1 내 돈봉투 사진을 봤습니다.",
+ "notice": "상기",
+ "notice_open": "휴대폰 설정에서 알림을 받을 수 있도록 알림 권한을 켜십시오.",
+ "open_notice": "알림 권한이 켜져 있지 않음",
+ "not_open": "알림 권한이 켜져 있지 않아 알림을 수신할 수 없음",
+ "withdraw_fail": "당신이 인출을 신청한/s1H달러가 반송되었으니, 계좌를 묶는 것이 올바른지 확인하세요.",
+ "dynamics": "동태",
+ "Remark": "비고",
+ "setRemark": "비고 설치",
+ "content_num": "/s1 건 평론",
+ "Redeem": "포인트 태환 획득/s1H화폐",
+ "location_permission": "모바일 저장을 방문 권한이 없음",
+ "camera_permission": "카메라 방문 권한이 없음",
+ "photo_permission": "앨범 방문 권한이 없음",
+ "video_permission": "마이크를 방문 권한이 없음",
+ "your_redMoney_over": "당신이 보낸 돈봉투는 이미 기한이 지났다.",
+ "other_redMoney_over": "상대방이 보낸 돈봉투는 이미 기한이 지났다.",
+ "server_error_tips": "뭔가 문제가 생긴 것 같은데…",
+ "emoji": "표정",
+ "today_score": "오늘 수령 가능/s1 적분에 서명합니다.",
+ "sign_tips": "1. 매일 수령 가능한 포인트에 서명하고, 누적 일수가 많을수록 포인트가 높습니다. \n2.포인트는 H 화폐를 바꿀 수 있습니다. 포인트는 해당 포인트를 사용하므로 신중한 태환. \n3.매월 마지막 날 서명 초기화, 포인트가 적립, 잊지 말고 바로 교환하세요.",
+ "sign_in": "서명을 하다.",
+ "my_score": "내 포인트",
+ "signin_now": "즉시 서명하다.",
+ "sign_in_day": "누적된 서명/s1일",
+ "have_get": "기환",
+ "scan": "스캔",
+ "my_qr": "내 QR 코드",
+ "scan_and_add": "스캔하고 친구 추가",
+ "amap": "구다지도",
+ "baidumap": "바이두지도",
+ "googlemap": "구글지도",
+ "applemap": "애플지도",
+ "go_open": "열다",
+ "Preview": "미리 보기",
+ "Photo_album": "앨범",
+ "all_photo": "모두 사진",
+ "have_select": "당신이 /s1 장 사진을 선택했습니다.",
+ "loading": "로드 중 …",
+ "new_chat_msg": "새로운 채팅 메시지가 있습니다.",
+ "new_video_msg": "새로운 통화 메시지가 있습니다.",
+ "apply_friends": "/s1친구 되기 신청",
+ "applyed_friends": "/s1은 당신의 친구 요청을 통과했습니다.",
+ "contact_permission": "통신록을 방문할 권한이 없습니다.",
+ "contact": "통신록",
+ "search": "검색",
+ "contact_add": "통신록의 친구 추가",
+ "find": "발견",
+ "translate_robot": "번역 로봇",
+ "robot_hello": "안녕하세요, 번역로봇입니다…",
+ "Simplified_Chinese": "중국어(간체 )",
+ "traditional_Chinese": "중국어(번체)",
+ "english": "영어",
+ "Vietnamese": "베드남어",
+ "Korean": "한국어",
+ "Japanese": "일본어",
+ "add_friends": "친구 추가",
+ "stranger": "모른 사람",
+ "receive_stranger": "모른 사람 보낸 메시지를 수신",
+ "signin": "SignIn",
+ "stranger_close": "상대방은 낯선 사람이 보낸 소식을 수신하기를 거부하며, 모든 자료를 계속 잠글지 여부를 결정합니다.",
+ "add": "추가하다.",
+ "added": "추가했다.",
+ "stranger_close_tips": "상대방은 낯선 사람이 보낸 소식을 수신하기를 거부했다.",
+ "translate_fail": "번역에 실패하다.",
+ "no_photos": "먼저 사진을 업로드하고 돈봉투 사진을 설정하십시오.",
+ "successful_appeal1": "당신 항소의 평가: /s1 항소에 실패했습니다.",
+ "add_success": "추가 성공, 상대방 동의 대기.",
+ "other_pay": "다른 사람이 대신 지불하다.",
+ "friend_verification": "친구 검증",
+ "add_friends_tips": "당신은 이미 검증 신청을 보냈으니, 상대방이 통과할 때까지 기다려라.",
+ "i_am": "나는/s1",
+ "agree": "허락",
+ "privacyAgreement": "\"Hi\"는 당신이 <프라이버시 협약>에 동의해야 사용할 수 있다.",
+ "privacy": "프라이버시 협약",
+ "notification_addfriend": "Hi! 누군가가 너를 친구로 추가하자고 신청했어. 누군지 보세요.",
+ "distance_long": "얼굴을 마주해야 친구를 추가할 수 있어요",
+ "chat_tips": "번역 내용의 정확성을 위해서, 간단히 쓰지 마세요.",
+ "fans_list": "팬 목록",
+ "system_not_open": "기능 내측 중",
+ "service_withdraw_tips": "iOS 클라이언트는 현찰 인출을 당분간 지원하지 않으며, 당신은 안드로이드 클라이언트를 사용하여 현금을 인출하거나, 아래 버튼을 클릭하여 인출할 수 있다.",
+ "withdraw_tips": "현금 인출 클릭",
+ "add_member": "멤버 추가",
+ "delete_member": "멤버 삭제",
+ "change_group_name": "그룹 이름 수정",
+ "my_group_nickname": "이 그룹에 있는 내 닉네임",
+ "group_chat": "그룹 채팅",
+ "create_group_chat": "그룹 채팅 창건하다.",
+ "added_friends_tips": "너는 상대방이 통과할 때까지 검증 신청을 보내야 한다.",
+ "group_chat_name": "그룹 채팅 미름",
+ "my_group_nickname_tips": "여기서는 당신이 이 그룹에 있는 닉네임을 설정할 수 있으며, 이 닉네임은 이 그룹에만 표시됩니다.",
+ "man_gold": "남신 동태",
+ "woman_gold": "여신 동태",
+ "choose_group_owner": "새 그롭 주인 선택",
+ "group_announcement": "그롭 공고",
+ "chat_news": "채팅 소식",
+ "group_qr": "그롭 코드",
+ "group_setting": "그롭 관리",
+ "close_news_notice": "메시지 알림 비활성화",
+ "set_chat_top": "맨 위에 고정",
+ "show_group_member_name": "그룹 멤버의 닉네임을 표시합니다",
+ "quit_group_tips": "탈퇴 후 그롭 채팅 중 다른 멤버에게 통보하지 않으며, 더 이상 이 그롭 채팅 소식을 받지 않는다.",
+ "quit_and_delete": "삭제 후 종료",
+ "show_more_member": "멤버 더 보기 ",
+ "group_invite": "그롭 채팅 요청 확인",
+ "change_group_owner": "그롭 주인 관리권 양도",
+ "group_setting_tips": "부팅 후, 그룹 멤버는 그룹 소유자가 확인해야 친구를 그룹에 초대할 수 있습니다. 코드로 그롭 들어가는 것은 동시에 중지될 것이다.",
+ "invite_detail": "요청 상세",
+ "undefine_name": "이름 없다",
+ "group_qr_code": "그롭 코드 명함",
+ "group_qr_code_tips": "이 코드는 7일 이내(/s1월/s2일 전) 유효하며 재진입이 갱신됨",
+ "Goddess_heat": "여신 인기",
+ "Goddess_heat_tips": "누적 수확의 선물",
+ "new_friends": "새 친구",
+ "before_three_day": "3일 전",
+ "after_three_day": "근 3일",
+ "group_clean_chat_record": "채팅 기록 지우기",
+ "check": "보기",
+ "apply_fro_friends": "당신을 친구로 추가해 달라고 요청했습니다",
+ "no_vip_cannot_withdraw": "비회원은 현금을 인출할 수 없다.",
+ "not_true_woman": "이 사용자는 인증되지 않았으므로, 속지 않도록 주의한다.",
+ "join_group": "그롭 채팅 가입",
+ "sign_in_apple": "Apple로 등록",
+ "only_host": "그룹 소유자만 그룹 게시를 편집할 수 있습니다.",
+ "send_gift1": "당신은 상대방에게/s1개의 선물을 주고 받았다",
+ "receive_gift1": "상대방이 널/s 1개의 선물에 매겼어요.",
+ "not_in_group": "당신은 이미 이 그롭에 있지 않다.",
+ "creating_group": "만드는 중이니 잠시 기다려 주세요",
+ "article": "건",
+ "group_open_verification": "이 그롭은 이미 코드 검증을 시작했으며 요청을 통해서만 그롭에 들어갈 수 있습니다.",
+ "group_memeber": "그롭 멤버",
+ "invite_members": "초대/s1명의 친구를 그롭 채팅에 가입시키다",
+ "total_members": "총/s1명",
+ "qr_outtime": "코드 유한기 지났다.",
+ "no_goupr_info": "이 그룹 메시지 없음",
+ "you_invite": "당신이 /s1가 그롭 초청하여 그롭 채팅에 가입하게 했다.",
+ "invite_you": "당신은 /s1에 의해 그롭 채팅에 끌려들어갔어요.",
+ "invite_someone": " /s1가 /s2를 그롭 초청하여 그롭 채팅에 가입하게 했다.",
+ "you": "당신",
+ "delete_group": " /s1 를 /s2 그롭 채팅으로 나가 시켰다.",
+ "you_group_owner": "당신이 새 그롭 주인 되었다.",
+ "someone_group_owner": "/s1새 그롭 주인 되었다.",
+ "change_group_owner1": "그롭 이름은 /s1로 변경했다.",
+ "update_group_announce": "그롭 공지가 업데이트 되었습니다",
+ "you_qr": "당신은 스캔 코드를 통해 그롭 채팅에 가입한다.",
+ "others_qr": "/s1스캔 코드를 통해 그롭 채팅에 가입한다.",
+ "invite_confirm": "\"/s1\" 초대/s2명 친구 그롭 가입하고 싶다. \\$확인하세요.\\$ ",
+ "want_invite_confirm": " \"/s1\" 초데\"/s2\" 그롭 채팅 가입하고 싶다. ",
+ "join_group_confirm": "\"/s1\" 그롭 채팅 가입 확인 되었다.",
+ "you_invite_gourp": "당신은 /s1에 군담에 끌려들어갔다. ",
+ "someone_join_group": " \"/s1\" 그롭 채팅 가입 ",
+ "group_setting_tips1": "그룹 소유자가 이미\"그룹 채팅 요청 확인\",을(를) 열어서, 그룹 멤버가 그룹 소유자가 확인해야 친구를 그룹에 초대할 수 있습니다.",
+ "group_setting_tips2": "그롭 소유자는 이미 암묵적인 그롭에 들어가는 방식을 회복하였다.",
+ "members_max": "그롭 멤버 더 추가할 수 없다.",
+ "group_max": "그롭 수가 상한에 도달했습니다.",
+ "my_money_info": "내 계산서",
+ "my_left_money": "내 잔고",
+ "money_tips": "H화폐는 충전이나 환전으로 얻을 수 있고 현금인출이 불가능합니다.",
+ "get_money_detail": "소득명세",
+ "hibok_money": "Hibox소득",
+ "charge_h": "H화폐 교환",
+ "charge_tips": "인출 규칙",
+ "splash_tips1": "많은 편화 위치 改편리한 위치 변환",
+ "splash_tips2": "번역 로봇",
+ "splash_tips3": "친구 사귀기 앱",
+ "splash_tips_content1": "많은 편화 여신 改편리한 이성 변환",
+ "splash_tips_content2": "음성 인터랙티브",
+ "splash_tips_content3": "해결 언어 문제",
+ "splash_go": "즉시 채험",
+ "change_h_coin": "당신은 수입에 통했고/s1H화폐 교환됐다.",
+ "Representation_succes": "당신의 진술이 성공하여 시스템이 환불되었습니다.",
+ "system_give": "시스템 증정",
+ "exchange_fail": "당신의 인출 신청이 실패하여, 반송되었습니다.",
+ "hibok_exchange": "Hibox를 통해 환전/s1H화폐",
+ "bind_code_success": "성공적으로 초대 코드를 묶음",
+ "translate_money": "당신은/s1H화폐를 소모해서 인공번역을 합니다.",
+ "system_back": "시스템 취소 반송",
+ "you_give": "당신은 상대방에게 상을 주었다.",
+ "you_get": "상대방이 당신에게 상을 주었다.",
+ "enter_num_qian": "환전 금액(단위 K)",
+ "enter_num_qian1": "인출 금액(단위K)",
+ "daily_translate_voucher": "翻译券",
+ "msg_notice":"通知消息",
+ "select_notice_people":"选择提醒的人",
+ "search_phone":"查找手机号",
+ "not_have_user":"用户不存在",
+ "you_are_blaklisted":"对方已拉黑了你",
+ "confrim_recovery":"确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)",
+ "send_to": "發送到"
+}
\ No newline at end of file
diff --git a/i18n/vi-VN.json b/i18n/vi-VN.json
new file mode 100644
index 0000000..5d007ed
--- /dev/null
+++ b/i18n/vi-VN.json
@@ -0,0 +1,1164 @@
+{
+ "appName": "Hibok",
+ "login": "Đăng nhập",
+ "registration": "Đăng ký",
+ "other_login": "Cách đăng nhập khác",
+ "account": "Số tài khoản",
+ "enter_username": "Vui lòng nhập số tài khoản",
+ "password": "Mật khẩu",
+ "enter_password": "Nhập mật khẩu",
+ "forget_password": "Quên mật khẩu",
+ "reset_password": "Đặt lại mật khẩu",
+ "number_registration": "Đăng ký số điện thoại",
+ "enter_number": "Nhập số điện thoại",
+ "code": "Mã xác thực",
+ "enter_code": "Nhập mã xác thực",
+ "send_code": "Gửi mã xác thực",
+ "send_again": "Gửi lại",
+ "set_password": "Cài đặt mật khẩu",
+ "password_limit": "Mật khẩu không được dưới 6 ký tự",
+ "set_password2": "Xác lập mật khẩu",
+ "next_step": "Tiếp theo",
+ "agreed_agreement": "Click vào đây để xác nhận bạn đã đọc và đồng ý với \"điều khoản sử dụng\"",
+ "enter_password2": "Xin nhập mật khẩu đăng nhập",
+ "reset_now": "Cài đặt lại",
+ "choose_gender": "Chọn giới tính",
+ "who": "Bạn là",
+ "determine": "Xác định",
+ "cannot_modified": "không thể sủa đổi sau khi đã xác định giới tính",
+ "tip": "Nhắc nhở",
+ "choose_quit": "Bạn sắp hoàn tất đăng ký, bạn thực sự muốn bỏ cuộc?",
+ "confirm": "Xác nhận",
+ "use": "Sử dụng",
+ "cancel": "Hủy",
+ "close": "Đóng",
+ "delete": "Xóa",
+ "forget_it": "Bỏ qua",
+ "ok": "OK",
+ "choose_quit2": "Sau khi đăng ký bạn sẽ không thể sửa đổi giới tính của mình. Bạn có chắc không?",
+ "tip_content": "Nhắc nhở:bạn không thể tiến hành giao lưu với người dùng cùng giới",
+ "welcome": "Chào mừng bạn",
+ "enter_incode": "Vui lòng nhập mã mời",
+ "must_incode": "Hibok chỉ phục vụ khách hàng nam cung cấp mã mời",
+ "your_incode": "Mã mời của bạn",
+ "how_get": "Chưa có mã mời? Bạn có thể lấy mã mời theo những cách sau",
+ "method1": "Cách 1",
+ "free": "Đăng ký miễn phí",
+ "apply_now": "Đăng ký ngay",
+ "check_incode": "Nhận mã mời",
+ "so_get": "Bạn cần điền một số thông tin cá nhân, chúng tôi sẽ gửi mã mời cho bạn sau khi hoàn thành xét duyệt.",
+ "apply_incode": "Đăng ký mã mời",
+ "location": "Vị trí",
+ "cityname": "Thành phố bạn đang ở",
+ "message_channel": "Kênh thông tin",
+ "how_know": "Bạn biết đến APP này qua đâu?",
+ "wechat_number": "Wechat",
+ "your_wechat": "Tài khoản Wechat của bạn",
+ "facebook": "Facebook",
+ "your_facebook": "Facebook của bạn",
+ "submit_application": "Gửi yêu cầu",
+ "enter_city": "Vui lòng nhập tên Thành Phố bạn đang ở",
+ "so_know": "Bạn biết APP này qua kênh thông tin nào?",
+ "your_social": "Xin cung cấp mạng xã hội của bạn cho chúng tôi",
+ "receive_incode": "Chúng tôi sẽ xử lý sớm yêu cầu của bạn.Nếu xét duyệt được thông qua chúng tôi sẽ gửi mã mời vào trung tâm tin nhắn của bạn.",
+ "wait_incode": "Mã mời vẫn chưa được gửi đi, sau khi hoàn tất thao tác gửi đơn yêu cầu, vui lòng chờ trong giây lát!",
+ "successful_application1": "Xin mã mời thành công",
+ "application_failed1": "Xin mã mời thất bại",
+ "successful_copy": "Sao chép thành công",
+ "method2": "Cách 2",
+ "joinvip": "Trở thành VIP",
+ "join_now": "Tham gia ngay",
+ "joined": "Đã tham gia",
+ "join_odds": "Sau khi gia nhập bạn sẽ có thêm nhiều đặc quyền, bao gồm đăng ký không cần mã mời",
+ "not_joinvip": "Bạn chưa gia nhập thành viên",
+ "join_after": "Sau khi gia nhập bạn có thể đăng ký mà không cần mã mời",
+ "incode_passed": "Hoàn tất xác nhận mã mời",
+ "welcome_join": "Chào mừng bạn tham gia! Xin đừng tiết lộ số tài khoản của bạn cho người khác, khi phát hiện đăng nhập bất thường tài khoản sẽ tự động đóng băng.",
+ "member_centre": "Trung tâm thành viên",
+ "members_privilege": "Đặc quyền của thành viên",
+ "see_more": "Right 1",
+ "unlimited_see": "Tài khoản không giới hạn số lượng xem mỗi ngày",
+ "see_cheaper": "Right 2",
+ "free10": "Xem album và tài khoản miễn phí /s1 lần trong một ngày",
+ "see_longer": "Right 3",
+ "towto6": "Thời gian xem ảnh tự hủy sẽ chỉnh từ 2 giây thành /s1 giây.",
+ "see_better": "Right 4",
+ "free_release": "Cơ hội miễn phí phát sóng 3/ngày.",
+ "choose_price": "Chọn các gói",
+ "pay_method": "Phương thức thanh toán",
+ "pay_amount": "Số tiền thanh toán",
+ "not_enough": "Số dư ví không đủ",
+ "confirm_pay": "Xác nhận thanh toán",
+ "complete_material": "Hoàn tất thông tin",
+ "basic_information": "Thông tin cơ bản",
+ "upload_avatar": "Tải ảnh đại diện",
+ "choose": "Vui lòng chọn",
+ "fill_out": "Vui lòng điền vào",
+ "choose_multiple": "Có thể chọn nhiều mục cùng lúc",
+ "optional": "Tùy chọn",
+ "least": "Điền vào ít nhất /s1",
+ "introduce_yourself": "Giới thiệu bản thân",
+ "most": "Chọn tối đa /s1",
+ "nickname": "Biệt danh",
+ "only1_8": "Biệt danh không được quá 20 ký tự",
+ "Resident_city": "TP hiện tại",
+ "Please_select_a_resident_city": "Vui lòng chọn thành phố hiện tại",
+ "City1": "Cần Thơ",
+ "City2": "Đà Nẵng",
+ "City3": "Hải Phòng",
+ "City4": "Hà Nội",
+ "City5": "Hồ Chí Minh",
+ "City6": "An Giang",
+ "City7": "Bắc Giang",
+ "City8": "Bắc Cạn",
+ "City9": "Bạc Liêu",
+ "City10": "Bắc Ninh",
+ "City11": "Bà Rịa- Vũng Tàu",
+ "City12": "Bến Tre",
+ "City13": "Bình Định",
+ "City14": "Bình Dương",
+ "City15": "Bình Phước",
+ "City16": "Bình Thuận",
+ "City17": "Cà Mau",
+ "City18": "Cao Bằng",
+ "City19": "Đà Lạt",
+ "City20": "Đắc Nông",
+ "City21": "Điện Biên",
+ "City22": "Đồng Nai",
+ "City23": "Đồng Tháp",
+ "City24": "Gia Lai",
+ "City25": "Hà Giang",
+ "City26": "Hải Dương",
+ "City27": "Hà Nam",
+ "City28": "Hà Tĩnh",
+ "City29": "Hòa Bình",
+ "City30": "Hậu Giang",
+ "City31": "Hưng Yên",
+ "City32": "Khánh Hòa",
+ "City33": "Kiên Giang",
+ "City34": "Kon Tum",
+ "City35": "Lai Châu",
+ "City36": "Lâm Đồng",
+ "City37": "Lạng Sơn",
+ "City38": "Lào Cai",
+ "City39": "Long An",
+ "City40": "Nghệ An",
+ "City41": "Ninh Bình",
+ "City42": "Ninh Thuận",
+ "City43": "Phú Thọ",
+ "City44": "Phú Yên",
+ "City45": "Quảng Bình",
+ "City46": "Quảng Nam",
+ "City47": "Quảng Ngãi",
+ "City48": "Quảng Ninh",
+ "City49": "Quảng Trị",
+ "City50": "Sóc Trăng",
+ "City51": "Sơn La",
+ "City52": "Tây Ninh",
+ "City53": "Thái Bình",
+ "City54": "Thái Nguyên",
+ "City55": "Thanh Hóa",
+ "City56": "Thừa Thiên- Huế",
+ "City57": "Tiền Giang",
+ "City58": "Trà Vinh",
+ "City59": "Tuyên Quang",
+ "City60": "Vĩnh Long",
+ "City61": "Vĩnh Phúc",
+ "City62": "Yên Bái",
+ "City63": "Nam Định",
+ "birthday": "Ngày sinh",
+ "choose_birthday": "Chọn ngày sinh",
+ "year": "Năm",
+ "month": "Tháng",
+ "day": "Ngày",
+ "hour": "Giờ",
+ "minute": "Phút",
+ "second": "Giây",
+ "just": "Mới đây",
+ "minute_ago": "/s1 phút trước",
+ "hour_ago": "/s1 giờ trước",
+ "day_ago": "/s1 ngày trước",
+ "week_ago": "/s1 tuần trước",
+ "month_ago": "/s1 tháng trước",
+ "morning": "Sáng",
+ "noon": "Trưa",
+ "afternoon": "Chiều",
+ "night": "Tối",
+ "all_day": "Cả ngày",
+ "yesterday": "Hôm qua",
+ "two_yesterday": "Hôm trước",
+ "overnight": "Sáng đêm",
+ "one": "Cái",
+ "ten": "Mười",
+ "hundred": "Trăm",
+ "thousand": "Nghìn",
+ "ten_thousand": "Mười nghìn",
+ "aries": "Chòm sao Bạch Dương",
+ "taurus": "Chòm sao Kim Ngưu",
+ "gemini": "Chòm sao Song Tử",
+ "cancer": "Chòm sao Cự Giải",
+ "leo": "Chòm sao Sư Tử",
+ "virgo": "Chòm sao Xử Nữ",
+ "libra": "Chòm sao Thiên Bình",
+ "scorpio": "Chòm sao Bọ Cạp",
+ "sagittarius": "Chòm sao Nhân Mã",
+ "capricorn": "Chòm sao Ma Kết",
+ "aquarius": "Chòm sao Bảo Bình",
+ "pisces": "Chòm sao Song Ngư",
+ "monday": "Thứ hai",
+ "tuesday": "Thứ ba",
+ "wednesday": "Thứ tư",
+ "thursday": "Thứ năm",
+ "friday": "Thứ sáu",
+ "saturday": "Thứ bảy",
+ "sunday": "Chủ nhật",
+ "job": "chuyên nghiệp",
+ "choose_career": "Chọn một nghề nghiệp",
+ "career1": "Công nghệ thông tin",
+ "career2": "Internet",
+ "career3": "CNTT",
+ "career4": "Hoạt động viễn thông",
+ "career5": "Trò chơi trực tuyến",
+ "career6": "Bảo hiểm tài chính",
+ "career7": "Đầu tư",
+ "career8": "Quỹ đầu tư",
+ "career9": "Bảo hiểm",
+ "career10": "Ngân hàng",
+ "career11": "Thế chấp/ cầm cố",
+ "career12": "Dịch vụ kinh doanh",
+ "career13": "Tư vấn",
+ "career14": "Kinh doanh cá thể",
+ "career15": "Beauty salon",
+ "career16": "Du lịch",
+ "career17": "Khách sạn- nhà hàng",
+ "career18": "Giải trí",
+ "career19": "Thương mại",
+ "career20": "Xe hơi",
+ "career21": "Bất động sản",
+ "career22": "Quản lý tòa nhà",
+ "career23": "Trang trí nội thất",
+ "career24": "Thám tử",
+ "career25": "Công trình sản xuất",
+ "career26": "Kiến Trúc",
+ "career27": "Xây dựng dân dụng",
+ "career28": "Chế tạo cơ khí",
+ "career29": "Điện tử",
+ "career30": "Khoa học Y Sinh",
+ "career31": "Thực phẩm",
+ "career32": "Trang Phục",
+ "career33": "Năng lượng",
+ "career34": "Giao thông vận tải",
+ "career35": "Hàng không",
+ "career36": "Đường sắt",
+ "career37": "Vận tải hàng hải",
+ "career38": "Giao thông công cộng",
+ "career39": "Vận tải hàng hóa",
+ "career40": "Kênh truyền thông văn hóa",
+ "career41": "Nhà xuất bản",
+ "career42": "Thiết kế",
+ "career43": "Truyền bá văn hóa",
+ "career44": "Quảng cáo sáng tạo",
+ "career45": "Anime",
+ "career46": "Quảng bá triển lãm",
+ "career47": "Nhiếp ảnh",
+ "career48": "Thể thao giải trí",
+ "career49": "Phim ảnh",
+ "career50": "Thể thao thể thao",
+ "career51": "Âm nhạc",
+ "career52": "Người mẫu",
+ "career53": "Tiện ích công cộng",
+ "career54": "Y tế",
+ "career55": "Pháp luật",
+ "career56": "Giáo dục",
+ "career57": "Cơ quan chính phủ",
+ "career58": "Công ích",
+ "career59": "Học sinh/ Sinh viên",
+ "career60": "Không",
+ "program": "Chương trình",
+ "select_program": "Vui lòng chọn quốc tịch",
+ "healthy_exercise": "TDTT",
+ "night_party": "Tiệc đêm",
+ "gourmet_party": "Sành ăn",
+ "watch_movie": "Xem phim",
+ "play_games": "Chơi game",
+ "travel_together": "Du lịch",
+ "voice_chat": "Trò chuyện",
+ "other": "Khác",
+ "expect_lover": "Mẫu lý tưởng",
+ "choose_lover": "Vui lòng chọn mẫu người yêu lý tưởng của bạn",
+ "beautiful": "Gương mặt đẹp",
+ "rich": "Thổ hào",
+ "care_me": "Quan tâm và yêu thương tôi",
+ "look_feeling": "Cảm giác là trên hết",
+ "doesnt_matter": "Không quan trọng",
+ "least_account": "Vui lòng nhập ít nhất một tài khoản xã hội",
+ "hide_account1": "Ẩn tài khoản xã hội",
+ "more_information": "Những thông tin khác",
+ "height": "Chiều cao",
+ "weight": "Cân nặng",
+ "not_show": "Không hiển thị",
+ "self_introduction": "Giới thiệu",
+ "registration_success1": "Đăng ký thành công",
+ "exit": "Thoát?",
+ "exit_registration": "Bạn chưa hoàn thiện thông tin cá nhân. Lần sau đăng nhập trực tiếp bằng tài khoản đã đăng ký",
+ "cant_see": "Phai nam giới không thể xem thông tin của phái nam",
+ "cant_see2": "Phái nữ giới không thể xem thông tin của phái nữ!",
+ "see_one": "Bạn còn có thể xem /s1 quý cô ngày hôm nay",
+ "only_see": "Không phải thành viên chỉ có thể xem 15 quý cô mỗi ngày",
+ "continue_see": "Tiếp tục xem",
+ "user_frozen": "Tài khoản đã đóng băng",
+ "search_user": "Nhập biệt danh / nghề nghiệp để tìm kiếm",
+ "nearby": "Gần đây",
+ "member": "Thành viên",
+ "new_registration": "Bạn mới",
+ "authenticate": "Xác thực",
+ "first_online": "Trực tuyến",
+ "not_positioned": "Định vị là tắt, khoảng cách không thể được tính",
+ "unknown": "Vẫn chưa xác nhận",
+ "secrecy": "Bảo mật",
+ "collection": "Sưu tập",
+ "cancel_collection": "Hủy sưu tập",
+ "canceled_collection": "Đã hủy sưu tập",
+ "like": "Yêu thích",
+ "added_like": "Yêu thích",
+ "canceled_like": "Đã hủy yêu thích",
+ "blacklist": "Danh sách đen",
+ "blacklist_choose": "Bạn sẽ không thể thấy đối phương và hoạt động gần đây của họ, có chắc là bạn muốn thế không?",
+ "blacklisted": "Đã thêm vào danh sách đen",
+ "reject_message": "Bạn đã thêm đối Phương vào danh sách đen và từ chối nhận tin nhắn",
+ "remove_blacklist": "Xóa khỏi danh sách đen",
+ "blacklist_removed": "Đã xóa khỏi danh sách đen",
+ "receive_message": "Bạn đã xóa đối Phương khỏi danh sách đen và hủy chế độ từ chối tin nhắn",
+ "online": "Trực tuyến",
+ "paid_photo": "Album thu phí",
+ "application_view": "Xin",
+ "passed": "Đã duyệt",
+ "park": "Công viên",
+ "radio": "Radio",
+ "news": "Tin nhắn",
+ "me": "Tôi",
+ "more_operations": "Các thao tác khác",
+ "anonymous_report": "Báo cáo ẩn danh",
+ "certified_video": "Video",
+ "passed_video": "Em ấy đã được xác thực danh tính qua video",
+ "not_video": "Em ấy vẫn chưa xác thực danh tính",
+ "her_appointment": "Em ấy đang phát tin hẹn hò",
+ "pay_join": "Anh ta đã đóng phí để gia nhập",
+ "passed_review": "Anh ta đã thông qua xác nhận thân phận",
+ "invited_user": "Anh ấy đã gia nhập thông qua mã mời từ tài khoản VIP /s1",
+ "his_appointment": "Anh ấy đang phát tin hẹn hò",
+ "her_dynamics": "Hoạt động của em ấy",
+ "his_dynamics": "Hoạt động của anh ấy",
+ "low_key": "Em ấy rất khiêm nhường",
+ "low_key2": "Anh ấy rất khiêm nhường",
+ "her_photo": "Album ảnh của em ấy",
+ "his_photo": "Album ảnh của anh ấy",
+ "set_lock": "Anh ấy đã khóa album",
+ "set_lock2": "Em ấy đã khóa album",
+ "free_unlock": "Mở khóa album (/s1) miễn phí cho các thành viên",
+ "unlock_user": "Mở Khóa album của /s1",
+ "pay_unlock": "Mở khóa trả phí (/s1H coin)",
+ "become_member": "Miễn phí cho các thành viên",
+ "consumption_once": "Bạn muốn sử dụng 01 cơ hội để mở khóa album /s1",
+ "remaining_once": "(Hôm nay bạn vẫn còn /s1 cơ hội)",
+ "no_times": "Cơ hội miễn phí hôm nay của bạn đã hết, có muốn tặng tất cả thông tin mở khóa của /s2 cho /s1 không?",
+ "pay": "Thanh toán",
+ "view_user": "Anh ta đã thiết lập chế độ xem hạn chế, cần có sự đồng ý của anh ta để xem tiếp",
+ "view_user2": "Cô ta đã thiết lập chế độ xem hạn chế, cần có sự đồng ý của anh ta để xem tiếp",
+ "need_photo": "Muốn xem tiếp, bạn phải gửi một tấm ảnh của bạn cho đối phương. Hãy yên tâm, ảnh của bạn sẽ tự hủy sau 2 giây- tính từ lúc đối phương bấm nút xem.",
+ "choose_photo": "Chọn ảnh",
+ "send_application": "Yêu cầu đã được gửi đi, sau khi đối phương xác nhận bạn sẽ nhận được tin nhắn nhắc nhở",
+ "not_authenticate": "Bạn vẫn chưa tiến hành xác thực",
+ "after_authenticate": "Chỉ sau khi tính xác thực của bạn được chứng nhận, bạn mới có thể tương tác với người khác",
+ "authenticate_now": "Xác thực ngay",
+ "destroy_after": "Hủy sau khi xem",
+ "destroyed": "Đã hủy",
+ "red_photo1": "Ảnh lì xì sẽ được tiêu hủy sau khi xem",
+ "ask_me": "Hãy chat riêng để hỏi tôi",
+ "filled_in": "Đã nhập, bấm vào để xem",
+ "unlock_information": "Mở khóa tất cả dữ liệu",
+ "unlock_choose": "Sử dụng 1 mở khóa miễn phí",
+ "your_evaluation": "Nhận xét thực tế của bạn",
+ "her_evaluation": "Nhận xét thực tế của em ấy",
+ "his_evaluation": "Nhận xét thực tế của anh ấy",
+ "evaluate": "Nhận xét",
+ "friendly": "Thân thiện",
+ "interesting": "Thú vị",
+ "readily": "Thẳng thắn ",
+ "patient": "Kiên nhẫn",
+ "indifferent": "Thờ ơ",
+ "bad_temper": "Nóng nảy",
+ "courtesy": "Lịch sự",
+ "generous": "Hào phóng",
+ "lie": "Bốc đồng",
+ "unfriendly": "Unfriendly",
+ "anonymous_evaluation": "Đánh giá ẩn danh",
+ "cant_evaluate": "Bạn chưa hẹn hò với em ấy,không thể đánh giá",
+ "cant_evaluate2": "Anh ấy chưa hẹn hò với bạn không thể đánh giá",
+ "bad_evaluate": "Vui lòng cung cấp ảnh chụp màn hình liên quan để chúng tôi theo dõi và xác thực",
+ "submit": "Gửi",
+ "evaluation_success": "Đánh giá thành công",
+ "private_chat": "Trò chuyện",
+ "close_reminder": "Tắt chế độ tin nhắn nhắc nhở",
+ "closed_reminder": "Chế độ tin nhắn nhắc nhở đã tắt thành công",
+ "open_reminder": "Bật tin nhắn nhắc nhở",
+ "opened_reminder": "Chế độ tin nhắn nhắc nhở đã bật thành công",
+ "her_account": "Tài khoản mạng xà hội của em ấy",
+ "his_account": "Tài khoản mạng xà hội của anh ấy",
+ "copy": "Sao chép",
+ "send_account": "Gửi tài khoản mạng xã hội của tôi cho em ấy",
+ "enter_account": "Nhập số tài khoản mạng xã hội của bạn",
+ "for_example": "Tài khoản Wechat abc",
+ "sent_she": "Gửi cho em ấy",
+ "chat": "Nối mic",
+ "cantt_voice": "Đối phương đã tắt chức năng trò chuyện trực tuyến",
+ "authentication_voice": "Sau khi tính xác thực của bạn được chứng nhận, bạn mới có thể trò chuyện trực tuyến",
+ "requesting_voice": "Đang yêu cầu kết nối trò chuyện trực tuyến",
+ "waitting_answer": "Đang đợi đối phương kết nối",
+ "answer": "Kết nối",
+ "hang_up": "Ngắt kết nối",
+ "chatting": "Đang trò chuyện trực tuyên",
+ "handsfree": "Chế độ loa ngoài",
+ "giving_gift": "Thưởng",
+ "give_success": "Thưởng thành công",
+ "others_gift": "Đối phương đã tặng quà",
+ "given_gift": "Bạn đã thưởng cho đối phương một món quà trị giá /s1",
+ "earned_gift": "Bạn đã được tặng /s1H coin",
+ "available_balance": "Số dư khả dụng /s1",
+ "recharge": "Nạp tiền",
+ "give": "Quà tặng",
+ "balance_insufficien": "Xin lỗi số dư của bạn không đủ",
+ "first_recharge": "Vui lòng nạp tiền trước khi tặng quà",
+ "give_coin": "Thưởng /s1H coin cho lần trò chuyện trực tuyến này",
+ "get_coin": "Lần trò chuyện trực tuyến này, bạn được thưởng /s1H coin",
+ "give_get": "Lần trò chuyện trực tuyến này bạn thưởng đối phương /s1H coin và được thưởng /s2H coin",
+ "chat_over": "Thời lượng cuộc trò chuyện trực tuyến này là /s1",
+ "message_center": "Trung tâm tin nhắn",
+ "can_chat": "Bạn có thể mời đối phương trò chuyện riêng thông qua trang thông tin người dùng",
+ "text_chat": "Trò chuyện",
+ "system_information": "Tin nhắn hệ thông",
+ "system_notification": "Thông báo hệ thống",
+ "report_failure": "Báo cáo người dùng /s1 của bạn không xác thực. Vui lòng cung cấp bằng chứng xác thực hơn mới tiếp tục báo cáo, xin cảm ơn!",
+ "report_success": "Báo cáo người dùng /s1 của bạn là chính xác. Hệ thống đang tiến hành xử lý người dùng này!",
+ "successful_application": "Yêu cầu cấp mã mời của bạn đã được duyệt! Mã mời 【/s1】(click vào để sao chép)",
+ "successful_application2": "Yêu cầu cấp mã mời của bạn đã được duyệt! Cám ơn bạn đã giới thiệu bạn bè cho chúng tôi! Mã mời 【/s1】(click vào để sao chép)",
+ "application_failed": "Yêu cầu cấp mã mời thất bại! Rất tiếc, yêu cầu của bạn không được thông qua, xin cung cấp thông tin chính xác để mã mời được xét duyệt.",
+ "important_notice": "[Thông báo quan trọng]",
+ "authentication_failed": "Thông tin xác thực của bạn không phù hợp, yêu cầu chỉnh sửa và gửi lại cho chúng tôi!",
+ "request1": "1. Hãy quay video xác thực theo yêu cầu",
+ "request2": "2. Vui lòng tải ảnh có thể thấy rõ đặc điểm nhận dạng của bạn lên album",
+ "successful_authentication": "Xin chúc mừng! Yêu cầu xác thực của bạn đã được duyệt",
+ "re_upload": "Ảnh mới tải lên của bạn chưa được duyệt. Vui lòng tải lại theo yêu cầu",
+ "upload_success": "Xin chúc mừng, ảnh mới tải lên của bạn đã được duyệt",
+ "caveat": "Đăng ký hẹn hò của bạn đã bị xóa vì vi phạm. Nếu vi phạm nhiều lần hoặc trường hợp nghiêm trọng hệ thống sẽ tiến hành hạn chế thậm chí đóng tài khoản của bạn. Xin nhớ và tuân thủ! Cảm ơn bạn đã phối hợp!",
+ "caveat2": "Nhận xét của bạn đã bị xóa do vi phạm, Nếu vi phạm nhiều lần hoặc trường hợp nghiêm trọng hệ thống sẽ tiến hành hạn chế thậm chí đóng tài khoản của bạn. Xin nhớ và tuân thủ! Cảm ơn bạn đã phối hợp!",
+ "radio_message": "Tin nhắn radio",
+ "no_message": "Tạm thời không có tin nhắn như thế",
+ "dating_news": "/s1 đã gửi một tin nhắn hẹn hò trên /s2, nhấp vào đây để xem",
+ "go_see": "Vào xem",
+ "thumbs_up": "/s1 thích hoạt động của bạn",
+ "thumbs_up2": "/s1 thích chương trình hẹn hò của bạn",
+ "comment1": "/s1 đã nhận xét về hoạt động của bạn",
+ "comment2": "/s1 nhận xét về chương trình hẹn hò của bạn",
+ "replied_comment": "/s1 đã trả lời nhận xét của bạn",
+ "signed_up": "/s1 đã đăng ký tham gia chương trình của bạn",
+ "favorite_user": "Người dùng bạn yêu thích /s1 đã đăng một tin hẹn hò, nhấp vào đây để xem",
+ "favorite_user2": "Người dùng bạn yêu thích /s1 đã cập nhật hoạt động mới nhất, nhấp vào đây để xem",
+ "wallet_reminder": "Hãy chú ý ví của bạn",
+ "paid_you": "/s1 đã thanh toán (/s2H coin) để xem ảnh phong bì của bạn",
+ "paid_you2": "/s1 đã thanh toăn (/s2H coin) để xem album của bạn",
+ "paid_you3": "/s1 đã trả tiền để mở khóa tất cả thông tin của bạn",
+ "view_application": "Kiểm tra yêu cầu của bạn",
+ "view_application2": "/s1 muốn xem trang chủ của bạn",
+ "aging": "Cho phép (thời hạn 15 ngày)",
+ "refuse": "Từ chối",
+ "passed_request": "Yêu cầu đã được thông qua",
+ "l15_days": "Yêu cầu của /s1 đã được bạn cho phép, thời gian xem là 15 ngày",
+ "evaluation_notice": "Thông báo nhận xét",
+ "rate_her": "Bạn đã hẹn ò cùng /s1? Hãy nhanh chóng nhận xét em ấy nào!",
+ "received_evaluation": "Người đánh giá (ẩn danh) bạn là một phái nữ đã liên lạc với bạn: /s1",
+ "received_evaluation2": "Người đánh giá (ẩn danh) bạn là một đàn ông đã liên lạc với bạn: /s1",
+ "application_appeal": "Nếu đánh giá không đúng sự thật, bạn có thể báo cáo, chúng tôi sẽ tiến hành xác thực!",
+ "appeal": "Tôi muốn báo cáo",
+ "appealed": "Đã báo cáo",
+ "waiting_results": "Chúng tôi sẽ nhanh chóng xác tìm hiểu, kết quả sẽ được gửi đến hệ thông tin nhắn của bạn.",
+ "successful_appeal": "/s1 báo cáo thành công, đánh giá sẽ bị xóa đi",
+ "social_account": "Tài khoản mạng xà hội",
+ "get_account": "/s1 đã gửi cho bạn tài khoản mạng xã hội của anh ấy",
+ "edit_information": "Chỉnh sử thông tin",
+ "save": "Lưu lại",
+ "passed_verification1": "Bạn đã thông qua xác minh bảo mật danh tính",
+ "by_code": "Bạn tham gia thông qua mã mời của người dùng VIP /s1",
+ "by_paying": "Bạn đã thông qua bằng cách đóng phí gia nhập",
+ "passed_verification": "Tính xác thực của bạn đã được chứng nhận thông qua video",
+ "not_certified": "Danh tính của bạn vẫn chưa được xác thực",
+ "verificating": "Chúng tôi đang xác nhận tính xác thực của bạn",
+ "real_girl": "Phái nữ đã được xác thực sẽ được chào đón hơn",
+ "certificating": "Đang xác thực",
+ "re_upload2": "Vui lòng tải lại video",
+ "update_certification": "Cập nhật xác thực",
+ "enjoy_privileges": "Nâng cấp hội viên để có thêm đặc quyền",
+ "expires": "/s1 hết hạn",
+ "wallet": "Ví",
+ "setting": "Quyền riêng tư",
+ "my_dynamic": "Hoạt động của tôi",
+ "my_album": "Album của tôi",
+ "first_photo": "Tải hình ảnh đầu tiên của tôi",
+ "no_photo": "Có hình ảnh bạn có thể thu hút hơn đối với phái nam",
+ "upload_photos": "Tải ảnh",
+ "upload_video": "Tải video",
+ "upload": "Tải ảnh",
+ "set_photo": "Cài đặt ảnh phong bì",
+ "photo_order": "Nhấn giữ và kéo ảnh để thay đổi vị trí của chúng",
+ "my_evaluation": "Nhận xét của tôi",
+ "my_show": "Chương trình của tôi",
+ "i_like": "Sở thích của tôi",
+ "your_favorite": "Cô gái bạn yêu thích sẽ hiển thị ở đây",
+ "your_favorite2": "Chàng trai bạn yêu thích sẽ hiển thị ở đây",
+ "no_data": "Không có dữ liệu",
+ "historical_visitor": "Danh sách đã ghé thăm bạn",
+ "visit_you": "Có /s1 người đã ghé thăm bạn",
+ "visit_photo": "Có /s1 người đã hủy ảnh của bạn",
+ "recovery_photo": "Nhấp để phục hồi",
+ "setting2": "Cài đặt",
+ "apply_code": "Đăng ký mã mời cho bạn bè",
+ "issue_choose": "Mã mời sẽ được cấp miễn phí, chúng tôi sẽ cấp mã mời thông qua đánh giá lịch sử chi tiêu của bạn. Để duy trì bầu không khí trong công viên, vui lòng chỉ gửi mã mời cho người mà bạn tin cậy.",
+ "successfully_submit": "Yêu cầu của bạn đang được xử lý",
+ "share_app": "Chia sẻ ứng dụng với bạn bè",
+ "need_help": "Có vấn đề và cần giúp đỡ",
+ "need_help2": "Liên hệ nhân viên CSKH",
+ "need_help3": "Xin chào bạn, để nâng cao chất lượng phục vụ, nếu dưới đây có thắc mắc của bạn, vui lòng trả lời bằng cách nhập số thứ tự.",
+ "question1": "[1]Tại sao tài khoản bị đóng băng?",
+ "answer1": "\"xuất hiện một trong những tình trạng sau, tài khoản sẽ bị khóa: ① Lừa đảo② Môi giới③Quảng cáo quấy nhiễu④Bị nhiều người dùng báo cáo⑤Đã có tài khoản khác⑥Nhiều lần đăng tin radio sai phạm, xem thường cảnh cáo.⑦Người dùng tự yêu cầu xóa tài khoản.\"",
+ "question2": "[2]Khi nào mới có thể rút số dư trong ví?",
+ "answer2": "Tất cả số tiền nhận được sẽ được chuyển trực tiếp vào ví, rút tiền phải mất ba ngày (bắt đầu từ thời điểm nhận tiền). Số tiền nhận được sau ba ngày sẽ chuyển vào ví. Bạn được phép rút khi số dư > = 10 nhân dân tệ ",
+ "question3": "[3]Sao không hiển thị lì xì tôi đã gửi.",
+ "answer3": "Có thể do lỗi mạng. Hãy yên tâm, trường hợp này đối phương không thể nhận được phong bì của bạn. Phong bì sẽ tự động trả về trong vòng 24 giờ.",
+ "question4": "[4]Rút tiền về tài khoản ngân hàng/ ví tiền mặt phải mất mấy ngày?",
+ "answer4": "Trong vòng 2 ngày tiền sẽ vào tài khoản sau khi bạn yêu cầu rút tiền mặt. Vui lòng nhập đúng số tài khoản ngân hàng/ ví tiền mặt khi rút tiền mặt.",
+ "question5": "[5]Làm thế nào để báo cáo tài khoản khác / nội dung phát tán trên radio?",
+ "answer5": "Vào trang chi tiết cùa đối phương hoặc chọn nội dung tin tức mà bạn muốn báo cáo, nhấp vào góc phải phía trên, chọn \"báo cáo ẩn danh\", sau đó điền đầy đủ các thông tin liên quan.",
+ "question6": "[6]Làm sao để trở thành tài khoản được xác thực?",
+ "answer6": "\"Xác nhận tài khoản cần thỏa mãn các yêu cầu sau: ①Thông tin cá nhân có tài khoản mạng xã hội hợp lệ.②Có ít nhất một tấm ảnh rõ ràng trong album.③Kiểm tra mã xác thực trong trang xác thực, ghi mã xác thực + biệt danh của bạn lên một mảnh giấy.④Cầm mảnh giấy này trên tay, quay một đoạn video có thể nhìn thấy khuôn mặt chính diện của bạn và nội dung trên giấy. Tải video lên để xác thực.\"",
+ "question7": "[7]Video xác thực có thể không công khai không ?",
+ "answer7": "Bạn có thể cài đặt công khai hoặc không công khai:Trung tâm người dùng- Nhấp vào góc dưới bên trái video xác thực, chọn \"Video xác thực hiển thị trong trang chi tiết của tôi\"",
+ "question8": "[8]Làm thế nào để tránh bị hủy xác thực?",
+ "answer8": "Album ít nhất có một tấm ảnh của bản thân được gắn thẻ tag.",
+ "question9": "[9]Tại sao tin radio của bạn bị xóa?",
+ "answer9": "Radio không được phát tán tin tức, hình ảnh và các từ ngữ nhạy cảm, bao gồm cả nghĩa bóng lẫn nghĩa đen. Không được đăng thông tin cá nhân (bao gồm ảnh đại diện, biệt danh và phuơng pháp liên hệ). Vi phạm các quy định này kênh radio của bạn sẽ bị xóa.",
+ "question10": "[10] Làm thế nào để hủy tài khoản?",
+ "answer10": "Nếu hủy tài khoản bạn sẽ không thể đăng nhập vào ứng dụng. Sau này muốn tiếp tục sử dụng bạn phải đăng ký lại. Vui lòng xem xét cẩn thận, nếu bạn vẫn quyết định hủy tài khoản của mình vui lòng trả lời theo số thứ tự【12】 liên hệ hotline hỗ trợ người dùng.",
+ "question11": "[11]Quên mật khẩu, làm thế nào?",
+ "answer11": "Đối với người dùng đăng ký tài khoản bằng số điện thoại di động hoặc đã liên kết số điện thoại di động, có thể vào trang đăng nhập, chọn \"quên mật khẩu\" để cài đặt lại mật khẩu.,Đối với người dùng chưa liên kết số điện thoại di động, xin vui lòng liên kêt số điện thoại di động, sau đó cài đặt lại mật khẩu mới.",
+ "question12": "[12]Các vấn đề khác/ chuyển đến hotline nhân viên hỗ trợ khách hàng.",
+ "answer12": "Chào bạn, chúng tôi có thể giúp gì cho bạn? Xin nêu vấn đề của bạn (thời gian làm việc của bộ phận chăm sóc khách hàng 08:00 hôm nay- 02:00AM hôm sau, do số người cần tư vấn khá đông, bạn vui lòng đợi trong giây lát.)",
+ "certification_center": "Trung tâm xác thực",
+ "for_example2": "Mẫu video xác thực",
+ "certification_conditions": "Điều kiện xác thực",
+ "conditions1": "1. Hình tượng cá nhân tốt.",
+ "conditions2": "2. Có ít nhất một tấm ảnh cá nhân trong album.",
+ "verification_method": "Phương thức xác thực",
+ "method3": "1. Lấy một tờ giấy để viết tên hiệu của bạn và mã xác minh sau:",
+ "method4": "2. Giữ mảnh giấy này trong tay và quay một đoạn video thấy rõ chính diện khuôn mặt bạn (3 - 15 giây)",
+ "upload_video2": "Tải video xác thực",
+ "after_authentication": "Sau khi xác thực thành công ảnh đại diện của bạn sẽ hiển thị logo Real.",
+ "show_video": "Video xác thực hiển thị trong trang chi tiết của tôi.",
+ "uploaded_video": "Video xác thực đã được tải lên.",
+ "under_review": "Đang xét duyệt (trong vòng 24 giờ)",
+ "certification_status": "Trạng thái xác thực",
+ "certified": "Bạn đã thông qua xác thực",
+ "wait_resubmitted": "Đang chờ để xác thực lại",
+ "reason_failure": "Video chứng nhận của bạn không đáp ứng các yêu cầu do:",
+ "claim": "Vui lòng quay video xác thực theo yêu cầu.",
+ "claim2": "Vui lòng tải một tấm ảnh có thể nhìn thấy rõ khuôn mặt của bạn lên album.",
+ "re_upload_video": "Tải lại video xác thực.",
+ "update_video": "Cập nhật video xác thực.",
+ "mask_coin": "H coin",
+ "get_way": "Bạn có thể nạp h-coin trực tuyển hoặc chat online.",
+ "coin_use": "H-coin dùng trong chat online hoặc tặng cho người khác.",
+ "coin_total": "Tổng số H-coin",
+ "can_redeemed": "Số coin có thể rút ",
+ "who_account": "Tài khoản /s1",
+ "bind_account": "Liên kết tài khoản /s1",
+ "your_account": "Tài khoản /s1 của bạn",
+ "get_coin2": "Bạn đã nhận được /s1H coin bằn cách nạp tiền vào tài khoản.",
+ "viewed_your": "/s1 đã xem tài khoản mạng xã hội của bạn",
+ "give_gift": "1 coin/s2",
+ "add_coin": "+/s1H coin",
+ "give_one": "Bạn đã tặng 1 cái /s1 cho /s2",
+ "less_coin": "-/s1H coin ",
+ "exchange_cash": "Rút tiền mặt",
+ "withdrawal_application": "Yêu cầu rút tiền mặt",
+ "redeem_choose": "Bạn có /s1H coin có thể đổi thành /s2, sau khi đổi bạn còn /s3H coin, bạn có muốn đổi không?",
+ "application_submitted": "Yêu cầu rút tiền của bạn đã được gửi đi.",
+ "working_days": "Chúng tôi sẽ xử lý trong vòn 02 ngày làm việc, có bất kỳ thắc mắc gì bạn có thể liên hệ hotline hỗ trợ người dùng.",
+ "cash": "Tiền mặt",
+ "handling_fee": "Khi bạn nhận được phong bi trong trang trò chuyện, số dư sẽ được chuyển vào đây. Trong vòng 3 ngày không ai báo cáo về số dư này, bạn có thể quy đổi thành tiền mặt, phí thủ tục là 5%.",
+ "total_account": "Tổng số dư",
+ "cannot_redeemed": "Số dư không đủ không thể quy đổi",
+ "successful_redemption": "Quy đổi thành công",
+ "redeem_choose2": "Tổng số dư của bạn là /s1, lần này bạn có thể đổi /s2, bạn muốn đổi chứ?",
+ "personal_details": "Thông tin cá nhân",
+ "public": "Công khai (được khuyến nghị)",
+ "paid_album": "Trả phí để xem album",
+ "must_pay": "Người dùng khác phải trả phí để xem album của bạn. Chi phí xem album do bạn đặt ra, tuy nhiên có thể làm thế có thể khiến cho số lượng người xem của bạn bị giảm đi.",
+ "set_amount1": "Cài đặt kiểm tra số dư",
+ "first_upload": "Vui lòng tải ảnh lên trước khi thiết lập album trả phí",
+ "need_permission": "Phải được tôi cho phép mới được xem",
+ "permission_choose": "Người khác phải gửi ảnh cho tôi xác nhận danh tính mới được phép xem trang chủ của bạn, bạn muốn như thế?",
+ "hide_me": "Giấu tôi khỏi danh sách những người gần đó",
+ "hide_distance": "Ẩn khoảng cách giữa tôi với người khác",
+ "hide_account": "Ẩn tài khoản của tôi với người khác",
+ "chat_setting": "Hạn chế trò chuyện trực tuyến",
+ "chat_me": "Cho phép người dùng \"được phép trò chuyện\" trò chuyện trực tuyến với tôi",
+ "successfully_saved": "Đã lưu thành công",
+ "on_dynamic": "Bạn chưa đăng bất kỳ cập nhật nào",
+ "release_dynamics": "Đăng hoạt động gần đây",
+ "dynamic_details": "Chi tiết hoạt động",
+ "release": "Đăng",
+ "i_posted": "Hoạt động của tôi",
+ "delete_dynamic": "Xóa hoạt động",
+ "delete_choose": "Bạn có chắc chắn muốn xóa hoạt động này?",
+ "posted_on": "Đăng trên /s1",
+ "thumbs_up3": "Like",
+ "already_praised": "Đã like",
+ "comment": "Nhận xét",
+ "send": "Gửi",
+ "comment_closed": "Bình luận đã đóng",
+ "your_comment": "Chỉ người đăng có thể nhìn thấy nhận xét của bạn",
+ "everyone_comment": "Mọi người đều có thể thấy nhận xét của bạn",
+ "prohibit_comments": "Cấm nhận xét",
+ "comments_disabled": "bật chế độ cấm nhận xét",
+ "open_comments": "Hủy chế độ cấm nhận xét",
+ "already_open": "Đã hủy chế độ cấm nhận xét",
+ "reply": "Trả lời",
+ "report": "Báo cáo",
+ "report_choose": "Bạn có chắc chắn muốn báo cáo nhận xét này?",
+ "successful_report": "Báo cáo thành công, chúng tôi sẽ giải quyết nó trong thời gian sớm nhất!",
+ "successfully_deleted": "Đã xóa thành công",
+ "please_civilization": "Những người ăn nói văn hóa thường được chào đón hơn. Xin đừng phát ngôn thô tục, đăng tải nội dung khiêu dâm hoặc tiết lộ sự riêng tư của người khác!",
+ "same_sex": "Không cho người cùng giới tính thấy tôi",
+ "member_free": "Thành viên miễn phí, không phải thành viên cần /s1H coin",
+ "certified_free": "Phái nữ đã xác thực được miễn phí 3 lần, sau đó cần phải trả /s1H coin",
+ "enter_something": "Vui lòng nhập văn bản hoặc chọn hình ảnh",
+ "raid_release": "Đăng tải thu phí (/s1H coin)",
+ "become_member2": "Miễn phí cho các thành viên",
+ "now_certification": "Lập tức xác thực và miễn phí đăng bài",
+ "successfully_released": "Đăng bài thành công",
+ "no_program": "Bạn vẫn chưa đăng chương trình nào",
+ "program_details": "Chi tiết chương trình",
+ "program_theme": "Chủ đề chương trình",
+ "click_select": "Nhấn vào đây để chọn",
+ "city": "Thành phố",
+ "select_city": "Chọn thành phố",
+ "time": "Thời gian",
+ "select_date": "Chọn ngày",
+ "select_time": "Chọn thời gian",
+ "unlimited_time": "Không giới hạn thời gian",
+ "supplementary_explanation": "Ghi chú",
+ "image": "Kèm hình",
+ "delete_program": "Xóa chương trình",
+ "delete_choose2": "Bạn có chắc chắn muốn xóa chương trình này?",
+ "please_choose": "Vui lòng chọn chủ đề cho chương trình",
+ "please_choose2": "Vui lòng chọn đối tượng mong muốn",
+ "please_choose3": "Vui lòng chọn một thành phố",
+ "please_choose4": "Vui lòng chọn một ngày",
+ "please_choose5": "Vui lòng chọn thời gian",
+ "release_program": "Đăng chương trình",
+ "sign_up": "Đăng ký",
+ "end_registration": "Kết thúc đăng ký",
+ "end_choose": "Bạn có chắc là muốn kết thúc hẹn hò?",
+ "contact_her": "Liên lạc với em ấy",
+ "talk_him": "Chat riêng với anh ấy",
+ "report_choose2": "Có chắc là bạn muốn báo cáo thông tin đăng ký này?",
+ "release_time": "Thời gian phát hành",
+ "activity_time": "Thời gian hoạt động",
+ "any_sex": "Không giới hạn giới tính",
+ "look_women": "Chỉ nhìn phái nữ",
+ "look_men": "Chỉ nhìn phái nam",
+ "unlimited_area": "Không giới hạn KV",
+ "program_deleted": "Chương trình đã bị xóa",
+ "cant_comment": "Không phải thành viên không thể nhận xét",
+ "sign_up2": "Đăng ký",
+ "need_photo2": "Đăng ký cần phải gửi ảnh chính diện khuôn mặt của bạn (chỉ đối phương có thể nhìn thấy)",
+ "registration_success": "Đăng ký thành công, nếu đối phương cảm thấy thích hợp sẽ liên hệ bạn",
+ "has_ended": "Đã kết thúc",
+ "men_cant": "Phái nam không thể đăng ký chương trình của phái nam",
+ "ms_cant": "Phái nữ không thể đăng ký chương trình của phái nữ",
+ "men_cant2": "Phái nam không thể nhận xét chương trình của phái nam",
+ "ms_cant2": "Phái nữ không thể nhận xét chương trình của phái nữ",
+ "message_push": "Đẩy tin nhắn, thay đổi mật khẩu",
+ "phone_number": "Số điện thoại di động",
+ "bind_phone1": "Số điện thoại liên kết",
+ "more_safer": "Liên kết số điện thoại sẽ giúp cho tài khoản của bạn an toàn hơn",
+ "modify_choose": "Bạn muốn thay đổi số điện thoại liên kết?",
+ "change_password": "Thay đổi mật khẩu",
+ "first_bind": "Người dùng cần liên kết số điện thoại di động trước khi cài đặt mật khẩu đăng nhập",
+ "old_password": "Nhập mật khẩu gốc",
+ "current_password": "Nhập mật khẩu đăng nhập hiện tại",
+ "new_password": "Nhập mật khẩu mới",
+ "set_new": "Mật khẩu mới không dưới 06 ký tự",
+ "clear_cache": "Xóa bộ nhớ cache hình ảnh",
+ "cleared_successfully": "Đã xóa thành công",
+ "user_agreement1": "Thỏa thuận người dùng",
+ "sign_out": "Thoát ra",
+ "out_choose": "Bạn có chắc chắn muốn đăng xuất?",
+ "push_settings": "Cài đặt lượt đẩy",
+ "permission_denied": "Quyền hạn đã bị từ chối",
+ "push_setting2": "Cài đặt đẩy tin nhắn",
+ "private_chat2": "Tin nhắn trờ chuyện riêng",
+ "new_date": "Có hẹn hò mới",
+ "passed_request2": "Có phái nữ yêu cầu xem dữ liệu",
+ "men_view": "Có phái nam yêu cầu xem dữ liệu",
+ "men_view2": "Có anh chàng nào đấy xem tài khoản mạng xã hội của tôi",
+ "men_view3": "Có phái nam yêu cầu xem avata",
+ "men_view4": "Có anh chàng đã xem dữ liệu và gửi cho tôi tài khoản xã hội",
+ "applied_successfully": "Yêu cầu cấp mã mời đã thành công",
+ "after_open": "Giới thiệu tin tức liên quan sau khi bật",
+ "if_something": "Nếu bạn đã thanh toán cho em ấy/ anh ấy trong 3 ngày gần đây, sau khi chúng tôi xác thực báo cáo, hệ thống sẽ tự động hoàn trả chi phí cho bạn.",
+ "advertise": "Đăng quảng cáo",
+ "false_photo": "Ảnh không đúng thực tế",
+ "erotic_vulgarity": "Khiêu dâm thô tục",
+ "harassment": "Quấy rối",
+ "she_liar": "Em ấy là một kẻ lừa đảo",
+ "he_liar": "Anh ấy là một kẻ lừa đảo",
+ "provide_screenshots": "Xin cung cấp ảnh chụp màn hình liên quan để chúng tôi theo dõi xác thực",
+ "describe_details": "Vui lòng mô tả chi tiết (trong vòng 100 từ)",
+ "report_reason": "Vui lòng chọn lý do báo cáo",
+ "report_success2": "Báo cáo thành công",
+ "successfully_modified": "Đã sửa đổi thành công",
+ "boy": "Nam",
+ "girl": "Nữ",
+ "already_applied": "Đã gửi yêu cầu",
+ "view_registration": "Xem đăng ký",
+ "expand": "Mở rộng",
+ "collapse": "Thu gọn",
+ "application_notice": "Yêu cầu thông báo",
+ "agrees_application": "Có tài khoản khác đồng ý với yêu cầu của bạn",
+ "red_photo": "Ảnh phong bì",
+ "dont": "Vui lòng không đăng tải hình ảnh/ video khỏa thân thô tục. Nếu vi phạm chúng tôi sẽ đóng tài khoản",
+ "current_version": "Phiên bản hiện tại",
+ "bank_card": "Liên kết thẻ ngân hàng",
+ "choose_bank": "Vui lòng chọn một ngân hàng",
+ "bank_number": "Vui lòng nhập số thẻ ngân hàng",
+ "id_number": "Vui lòng nhập số căn cước/ CMND",
+ "name": "Tên họ",
+ "bank_number2": "Số thẻ NH",
+ "license_number": "Số thẻ CMND",
+ "bind_phone": "Số ĐT liên kết",
+ "his_homepage": "Trang chủ của anh ấy",
+ "her_homepage": "Trang chủ của em ấy",
+ "wechat_pay": "Thanh toán WeChat",
+ "facebook_pay": "Thanh toán Facebook",
+ "google_pay": "Thanh toán bằng google",
+ "payment_successful": "Thanh toán thành công",
+ "set_amount": "Cài đặt sô tiền rút",
+ "enter_amount": "Vui lòng nhập số lượng xu H",
+ "can_withdraw": "Có thể rút tiền",
+ "language_set": "Cài đặt ngôn ngữ",
+ "user_agreement": "Thỏa thuận người dùng",
+ "renewal_fee": "Tiếp tục trả phí",
+ "open_immediately": "Mở ngay lập tức",
+ "total": "Tổng cộng",
+ "half_month": "Nửa tháng",
+ "month2": "/s1 tháng",
+ "cancel_shield": "Bỏ chặn",
+ "blacklist2": "Danh sách đen",
+ "longTime": "(Thành viên có thể kéo dài thời gian đến 06 giây)",
+ "longClick": "Nhấn và giữ màn hình để xem",
+ "stop_program": "Vui lòng kết thúc chương trình vẫn còn hiệu lực.",
+ "not_love": "Đàn ông không thể sưu tập đàn ông",
+ "not_love2": "Phái nữ không thể sưu tập phái nữ!",
+ "women_free": "Hotgirl có thể miễn phí đăng tin",
+ "not_up_man": "Anh ấy vẫn chưa tải hình ảnh",
+ "not_up_women": "Chị ấy vẫn chưa tải hình ảnh",
+ "not_illage": "Cảm ơn bạn không thực hiện những hành vi phạm pháp trên APP, nếu bị báo và phát hiện sẽ bị xử lý bằng cách khóa tài khoản",
+ "alreay_join": "Tôi đã ghi danh",
+ "sure_delete": "Bạn có chắc là muốn xóa tấm ảnh này",
+ "white_now": "Lập tức điền vào",
+ "personal": "Bạn vẫn chưa nhập vào mục \"giới thiệu bản thân\", lời giới thiệu thu hút người khác có sức ảnh hưởng rất lớn",
+ "success": "Thành công",
+ "fail": "Thất bại",
+ "moneyPageTip": "Chỉ người dùng đã xác thực mới có thể cài đặc ảnh phong bì",
+ "alreadyJoin": "Bạn đã đăng ký, đối phương sẽ liên lạc với bạn nếu họ cảm thấy phù hợp",
+ "waring": "Cảnh báo vi phạm",
+ "userPravicy": "Tôn trọng quyền riêng tư của người dùng, cấm chụp ảnh màn hình người khác. Nếu có vi phạm lần sau, bạn sẽ bị cấm xem ảnh người dùng khác.",
+ "outTime": "Thời gian hẹn hò đã hết hạn, vui lòng chỉnh sửa",
+ "reviewing": "Xác thực",
+ "reviewed": "Xét duyệt thành công",
+ "reviewedFail": "Xét duyệt thất bại",
+ "needCard": "Người dùng phải liên kết thể ngân hàng trước khi rút tiền mặt",
+ "women_not_d": "Phái nữ không thể nhận xét về hoạt động của phái nữ",
+ "man_not_d": "Phái nam không thể nhận xét về hoạt động của phái nam",
+ "have_picture": "Có hình ảnh bạn có thể thu hút hơn đối với phái nữ",
+ "up_cancle": "Trượt lên để hủy gửi",
+ "msg_not": "Tin nhắn không thể bỏ trống",
+ "need_record": "Chức năng này phải cho phép ghi âm",
+ "downloading_video": "Đang tải file video",
+ "reinput": "Xin nhập lại thứ tự câu hỏi",
+ "dy_delete": "Hoạt động của bạn bị báo cáo ẩn danh. Sau khi xác nhận, hệ thống đã xóa hoạt động này. Xin đừng tiến hàng thao tác sai trái!",
+ "pro_delete": "Chương trình của bạn bị báo cáo ẩn danh. Sau khi xác nhận, hệ thống đã xóa chương trình này. Xin đừng tiến hàng thao tác sai trái!",
+ "con_delete": "Nhận xét của bạn bị báo cáo ẩn danh. Sau khi xác nhận, hệ thống đã xóa nhận xét này. Xin đừng tiến hàng thao tác sai trái!",
+ "coin_returen": "Sau khi nhận được báo cáo từ người dùng ẩn danh, hệ thống xác nhận gần đây bạn đã có hành động sai trái, nên đã tiến hành hoàn trả những H-coin gần đây của bạn. Nếu tái phạm, chưng tôi sẽ khóa tài khoản.",
+ "voicing": "Cấm tất cả hành vi dâm ô trái pháp luật trong khi thực hiện cuộc gọi, một khi phát hiện chúng tôi sẽ tiến hành khóa tài khoản.",
+ "help": "Nhân viên CSKH",
+ "translate_on": "Mở chức năng người dịch",
+ "translate_off": "Tắt chức năng người dịch",
+ "becomeSvip": "Đã dùng /s1H coin để tái tục SIVP",
+ "need_svip": "Bật quyền hạn SIVP",
+ "cannot_vip": "Không thể tái tục SVIP, trở thành VIP",
+ "offline": "Bạn đã thoát, không thể gửi và nhận tin nhắn",
+ "otherLogin": "Tài khoản đăng nhặp trên thiết bị khác, bạn đã thoát",
+ "no_new": "Tạm thời chưa có tin nhắn mới",
+ "over": "Đã dịch xong",
+ "bad_ev": "Bạn có chắc là dislike ?",
+ "right5": "Right 5",
+ "right6": "Right 6",
+ "man_vi": "Anh ơi",
+ "women_vi": "Em ơi",
+ "kf_tips": "để nâng cao chất lượng phục vụ, nếu dưới đây có thắc mắc của bạn, vui lòng trả lời bằng cách nhập số thứ tự",
+ "rejected": "Đã từ chối",
+ "buy_vip": "Bạn đã tiêu thụ /s1 H tệ để mua thành viên.",
+ "buy_program": "Bạn đã tiêu thụ /s1 H tệ để đăng hoạt động.",
+ "del_add_money": "Yêu cầu rút tiền H của bạn đã được xử lý và chuyển /s1 vào tài khoản của bạn, vui lòng kiểm tra!",
+ "adding_money": "Yêu cầu rút tiền /s1 H của bạn đang được xét duyệt.",
+ "free_translate": "miễn phí hưởng nhân viên dịch thuật kịp thời",
+ "personalTraff": "Nhân viên CSKH vì bạn phục vụ",
+ "ManTranslate": "Người dịch đang dịch...",
+ "robotTranslate": "Máy đang dịch...",
+ "translated": "Người dịch đã hoàn thành",
+ "delete_progarm": "Giao tiếp lành mạnh, xin đừng phát nội dung thô tục, một khi phát hiện sẽ bị xóa.",
+ "open_location": "Quyền định vị chưa được bật",
+ "get_location": "Vui lòng bật quyền định vị trong cài đặt điện thoại của bạn để biết khoảng cách người khác.",
+ "confirm_exit": "Nhấn lần nữa để thoát",
+ "free_program": "Cơ hội miễn phí phát sóng /s1 /ngày ",
+ "picture": "Hình ảnh",
+ "camera": "Máy ảnh",
+ "video": "Video",
+ "red_money": "Tiền lì xì",
+ "stick": "Dán",
+ "press_say": "Giữ để nói ",
+ "get_money": "/s1 đã nhận được tiền lì xì của bạn",
+ "you_get_money": "Bạn đã nhận được tiền lì xì của /s1",
+ "ones_money": "Tiền lì xì của /s1 ",
+ "money_over": "Tiền lì xì đã hết hạn",
+ "downloading_fail": "Tải tập tin thất bại",
+ "downloading": "Đang tải tập tin video",
+ "back_money": "Tiền lì xì chưa nhận, sẽ được yêu cầu hoàn trả sau 24 giờ! ",
+ "no_money": "Tiền lì xì không tồn tại",
+ "already_money": "Tiền lì xì đã nhận",
+ "back_user": "Đã hết hạn, đã được hoàn trả vào tài khoản",
+ "waiting_user": "Đang chờ bên kia nhận",
+ "other_get": "Bên kia đã nhận",
+ "little": "Của ít lòng nhiều, cứ lấy mà tiêu",
+ "put_money": "Tăng thêm tiền mặt vào phong bì",
+ "mount": "Số tiền",
+ "over_time": "Đã hết hạn",
+ "has_get": "Đã nhận",
+ "no_gift": "Hiện tại không có phần quà nào",
+ "sent_gift": "Quà tặng",
+ "fill_tips": "Khi bạn điền thông tin thành công sẽ nhận được /s1H tề, không thể sửa đổi sau khi liên kết.",
+ "bind_code": "Liên kết mã mời",
+ "invide_code": "Mã mời",
+ "confirm_delete": "Xác nhận xóa",
+ "has_eva": "Bạn đã nhận xét rồi",
+ "open": "Mở",
+ "voice": "Giọng nói",
+ "release_send": "Buông ra để gửi",
+ "time_little": "Thời gian ghi âm quá ngắn",
+ "not_online": "Đối phương không trực tuyến, không thể kết nối mic",
+ "give_red_money": "Bạn đã gửi một lì xì /s2 H đến /s1",
+ "get_red_money": "Bạn đã nhận được một lì xì /s2 H của /s1",
+ "give_other_money": "Bạn đã thưởng /s1 /s2H",
+ "get_other_money": "Bạn đã nhận được lì xì /s2H của /s1",
+ "svip": "Siêu hội viên",
+ "recommend": "Đề xuất",
+ "paid_you4": "Bạn đã trả (/s2H xu) để xem ảnh phong bì màu đỏ của /s1",
+ "paid_you5": "Bạn đã trả (/s2H xu) để xem album của /s1",
+ "paid_you6": "Bạn đã trả tiền để mở khóa tất cả thông tin của /s1",
+ "UG_LINE0": "Hibok giấy phép và thỏa thuận dịch vụ",
+ "UG_LINE1": "[Đầu tiên và giới thiệu]",
+ "UG_LINE2": "Qianhai Youlong Technology Co., Ltd. (sau đây gọi tắt là Cy Qianhai Youlong Technology Co., Ltd.) sau đây nhắc nhở người dùng đọc kỹ và hiểu đầy đủ Thỏa thuận dịch vụ này (sau đây gọi là Thỏa thuận ràng buộc). Người dùng nên đọc kỹ và hiểu đầy đủ Thỏa thuận này. Các điều khoản, bao gồm miễn trừ hoặc giới hạn trách nhiệm pháp lý của Qianhai Youlong Technology Co., Ltd. và các hạn chế về quyền của người dùng. Vui lòng đọc kỹ và chọn chấp nhận hoặc không chấp nhận Thỏa thuận này (trẻ vị thành niên phải có người giám hộ hợp pháp kèm theo). Bạn không được phép đăng ký, đăng nhập hoặc sử dụng các dịch vụ trong Thỏa thuận này trừ khi bạn chấp nhận tất cả các điều khoản của Thỏa thuận này. Việc đăng ký, đăng nhập, sử dụng, v.v. của bạn sẽ được coi là chấp nhận Thỏa thuận này và bạn đồng ý bị ràng buộc bởi các điều khoản của Thỏa thuận này.",
+ "UG_LINE3": "Thỏa thuận này là một thỏa thuận giữa bạn (sau đây gọi là \"Người dùng\" và Qianhai Youlong Technology Co., Ltd. về việc đăng ký, đăng ký và sử dụng \"dịch vụ Hibok\". Thỏa thuận này mô tả mối quan hệ giữa Qianhai Youlong Technology Co., Ltd. và Người dùng về \"dịch vụ Hibok\". Quyền và nghĩa vụ. Người dùng có nghĩa là cá nhân hoặc tổ chức đăng ký, đăng nhập, sử dụng và duyệt Dịch vụ. Việc bạn chấp nhận Thỏa thuận này tuân theo tất cả các điều khoản và điều kiện, bao gồm mọi sửa đổi do Qianhai Youlong Technology Co., Ltd. thực hiện đối với mọi Điều khoản dịch vụ bất kỳ lúc nào. Thỏa thuận có thể được Qianhai Youlong Technology Co., Ltd. cập nhật bất cứ lúc nào. Các điều khoản cập nhật của thỏa thuận sẽ được thay thế bằng các điều khoản ban đầu của thỏa thuận mà không cần thông báo trước. Người dùng có thể kiểm tra các điều khoản của thỏa thuận mới nhất trong ứng dụng này. Sau khi Qianhai Youlong Technology Co., Ltd. sửa đổi các điều khoản của thỏa thuận, Nếu người dùng không chấp nhận các điều khoản sửa đổi, xin vui lòng ngừng sử dụng nó ngay lập tức dịch vụ Cyhd TNHH cung cấp, người dùng tiếp tục sử dụng dịch vụ Cyhd TNHH lời đề nghị sẽ được coi là đã chấp nhận thỏa thuận sửa đổi.",
+ "UG_LINE4": "Đầu tiên, việc sử dụng các quy tắc",
+ "UG_LINE5": "1、 Người dùng hoàn toàn hiểu và đồng ý rằng chỉ cung cấp nền tảng chia sẻ, truyền tải và thu thập thông tin cho người dùng. Người dùng phải chịu trách nhiệm cho tất cả các hành động trong tài khoản đã đăng ký, bao gồm nhưng không giới hạn bất kỳ nội dung nào bạn truyền và bất kỳ kết quả nào. .",
+ "UG_LINE6": "2、 Qianhai Youlong Technology Co., Ltd. không chịu trách nhiệm cho bất kỳ nội dung nào được truyền tải bởi hoặc thông qua các Dịch vụ không phản ánh quan điểm hoặc chính sách của Qianhai Youlong Technology Co., Ltd..",
+ "UG_LINE7": "3、 Người dùng hoàn toàn hiểu và đồng ý rằng đó là sản phẩm duyệt thông tin xã hội dựa trên mạng quan hệ người dùng. Người dùng phải chịu trách nhiệm hoàn toàn về tính xác thực, tính hợp pháp và tính hợp lệ của thông tin đã đăng ký và người dùng không được mạo danh người khác; Mọi thông tin sẽ được truyền đi dưới tên, không sử dụng độc hại tài khoản đã đăng ký có thể gây nhầm lẫn cho người dùng khác, nếu không, Qianhai Youlong Technology Co., Ltd. có quyền ngừng cung cấp dịch vụ ngay lập tức, phục hồi số tài khoản và chịu mọi trách nhiệm pháp lý phát sinh từ đó.",
+ "UG_LINE8": "4、Người dùng phải tự chịu trách nhiệm về tính xác thực, tính hợp pháp, vô hại và tính hợp lệ của thông tin được truyền trên trang web. Mọi trách nhiệm pháp lý liên quan đến thông tin do người dùng truyền tải sẽ do người dùng chịu và không liên quan đến Qianhai Youlong Technology Co., Ltd..",
+ "UG_LINE9": "5、Qianhai Youlong Technology Co., Ltd. có quyền thay đổi, đình chỉ, giới hạn, chấm dứt hoặc thu hồi dịch vụ của bất kỳ hoặc tất cả các dịch vụ của Dịch vụ bất cứ lúc nào mà không cần thông báo do nhu cầu phát triển kinh doanh và người dùng phải chịu rủi ro này.",
+ "UG_LINE10": "6、Các dịch vụ được cung cấp có thể bao gồm quảng cáo và người dùng đồng ý hiển thị quảng cáo được cung cấp bởi các nhà cung cấp và đối tác bên thứ ba trong quá trình sử dụng.",
+ "UG_LINE11": "7、 Người dùng không được sử dụng hoặc dịch vụ để thực hiện, tải lên, sao chép hoặc gửi nội dung sau:",
+ "UG_LINE12": "(1) chống lại các nguyên tắc cơ bản được thiết lập bởi Hiến pháp;",
+ "UG_LINE13": "(2) gây nguy hiểm cho an ninh quốc gia, tiết lộ bí mật nhà nước, lật đổ quyền lực nhà nước và phá hoại đoàn kết dân tộc;",
+ "UG_LINE14": "(3) làm tổn hại danh dự và lợi ích quốc gia;",
+ "UG_LINE15": "(4) Kích động hận thù dân tộc, phân biệt sắc tộc và phá hoại đoàn kết dân tộc;",
+ "UG_LINE16": "(5) Phá hủy các chính sách tôn giáo của nhà nước và thúc đẩy các giáo phái và mê tín phong kiến;",
+ "UG_LINE17": "(6) Truyền bá tin đồn, phá vỡ trật tự xã hội và phá hoại sự ổn định xã hội;",
+ "UG_LINE18": "(7) truyền bá những điều tục tĩu, khiêu dâm, đánh bạc, bạo lực, giết người, khủng bố hoặc xóa bỏ;",
+ "UG_LINE19": "(8) xúc phạm hoặc vu khống người khác và xâm phạm quyền và lợi ích hợp pháp của người khác;",
+ "UG_LINE20": "(9) Thông tin chứa nội dung khác bị cấm theo luật pháp và các quy định hành chính.",
+ "UG_LINE21": "8、Cyhd TNHH thể, trong phán quyết hợp lý của nó, vi phạm pháp luật liên quan và các quy định hoặc thoả thuận này; hoặc vi phạm, kiến, mối đe dọa của bất kỳ quyền hoặc sự an toàn, hoặc mạo danh, Cyhd TNHH ngay để ngăn chặn bất kỳ luật giao thông nói trên Và có quyền, theo toàn quyền quyết định của mình, có hành động pháp lý phù hợp với bất kỳ người nào vi phạm các Điều khoản này, bao gồm nhưng không giới hạn trong việc loại bỏ bất hợp pháp, vi phạm, không đúng cách, v.v. khỏi Dịch vụ, chấm dứt tư cách thành viên của những người vi phạm và ngăn chặn họ khỏi Sử dụng tất cả hoặc một phần của dịch vụ, và giữ thông tin liên quan và báo cáo cho các bộ phận liên quan theo luật pháp và quy định.",
+ "UG_LINE22": "9、Quyền và nghĩa vụ của người dùng: ",
+ "UG_LINE23": "(1) Tài khoản Cyhd TNHH thuộc sở hữu của tất cả Qianhai Youlong Technology Co., Ltd., sau khi người dùng hoàn thành việc áp dụng cho các thủ tục đăng ký, để có được quyền sử dụng các tài khoản, được cấp giấy phép cho người nộp đơn ban đầu cho đăng ký bị cấm món quà, cho mượn, cho thuê, chuyển nhượng hoặc bán. Cyhd Giới hạn do nhu cầu hoạt động, chúng tôi có quyền thu hồi tài khoản người dùng và truy cập vào ảnh của người dùng, video, âm thanh và các hoạt động quảng bá sản phẩm khác.",
+ "UG_LINE24": "(2) người dùng có quyền thay đổi, xóa trên Qianhai Youlong Technology Co., Ltd.. Dữ liệu cá nhân, thông tin đăng ký và nội dung chuyển nhượng, nhưng lưu ý rằng xóa thông tin cũng sẽ loại bỏ bất kỳ của bạn được lưu trữ trong hệ thống các văn bản và hình ảnh. Người dùng chịu trách nhiệm cho rủi ro này.",
+ "UG_LINE25": "(3) Người dùng chịu trách nhiệm bảo mật thông tin tài khoản đã đăng ký và mật khẩu tài khoản. Người dùng chịu trách nhiệm về tài khoản đã đăng ký và hành vi theo mật khẩu. Người dùng đồng ý không sử dụng số tài khoản hoặc mật khẩu của thành viên khác trong mọi trường hợp. Bạn đồng ý thông báo cho Qianhai Youlong Technology Co., Ltd. ngay lập tức nếu bạn nghi ngờ rằng ai đó đang sử dụng tài khoản hoặc mật khẩu của bạn.",
+ "UG_LINE26": "(4) Người dùng phải tuân thủ các điều khoản của Thỏa thuận này và sử dụng Dịch vụ một cách chính xác và phù hợp. Nếu Người dùng vi phạm bất kỳ điều khoản nào của Thỏa thuận này, Qianhai Youlong Technology Co., Ltd. có quyền chấm dứt dịch vụ của tài khoản Qianhai Youlong Technology Co., Ltd. của người dùng mặc định theo Thỏa thuận. Đồng thời, Qianhai Youlong Technology Co., Ltd. có quyền rút số tài khoản và tên người dùng Qianhai Youlong Technology Co., Ltd. bất cứ lúc nào.",
+ "UG_LINE27": "(5) Nếu người dùng có tài khoản tiếng Anh thông thường của mình, người dùng có quyền đăng ký tài khoản tiếng Anh trước tiên, nhưng nếu người dùng không đăng ký tài khoản sau khi dịch vụ trực tuyến hoặc người dùng đã đăng ký tài khoản WeChat, nhưng Nếu tài khoản tiếng Anh không được sử dụng làm tài khoản WeChat, người dùng được coi là đã từ bỏ quyền đăng ký tài khoản tiếng Anh dưới dạng tài khoản WeChat. Qianhai Youlong Technology Co., Ltd. có quyền tái chế và phân phối tài khoản tiếng Anh cho người dùng khác, để tránh lãng phí tài nguyên. Vấn đề là trách nhiệm của người dùng.",
+ "UG_LINE28": "(6) Nếu người dùng không đăng nhập vào tài khoản sau khi đăng ký tài khoản trong một thời gian dài, Qianhai Youlong Technology Co., Ltd. có quyền tái chế tài khoản, để tránh lãng phí tài nguyên và các sự cố do người dùng gây ra.",
+ "UG_LINE29": "(7) người dùng có thể sử dụng tính năng suy giảm tranh chấp duy trì sự quan tâm sử dụng trong nền tảng này, nếu các báo cáo sử dụng thông tin phản hồi nhận được, chủ động thông báo cho người sử dụng có nghĩa vụ báo cáo hoặc xác minh tình hình với các nhân viên dịch vụ khách hàng để báo cáo để xác minh các nội dung là đúng sự thật, mặt nạ đậu quyền những lời cảnh báo người sử dụng, hạn chế chức năng tài khoản và vi phạm hạn chế chế độ người dùng khác, người phạm tội nghiêm trọng Hibok hưởng trực tiếp đóng băng tài khoản, và số dư trong tài khoản sẽ không được trả lại. Nếu tài khoản bị đóng băng và cần được kháng cáo, người dùng có thể liên hệ với dịch vụ khách hàng.",
+ "UG_LINE30": "Thứ hai, bảo vệ quyền riêng tư",
+ "UG_LINE31": "Người dùng đồng ý rằng thông tin bảo mật cá nhân đề cập đến những thông tin có thể nhận dạng cá nhân người dùng hoặc liên quan đến giao tiếp cá nhân, bao gồm các thông tin sau: tên thật, số điện thoại di động, tài khoản WeChat, tài khoản facebook và địa chỉ IP. Thông tin riêng tư phi cá nhân đề cập đến thông tin chung mà người dùng phản ánh rõ ràng và khách quan thông tin hồ sơ cơ bản của máy chủ Qianhai Youlong Technology Co., Ltd. và tất cả thông tin bảo mật cá nhân khác và thông tin cá nhân nêu trên mà người dùng đồng ý tiết lộ. . Tôn trọng quyền riêng tư của thông tin cá nhân của người dùng là một hệ thống nhất quán của Qianhai Youlong Technology Co., Ltd.. Qianhai Youlong Technology Co., Ltd. sẽ thực hiện các bước hợp lý để bảo vệ thông tin cá nhân của người dùng. Qianhai Youlong Technology Co., Ltd., ngoài các yêu cầu pháp lý hoặc pháp lý hoặc sự đồng ý của chính phủ. Thông tin riêng tư cá nhân của người dùng sẽ không được tiết lộ hoặc tiết lộ cho các bên thứ ba ngoài đơn vị đối tác mà không có sự đồng ý của người dùng. Tuy nhiên, người dùng chọn đồng ý tại thời điểm đăng ký hoặc người dùng và Qianhai Youlong Technology Co., Ltd. và đơn vị hợp tác đã đồng ý khác về việc tiết lộ hoặc sử dụng thông tin cá nhân của người dùng và người dùng sẽ chịu mọi rủi ro có thể phát sinh, Qianhai Youlong Technology Co., Ltd. không Có trách nhiệm. Đồng thời, để vận hành và cải thiện công nghệ và dịch vụ của Qianhai Youlong Technology Co., Ltd., Qianhai Youlong Technology Co., Ltd. có thể thu thập hoặc cung cấp thông tin cá nhân cho người dùng của bên thứ ba, giúp Qianhai Youlong Technology Co., Ltd. cung cấp cho người dùng trải nghiệm người dùng tốt hơn và cải thiện Chất lượng dịch vụ của Qianhai Youlong Technology Co., Ltd.. Qianhai Youlong Technology Co., Ltd. thu thập dữ liệu dựa trên tương tác của người dùng với Qianhai Youlong Technology Co., Ltd. và các lựa chọn của người dùng, bao gồm các cài đặt quyền riêng tư của người dùng và các sản phẩm và tính năng được người dùng sử dụng. Dữ liệu do Qianhai Youlong Technology Co., Ltd. thu thập có thể bao gồm phiên bản mã SDK / API / JS, địa chỉ IP, nền tảng, dấu thời gian, số nhận dạng ứng dụng, phiên bản ứng dụng, kênh phân phối ứng dụng, số nhận dạng thiết bị độc lập, số nhận dạng quảng cáo iOS (IDFA), quảng cáo Android Số nhận dạng chính, địa chỉ card mạng (MAC), Nhận dạng thiết bị di động quốc tế (IMEI), kiểu thiết bị, nhà sản xuất thiết bị đầu cuối, phiên bản hệ điều hành thiết bị đầu cuối, thời gian bắt đầu / dừng phiên, vị trí ngôn ngữ, múi giờ và trạng thái mạng (WiFi, v.v.) Sử dụng đĩa cứng, CPU và pin, v.v. Điều này sẽ cho phép Qianhai Youlong Technology Co., Ltd. tiến hành phân tích và nghiên cứu dữ liệu nội bộ, dịch vụ thống kê SDK của bên thứ ba và cải thiện các sản phẩm hoặc dịch vụ của Qianhai Youlong Technology Co., Ltd.. Để đảm bảo tính xác thực của danh tính người dùng, để cung cấp bảo mật tốt hơn với các thông tin nhận dạng người dùng, hoặc đặc điểm khuôn mặt như thông tin người dùng sinh trắc học phải nộp (cả hai thuộc về thông tin cá nhân nhạy cảm) để hoàn thành các sản phẩm cụ thể yêu cầu hoặc dịch vụ cần thiết để sống chứng nhận. Thông tin trên sẽ chỉ được sử dụng để xác minh tính xác thực của danh tính người dùng. Thông tin trên do người dùng cung cấp sẽ tiếp tục được Qianhai Youlong Technology Co., Ltd. ủy quyền trong quá trình sử dụng Dịch vụ của người dùng. Qianhai Youlong Technology Co., Ltd. sẽ ngừng sử dụng nó khi người dùng đăng xuất khỏi tài khoản. Các thông tin trên sẽ được lưu trữ tại Cộng hòa Nhân dân Trung Hoa. Đối với truyền dẫn xuyên biên giới, Qianhai Youlong Technology Co., Ltd. sẽ có được sự cho phép của người dùng. Xác thực tính xác thực của người dùng ứng dụng yêu cầu người dùng cung cấp một số thông tin có thể xác minh tính xác thực của danh tính người dùng. Thông tin liên quan chỉ được sử dụng để đánh giá nền tảng và sẽ không được tiết lộ cho bất kỳ người dùng nào khác hoặc cho mục đích thương mại, ngoại trừ các bộ phận pháp lý hoặc liên quan yêu cầu can thiệp.",
+ "UG_LINE32": "Thông tin nhãn hiệu của Qianhai Youlong Technology Co., Ltd. Logo",
+ "UG_LINE33": "Ký tự hoặc các thành phần của chúng và các logo và sản phẩm và tên dịch vụ khác của Qianhai Youlong Technology Co., Ltd. có liên quan đến các dịch vụ của Qianhai Youlong Technology Co., Ltd. là các nhãn hiệu của Qianhai Youlong Technology Co., Ltd. (sau đây gọi là Logo Qianhai Youlong Technology Co., Ltd. Logo). Logo Qianhai Youlong Technology Co., Ltd. có thể không được hiển thị hoặc sử dụng hoặc xử lý theo bất kỳ cách nào nếu không có sự đồng ý trước bằng văn bản của Qianhai Youlong Technology Co., Ltd. và không được cho người khác biết rằng bạn có quyền hiển thị, sử dụng hoặc được ủy quyền để xử lý logo Qianhai Youlong Technology Co., Ltd..",
+ "UG_LINE34": "Thứ tư, trách nhiệm pháp lý và miễn trừ",
+ "UG_LINE35": "1. Người dùng vi phạm các quy định của Thỏa thuận này hoặc các điều khoản dịch vụ có liên quan, dẫn đến hoặc phát sinh từ bất kỳ khiếu nại, khiếu nại hoặc tổn thất nào được yêu cầu bởi bất kỳ bên thứ ba nào, bao gồm phí luật sư hợp lý và người dùng đồng ý bồi thường cho Qianhai Youlong Technology Co., Ltd. và công ty đối tác, các chi nhánh, Và bảo vệ nó khỏi thiệt hại.",
+ "UG_LINE36": "2. Qianhai Youlong Technology Co., Ltd. và các đối tác không chịu trách nhiệm cho bất kỳ tổn thất nào của người dùng do lỗi đường truyền, sự cố kỹ thuật, mạng, lỗi máy tính, mất ổn định hệ thống và các nguyên nhân bất khả kháng khác của các bên thứ ba như bộ phận viễn thông.",
+ "UG_LINE37": "3, do sự kiện thất bại bất khả kháng kỹ thuật ảnh hưởng đến hoạt động bình thường của dịch vụ, Qianhai Youlong Technology Co., Ltd. và cam kết đối tác với các đơn vị có liên quan trong lần đầu tiên với việc xử lý kịp thời sửa chữa, nhưng tất cả các tổn thất của người sử dụng và do đó, Qianhai Youlong Technology Co., Ltd. và Đơn vị đối tác không chịu trách nhiệm.",
+ "UG_LINE38": "4, các dịch vụ tương tự như hầu hết các dịch vụ Internet, tùy thuộc vào các yếu tố bao gồm, nhưng không giới hạn người sử dụng lý trí, chất lượng dịch vụ mạng, xã hội và sự khác biệt về môi trường chưa bị nhiễm khuẩn với một loạt các vấn đề an ninh, chẳng hạn như những người khác sử dụng dữ liệu của người dùng, dẫn đến trong cuộc sống thực Quấy rối, phần mềm khác được tải xuống hoặc cài đặt bởi người dùng hoặc các trang web khác được truy cập có chứa \"Trojan Horse\" và các vi-rút khác, đe dọa đến tính bảo mật của thông tin và dữ liệu máy tính của người dùng, do đó ảnh hưởng đến việc sử dụng dịch vụ thông thường. Người dùng nên tăng cường bảo mật thông tin và nhận thức bảo vệ thông tin người dùng và chú ý tăng cường bảo vệ mật khẩu để tránh mất mát và quấy rối.",
+ "UG_LINE39": "5. Người dùng phải hiểu rằng việc sử dụng dịch vụ này có thể bị ảnh hưởng bởi các yếu tố không ổn định trong các liên kết khác nhau do các dịch vụ Internet. Do đó, dịch vụ có nguy cơ bị gián đoạn dịch vụ hoặc không đáp ứng yêu cầu của người dùng do bất khả kháng, virus máy tính hoặc tin tặc tấn công, mất ổn định hệ thống, vị trí người dùng, tắt máy và bất kỳ lý do công nghệ, internet, đường truyền thông nào khác. Người dùng chịu trách nhiệm cho các rủi ro trên và Qianhai Youlong Technology Co., Ltd. không đảm bảo. Qianhai Youlong Technology Co., Ltd. không chịu trách nhiệm cho việc người dùng không thể gửi và nhận thông tin đọc hoặc nhận thông tin không chính xác.",
+ "UG_LINE40": "6, người dùng phải hiểu, có sử dụng quy trình dịch vụ này, trong đó có nội dung đe dọa, phỉ báng, xúc phạm hoặc bất hợp pháp hay hành vi của bất kỳ người nào khác, hoặc vi phạm quyền của người khác (kể cả sở hữu trí tuệ) của Qianhai Youlong Technology Co., Ltd. và công ty đối tác không thực hiện bất kỳ loại bảo đảm nào cho dịch vụ, dù rõ ràng hay ngụ ý, bao gồm tất cả tính xác thực thông tin liên quan, tính thương mại, phù hợp với một số nhất định Việc sử dụng cụ thể, tiêu đề và không vi phạm các bảo đảm và điều kiện ngụ ý sẽ không chịu trách nhiệm cho bất kỳ thiệt hại trực tiếp, gián tiếp, ngẫu nhiên, đặc biệt hoặc hậu quả nào từ việc sử dụng Dịch vụ không đúng hoặc bất hợp pháp của Người dùng.",
+ "UG_LINE41": "7.Nội dung thông tin được xác định bởi Qianhai Youlong Technology Co., Ltd. bao gồm: văn bản, phần mềm, âm thanh, hình ảnh, video, đồ họa, tất cả nội dung trong quảng cáo, thông tin thương mại do Qianhai Youlong Technology Co., Ltd. cung cấp cho người dùng, tất cả đều thuộc bản quyền, nhãn hiệu và các quyền sở hữu trí tuệ khác. Và việc bảo vệ luật sở hữu. Do đó, người dùng chỉ có thể được sử dụng theo Qianhai Youlong Technology Co., Ltd. và các nhà quảng cáo có thẩm quyền của nội dung, nhưng không sao chép trái phép, sửa đổi, biên soạn này. Những nội dung, hoặc tạo ra các sản phẩm phái sinh nội dung liên quan đến.",
+ "UG_LINE42": "8.trong mọi trường hợp, Cyhd TNHH chịu trách nhiệm về bất kỳ thiệt hại gián tiếp, gián tiếp, trừng phạt, ngẫu nhiên, đặc biệt hoặc trừng phạt, bao gồm cả lợi nhuận bị mất phải chịu đựng bởi người dùng sử dụng dịch vụ, trách nhiệm (ngay cả khi thông báo về Khả năng mất mát cũng vậy). Mặc dù thỏa thuận này có thể có điều khoản trái, Cyhd TNHH hoàn toàn trách nhiệm đối với cam kết của bạn, vì bất cứ lý do nào, hoặc những loại hành vi, không bao giờ vượt quá việc bạn sử dụng phí dịch vụ thanh toán cho các thành viên TNHH Cyhd trong giai đoạn này.",
+ "UG_LINE43": "Năm, điều khoản thành viên",
+ "UG_LINE44": "1. thành viên Hibok có quyền bình đẳng với các thành viên và sẽ tuân thủ các thông số và quy tắc của Qianhai Youlong Technology Co., Ltd., bao gồm nhưng không giới hạn trong các Điều khoản dịch vụ này và Thỏa thuận người dùng.",
+ "UG_LINE45": "2. Mất mát liên quan đến việc đình chỉ dịch vụ thành viên do vi phạm Thỏa thuận người dùng Qianhai Youlong Technology Co., Ltd. sẽ do người dùng chịu.",
+ "UG_LINE46": "3. Thành viên có thể tận hưởng các dịch vụ giá trị gia tăng của các thành viên Hibok trong thời gian thành viên.",
+ "UG_LINE47": "4. Nếu thành viên chủ động chấm dứt hoặc hủy bỏ tư cách thành viên trong thời gian hiệu lực của thành viên, Qianhai Youlong Technology Co., Ltd. không chịu trách nhiệm hoàn trả phí dịch vụ tương ứng với thời hạn hiệu lực của thành viên còn lại của thành viên.",
+ "UG_LINE48": "5, các thành viên truyền sinh trong Hibok, việc phát hành các thông tin và sử dụng các dịch vụ miễn phí trách nhiệm pháp lý Hibok hoặc trả thành viên dịch vụ để sử dụng dịch vụ Hibok, bao gồm các dịch vụ miễn phí và trả hành động dịch vụ, thực hiện theo tất cả các luật, quy định, quy chuẩn Tập tin.",
+ "UG_LINE49": "6. Sau khi dịch vụ thành viên được mở, nó không thể được chuyển nhượng hoặc hủy đăng ký.",
+ "UG_LINE50": "7, do các thành viên trong việc sử dụng Cyhd TNHH dịch vụ miễn phí, dịch vụ thanh toán, có những hành vi vi phạm pháp luật và các quy định, Cyhd TNHH có quyền hủy bỏ thành viên của thành viên mà không đưa ra bất kỳ bồi thường, và các thành viên phải chịu trách nhiệm hoàn toàn.",
+ "UG_LINE51": "Sáu điều khoản khác",
+ "UG_LINE52": "1. Qianhai Youlong Technology Co., Ltd. nhắc nhở người dùng chú ý đến các điều khoản của Thỏa thuận miễn trừ trách nhiệm pháp lý của Qianhai Youlong Technology Co., Ltd. và làm nặng thêm nghĩa vụ của người dùng. Vui lòng đọc kỹ và xem xét rủi ro. Người chưa thành niên nên đọc Thỏa thuận này kèm theo người giám hộ hợp pháp. Việc giải thích và sửa đổi cuối cùng các điều khoản và điều kiện trên thuộc sở hữu của Qianhai Youlong Technology Co., Ltd..",
+ "UG_LINE53": "2. Sự vô hiệu của một số hoặc tất cả các điều khoản được quy định trong Thỏa thuận này sẽ không ảnh hưởng đến hiệu lực của các điều khoản khác.",
+ "UG_LINE54": "3. Việc giải thích, hiệu lực và giải quyết tranh chấp trong Thỏa thuận này sẽ được áp dụng cho luật pháp của Cộng hòa Nhân dân Trung Hoa. Nếu bất kỳ tranh chấp hay tranh cãi giữa người dùng và Qianhai Youlong Technology Co., Ltd., trước hết phải được giải quyết thông qua hiệp thương hữu nghị, tư vấn thất bại, người sử dụng trong này hoàn toàn đồng ý đưa tranh chấp hoặc cãi Cyhd TNHH nơi cư trú có trách nhiệm thẩm quyền.",
+ "UG_LINE55": "4. Bản quyền của Thỏa thuận này thuộc sở hữu của Qianhai Youlong Technology Co., Ltd. và Qianhai Youlong Technology Co., Ltd. bảo lưu mọi quyền để giải thích và sửa đổi.",
+ "UG_LINE56": "Qianhai Youlong Technology Co., Ltd.",
+ "net_error": "Mạng bất thường",
+ "enter_name": "Vui lòng nhập tên",
+ "translate": "Dịch",
+ "locate": "Vị trí",
+ "voice_tips": "Giữ để nói, buông ra để gửi",
+ "unlock": "Mở khóa",
+ "input_content": "Nhập nội dung",
+ "connecting": "Đang kết nối...",
+ "logining": "Đang đăng nhập...",
+ "reject_reply": "/s1 đã từ chối yêu cầu để xem của bạn",
+ "warning_text": "Tròng vòng 3 ngầy nếu không có ai báo cáo, bạn có thể đổi H coin thành tiền mặt(1:1000Việt nam)",
+ "more_big": "Số lượng đầu vào không lớn hơn /s1",
+ "little_min": "Số lượng đầu vào không ít hơn /s1",
+ "voice_msg": "/s1 mời bạn gọi",
+ "send_gift": "Bạn đã thưởng cho đối phương /s1 cái /s2",
+ "receive_gift": "Đối phương đã thưởng cho bạn /s1 cái /s2",
+ "cannot_join": "Không phải thành viên không thể đăng ký",
+ "alreay_back": "Trả lại",
+ "video_more_big": "Tệp quá lớn",
+ "select_all": "Chọn tất cả",
+ "re_connect": "Kết nối lại",
+ "voice_tips2": "Buông ra để gửi, vuốt để hủy",
+ "country": "Quốc tịch",
+ "have_picture_view": "Đang xem xét",
+ "speaker_play": "Loa chơi",
+ "handset_playback": "Phát loa ngoài",
+ "play_model": "Chế độ loa ngoài",
+ "password_less": "Mật khẩu quá ngắn",
+ "years_old": "Tuổi",
+ "coin_returen1": "Khi bị người giấu tên tố cáo, hệ thống tiến hành kiểm tra và xác minh gần đây bạn có hành vi vi phạm xin hãy dừng lại hành động đó. Nếu tiếp tục vi phạm tài khoản của bạn của bạn sẽ bị đóng băng",
+ "already_new": "Đây là phiên bản mới nhất",
+ "test_it": "Trải nghiệm ngay",
+ "found_new": "Phát hiện phiên bản mới",
+ "ad": "Quảng cáo",
+ "attention": "Theo dõi",
+ "fans": "Fans",
+ "apply_see": "/s1 xin xem trang tài liệu của tôi.",
+ "agree_apply": "/s1 đã thông qua yêu cầu xem của tôi",
+ "see_redBag": "/s1 xem ảnh lì xì của tôi",
+ "notice": "Nhắc nhở",
+ "notice_open": "Vui lòng bật quyền thông báo trong cài đặt điện thoại của bạn để nhận thông báo",
+ "open_notice": "Quyền thông báo chưa được bật",
+ "not_open": "Quyền thông báo chưa được mở, không nhận được thông báo.",
+ "withdraw_fail": "coin /s1H mà bạn xin rút tiền đã được trả lại, xin xác nhận tài khoản liên kết của bạn có đúng không!",
+ "dynamics": "Hoạt động",
+ "Remark": "Ghi chú",
+ "setRemark": "Cài đặt ghi chú",
+ "content_num": "/s1 bình luận",
+ "Redeem": "Điểm sẽ đổi được /s1H coin ",
+ "location_permission": "Không có quyền truy cập vào bộ nhớ điện thoại",
+ "camera_permission": "Không có quyền truy cập camera",
+ "photo_permission": "Không có quyền truy cập vào album",
+ "video_permission": "Không có quyền truy cập micro",
+ "your_redMoney_over": "Lỉ xỉ bạn gửi đã hết hạn",
+ "other_redMoney_over": "Đồi phương gửi lì xì đã hết hạn ",
+ "server_error_tips": "Có vẻ đã xảy ra lỗi ...",
+ "emoji": "icon",
+ "today_score": "Báo danh trong ngày để nhận /s1 điểm tích lũy",
+ "sign_tips": "1. Báo danh hàng ngày để tích lũy điểm, số ngày tích lũy càng nhiều điêm tích lũy càng cao. \n2. Điểm tích lũy có thể đổi thành H coin, khi đổi sẽ tiêu hao điểm tích lũy tương đương, hãy thận trọng khi đổi. \n3.Báo danh sẽ được đặt lại vào ngày cuối cùng của tháng, xóa điểm tích lũy. Hãy kịp thời đổi điểm tích lũy nhé!",
+ "sign_in": "Báo danh",
+ "my_score": "Điểm tích lũy của tôi",
+ "signin_now": "Báo danh ngay",
+ "sign_in_day": "Tích lũy báo danh /s1 ngày",
+ "have_get": "Đã hối đổi",
+ "scan": "Quét mã",
+ "my_qr": "Mã QR của tôi",
+ "scan_and_add": "Quét mã và thêm bạn bè",
+ "amap": "Bản đồ Gouda",
+ "baidumap": "Bản đồ Yahoo",
+ "googlemap": "Bản đồ Google",
+ "applemap": "Bản đồ Apple",
+ "go_open": "Đi mở ra",
+ "Preview": "Xem trước",
+ "Photo_album": "Album ảnh",
+ "all_photo": "Tất cả hình ảnh ",
+ "have_select": "Bạn đã chọn /s1 hình ảnh",
+ "loading": "Đang tải ...",
+ "new_chat_msg": "Bạn có tin nhắn trò chuyện mới",
+ "new_video_msg": "Bạn có tin nhắn Liên mic mới",
+ "apply_friends": "/s1 xin kết bạn",
+ "applyed_friends": "/s1 đã thông qua yêu cầu kết bạn của bạn",
+ "contact_permission": "Không có quyền truy cập vào danh bạ",
+ "contact": "Danh bạ",
+ "search": "Tìm kiếm",
+ "contact_add": "Thêm bạn bè từ danh bạ",
+ "find": "Phát hiện",
+ "translate_robot": "Robot dịch",
+ "robot_hello": "Xin chào, tôi là robot dịch thuật ...",
+ "Simplified_Chinese": "Tiếng Trung giản thể",
+ "traditional_Chinese": "Tiếng Trung phồn thể",
+ "english": "Tiếng Anh",
+ "Vietnamese": "Tiếng Việt",
+ "Korean": "Tiếng Hàn",
+ "Japanese": "Tiếng Nhật",
+ "add_friends": "Thêm bạn bè",
+ "stranger": "Người lạ",
+ "receive_stranger": "Nhận tin nhắn từ người lạ",
+ "signin": "SignIn",
+ "stranger_close": "Đối phương từ chối nhận tin nhắn từ người lạ, bạn có tiếp tục mở khóa tất cả thông tin không.",
+ "add": "Thêm",
+ "added": "Đã thêm",
+ "stranger_close_tips": "Đối phương từ chối nhận tin nhắn từ người lạ.",
+ "translate_fail": "Lỗi dịch",
+ "no_photos": "Vui lòng tải ảnh lên trước khi cài đặt ảnh lì xì.",
+ "successful_appeal1": "Đánh giá kháng án của bạn: /s1 kháng án thất bại.",
+ "add_success": "Thêm thành công, đợi đối phương đồng ý",
+ "other_pay": "Người khác trả hộ",
+ "friend_verification": "Xác thực bạn bè",
+ "add_friends_tips": "Đơn xin xác thực của bạn đã gửi và chờ đối phương thông qua",
+ "i_am": "Tôi là/s1",
+ "agree": "Cho phép",
+ "privacyAgreement": "\"Hi\"Bạn cần đồng ý với \"Thỏa thuận quyền riêng tư\" để sử dụng",
+ "privacy": "Thỏa thuận quyền riêng tư",
+ "notification_addfriend": "Hi! có người yêu cầu thêm bạn, xem đó là ai",
+ "distance_long": "Thêm bạn bè cần đối diện với nhau mới thêm được ha",
+ "chat_tips": "Để nâng cao tính chính xác của nội dung dịch, vui lòng đừng viết tắt",
+ "fans_list": "Danh sách fans",
+ "system_not_open": "Đang kiểm tra chức năng",
+ "service_withdraw_tips": "Hiện tại khách hàng IOS chưa hỗ trợ chức năng rút tiền,bạn có thể sử dụng Android để rút hoặc click vào nút phía dưới",
+ "withdraw_tips": "Click vào đây để rút tiền",
+ "add_member": "Thêm thành viên",
+ "delete_member": "Xóa thành viên",
+ "change_group_name": "Sửa đổi tên nhóm",
+ "my_group_nickname": "Biệt danh của tôi trong nhóm ",
+ "group_chat": "Trò chuyện nhóm",
+ "create_group_chat": "Tạo nhóm trò chuyện",
+ "added_friends_tips": "Bạn cần gửi đơn xin xác thực và chờ đối phương thông qua",
+ "group_chat_name": "Tên nhóm trò chuyện",
+ "my_group_nickname_tips": "Tại đây bạn có thể đặt biệt hiệu của mình trong nhóm này, và biệt danh này chỉ được hiển thị trong nhóm này",
+ "man_gold": "Động thái nam thần",
+ "woman_gold": "Động thái nữ thần",
+ "choose_group_owner": "Chọn nhóm chủ mới",
+ "group_announcement": "Thông báo nhóm",
+ "chat_news": "Tin nhắn trò chuyện",
+ "group_qr": "Mã QR nhóm",
+ "group_setting": "Quản lý nhóm",
+ "close_news_notice": "Thông báo tắt tiếng",
+ "set_chat_top": "Dính ở trên đầu",
+ "show_group_member_name": "Hiển thị biệt danh thành viên nhóm",
+ "quit_group_tips": "Sau khi thoát nhóm sẽ không thông báo cho các thành viên khác trong cuộc trò chuyện nhóm, và không nhận được tin nhắn trò chuyện nhóm này nữa",
+ "quit_and_delete": "Thoát và xóa",
+ "show_more_member": "Xem thêm thành viên nhóm",
+ "group_invite": "Xác nhận lời mời trò chuyện nhóm",
+ "change_group_owner": "Chuyển quyền quản lý nhóm",
+ "group_setting_tips": "Sau khi kích hoạt, các thành viên nhóm mời bạn bè vào nhóm cần được sự đồng ý của chủ nhóm, đồng thời quét mã QR cũng ngưng sử dụng",
+ "invite_detail": "Chi tiết lời mời",
+ "undefine_name": "Chưa đặt tên",
+ "group_qr_code": "Danh thiếp mã QR nhóm",
+ "group_qr_code_tips": "Mã QR có hiệu lực trong vòng 7 ngày (ngày /s2 tháng /s1), nhập lại sẽ được cập nhật.",
+ "Goddess_heat": "Nhiệt độ nữ thần",
+ "Goddess_heat_tips": "Quà tặng tích lũy",
+ "new_friends": "Bạn mới",
+ "before_three_day": "3 ngày trước",
+ "after_three_day": "3 ngày gần đây ",
+ "group_clean_chat_record": "Xóa nội dung trò chuyện",
+ "check": "Xem thêm",
+ "apply_fro_friends": "Yêu cầu thêm bạn làm bạn bè",
+ "no_vip_cannot_withdraw": "Không phải thành viên không thể rút tiền mặt",
+ "not_true_woman": "Người dùng này chưa được xác thực, hãy cẩn thận với lừa đảo",
+ "join_group": "Tham gia trò chuyện nhóm",
+ "sign_in_apple": "Đăng nhập qua Apple",
+ "only_host": "Thông báo nhóm chỉ chủ nhóm mới có thể chỉnh sửa",
+ "send_gift1": "Bạn đã thưởng cho đối phương /s1 quà tặng",
+ "receive_gift1": "Đối phương thưởng cho bạn /s1 quà tặng",
+ "not_in_group": "Bạn đã không còn trong nhóm",
+ "creating_group": "Đang sáng lập, vui lòng đợi",
+ "article": "Điều",
+ "group_open_verification": "Nhóm này đã bật vào nhóm phải xác thực và chỉ có thể thông qua lời mời mới được tham gia ",
+ "group_memeber": "Thành viên nhóm",
+ "invite_members": "Đã mời /s1 bạn bè tham gia trò chuyện nhóm",
+ "total_members": "Tổng /s1 người",
+ "qr_outtime": "Mã QR đã hết hạn",
+ "no_goupr_info": "Không có thông tin nhóm này",
+ "you_invite": " Bạn đã mời /s1 tham gia trò chuyện nhóm",
+ "invite_you": "Bạn đã được mời vào trò chuyện nhóm này bởi /s1",
+ "invite_someone": "/s1 đã mời /s2 tham gia trò chuyện nhóm",
+ "you": "Bạn",
+ "delete_group": "/s1 đã xóa /s2 khỏi trò chuyện nhóm này",
+ "you_group_owner": " Bạn đã trở thành chủ nhóm mới của nhóm ",
+ "someone_group_owner": "/s1 đã trở thành chủ nhóm mới của nhóm này",
+ "change_group_owner1": " Tên nhóm được đổi thành /s1",
+ "update_group_announce": "Thông báo nhóm đã được cập nhật",
+ "you_qr": "Bạn tham gia trò chuyện nhóm bằng cách quét mã QR",
+ "others_qr": " /s1 Tham gia trò chuyện nhóm bằng cách quét mã QR",
+ "invite_confirm": "\"/s1\" muốn mời /s2 bạn bè vào nhóm trò chuyện \\$ Đi để xác nhận \\$",
+ "want_invite_confirm": " \"/s1\" Muốn mời \"/s2\" để tham gia trò chuyện nhóm",
+ "join_group_confirm": "\"/s1\" Tham gia trò chuyện nhóm Xác nhận",
+ "you_invite_gourp": "Bạn đã được mời vào một cuộc trò chuyện nhóm bởi /s1",
+ "someone_join_group": " \"/s1\"Tham gia trò chuyện nhóm ",
+ "group_setting_tips1": " Chủ nhóm đã bật \"Xác nhận lời mời trò chuyện nhóm \", các thành viên nhóm cần xác nhận từ chủ nhóm để mời bạn bè vào nhóm",
+ "group_setting_tips2": "Chủ nhóm đã khôi phục phương thức tham gia nhóm mặc định",
+ "members_max": " Số thành viên nhóm đã đạt đến giới hạn",
+ "group_max": "Số lượng nhóm đã đạt đến giới hạn",
+ "my_money_info": "Hóa đơn của tôi",
+ "my_left_money": "Số dư của tôi",
+ "money_tips": "H-coin có thể nạp trực tiếp hoặc hối đổi, nhưng không thể rút tiền mặt.",
+ "get_money_detail": "Thu nhập cụ thể",
+ "hibok_money": "Thu nhập Hibox",
+ "charge_h": "Hối đổi H-coin",
+ "charge_tips": "Quy tắc rút tiền",
+ "splash_tips1": "Định vị đa dạng",
+ "splash_tips2": "Robot dịch",
+ "splash_tips3": "APP hẹn hò",
+ "splash_tips_content1": "Nữ thần đa dạng, chọn bạn yêu thích",
+ "splash_tips_content2": "Cùng nhau chat voice",
+ "splash_tips_content3": "Giải quyết vấn đề ngôn ngữ",
+ "splash_go": "Trải nghiệm ngay",
+ "change_h_coin": "Bạn đã thông qua hối đổi thu nhập được /s1H coin",
+ "Representation_succes": "Yêu cầu của bạn đã thành công, và hệ thống đã hoàn tiền",
+ "system_give": "Hệ thống tặng",
+ "exchange_fail": "Yêu cầu rút tiền của bạn thất bại và đã được trả lại",
+ "hibok_exchange": "Thông qua thu nhập Hibox hối đổi được /s1H coin",
+ "bind_code_success": "Liên kết mã mời thành công",
+ "translate_money": "Bạn đã dành /s1H coin để sự dụng người dịch",
+ "system_back": "Hệ thống hủy bỏ trả lại",
+ "you_give": "Bạn thưởng cho đối phương",
+ "you_get": "Đối phương thưởng cho bạn",
+ "enter_num_qian": "Số lượng hối đổi (đơn vị K)",
+ "enter_num_qian1": "Số lượng tiền rút (đơn vị K)",
+ "daily_translate_voucher": "翻译券",
+ "msg_notice":"通知消息",
+ "select_notice_people":"选择提醒的人",
+ "search_phone":"查找手机号",
+ "not_have_user":"用户不存在",
+ "not_add_Myself":"你不能添加自己",
+ "you_are_blaklisted":"对方已拉黑了你",
+ "confrim_recovery":"确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)",
+ "send_to": "發送到"
+}
\ No newline at end of file
diff --git a/i18n/zh-CN.json b/i18n/zh-CN.json
new file mode 100644
index 0000000..da6c991
--- /dev/null
+++ b/i18n/zh-CN.json
@@ -0,0 +1,1164 @@
+{
+ "appName": "Hi公园",
+ "login": "登录",
+ "registration": "注册",
+ "other_login": "其他登录",
+ "account": "账号",
+ "enter_username": "请输入账号",
+ "password": "密码",
+ "enter_password": "输入密码",
+ "forget_password": "忘记密码",
+ "reset_password": "重置密码",
+ "number_registration": "手机号注册",
+ "enter_number": "请输入手机号",
+ "code": "验证码",
+ "enter_code": "请输入收到的验证码",
+ "send_code": "发送验证码",
+ "send_again": "重新发送",
+ "set_password": "设置密码",
+ "password_limit": "密码不少于6位",
+ "set_password2": "请设置登录密码",
+ "next_step": "下一步",
+ "agreed_agreement": "点击进入表示你已阅读并同意《用户协议》",
+ "enter_password2": "请输入登录密码",
+ "reset_now": "立即重置",
+ "choose_gender": "选择性别",
+ "who": "你是...",
+ "determine": "确定",
+ "cannot_modified": "选择性别后无法修改",
+ "tip": "提示",
+ "choose_quit": "你即将完成注册,是否现在退出?",
+ "confirm": "确认",
+ "use": "使用",
+ "cancel": "取消",
+ "close": "关闭",
+ "delete": "删除",
+ "forget_it": "算了",
+ "ok": "好的",
+ "choose_quit2": "注册后将不能修改性别,确定么?",
+ "tip_content": "提示:你不能和同性别用户进行交流",
+ "welcome": "欢迎",
+ "enter_incode": "请填写邀请码",
+ "must_incode": "Hi仅向拥有邀请码的男士提供服务",
+ "your_incode": "你的邀请码",
+ "how_get": "没有邀请码?你可以通过以下方式获取",
+ "method1": "方式1",
+ "free": "免费申请",
+ "apply_now": "马上申请",
+ "check_incode": "查收邀请码",
+ "so_get": "你需要填写一些个人信息,审核通过后回给你发送邀请码",
+ "apply_incode": "申请邀请码",
+ "location": "所在地",
+ "cityname": "你所在的城市名称",
+ "message_channel": "信息渠道",
+ "how_know": "你从哪里知道APP",
+ "wechat_number": "微信号",
+ "your_wechat": "你的微信号",
+ "facebook": "facebook",
+ "your_facebook": "你的脸书",
+ "submit_application": "提交申请",
+ "enter_city": "请输入所在城市",
+ "so_know": "请告诉我们你获取APP的信息渠道",
+ "your_social": "请告诉我们你的社交账号",
+ "receive_incode": "我们将尽快处理你的申请。如果通过审核,你会在消息中心收到我们发放的邀请码",
+ "wait_incode": "邀请码还未发放,申请后请耐心等待!",
+ "successful_application1": "邀请码申请成功!",
+ "application_failed1": "邀请码申请失败!",
+ "successful_copy": "复制成功",
+ "method2": "方式2",
+ "joinvip": "加入会员",
+ "join_now": "立即加入",
+ "joined": "已加入",
+ "join_odds": "加入会员可享受各种特权,包括无需邀请码注册",
+ "not_joinvip": "你还没有加入会员",
+ "join_after": "加入会员后,即可不需要邀请码完成注册",
+ "incode_passed": "邀请码验证通过",
+ "welcome_join": "欢迎加入!请勿把你的账号泄露给他人,一经发现登录异常,账户会被自动冻结。",
+ "member_centre": "会员中心",
+ "members_privilege": "会员特权",
+ "see_more": "看的更多",
+ "unlimited_see": "每天不限次数查看用户",
+ "see_cheaper": "看的更省",
+ "free10": "每天/s1次免费机会查看付费相册或者社交账号",
+ "see_longer": "看的更久",
+ "towto6": "查看阅后即焚照片的时间从2秒提升到/s1秒",
+ "see_better": "看的更爽",
+ "free_release": "免费发布约会广播",
+ "choose_price": "选择套餐",
+ "pay_method": "支付方式",
+ "pay_amount": "支付金额",
+ "not_enough": "钱包余额不足",
+ "confirm_pay": "确认支付",
+ "complete_material": "完善资料",
+ "basic_information": "基本资料",
+ "upload_avatar": "上传头像",
+ "choose": "请选择",
+ "fill_out": "请填写",
+ "choose_multiple": "可以多选",
+ "optional": "选填",
+ "least": "最少填写/s1个",
+ "introduce_yourself": "介绍一下自己",
+ "most": "最多选择/s1个",
+ "nickname": "昵称",
+ "only1_8": "昵称只能1-20个字符",
+ "Resident_city": "当前城市",
+ "Please_select_a_resident_city": "请选择当前城市",
+ "City1": "芹苴",
+ "City2": "岘港",
+ "City3": "海防",
+ "City4": "河内",
+ "City5": "胡志明",
+ "City6": "安江",
+ "City7": "北江",
+ "City8": "北件",
+ "City9": "薄辽",
+ "City10": "北宁",
+ "City11": "巴地头顿",
+ "City12": "槟椥",
+ "City13": "平定",
+ "City14": "平阳",
+ "City15": "平福",
+ "City16": "平顺",
+ "City17": "金瓯",
+ "City18": "高平",
+ "City19": "得乐",
+ "City20": "得农",
+ "City21": "奠边",
+ "City22": "同奈",
+ "City23": "同塔",
+ "City24": "嘉莱",
+ "City25": "河江",
+ "City26": "海阳",
+ "City27": "河南",
+ "City28": "河静",
+ "City29": "和平",
+ "City30": "后江",
+ "City31": "兴安",
+ "City32": "庆和",
+ "City33": "坚江",
+ "City34": "昆嵩",
+ "City35": "莱州",
+ "City36": "林同",
+ "City37": "谅山",
+ "City38": "老街",
+ "City39": "隆安",
+ "City40": "乂安",
+ "City41": "宁平",
+ "City42": "宁顺",
+ "City43": "富寿",
+ "City44": "富安",
+ "City45": "广平",
+ "City46": "广南",
+ "City47": "广义",
+ "City48": "广宁",
+ "City49": "广治",
+ "City50": "朔庄",
+ "City51": "山罗",
+ "City52": "西宁",
+ "City53": "太平",
+ "City54": "太原",
+ "City55": "清化",
+ "City56": "承天顺化",
+ "City57": "前江",
+ "City58": "茶荣",
+ "City59": "宣光",
+ "City60": "永隆",
+ "City61": "永富",
+ "City62": "安沛",
+ "City63": "南定",
+ "birthday": "生日",
+ "choose_birthday": "请选择生日",
+ "year": "年",
+ "month": "月",
+ "day": "日",
+ "hour": "时",
+ "minute": "分",
+ "second": "秒",
+ "just": "刚刚",
+ "minute_ago": "/s1分钟前",
+ "hour_ago": "/s1小时前",
+ "day_ago": "/s1天前",
+ "week_ago": "/s1周前",
+ "month_ago": "/s1月前",
+ "morning": "上午",
+ "noon": "中午",
+ "afternoon": "下午",
+ "night": "晚上",
+ "all_day": "一整天",
+ "yesterday": "昨天",
+ "two_yesterday": "前天",
+ "overnight": "通宵",
+ "one": "个",
+ "ten": "十",
+ "hundred": "百",
+ "thousand": "千",
+ "ten_thousand": "万",
+ "aries": "白羊座",
+ "taurus": "金牛座",
+ "gemini": "双子座",
+ "cancer": "巨蟹座",
+ "leo": "狮子座",
+ "virgo": "处女座",
+ "libra": "天秤座",
+ "scorpio": "天蝎座",
+ "sagittarius": "射手座",
+ "capricorn": "摩羯座",
+ "aquarius": "水瓶座",
+ "pisces": "双鱼座",
+ "monday": "星期一",
+ "tuesday": "星期二",
+ "wednesday": "星期三",
+ "thursday": "星期四",
+ "friday": "星期五",
+ "saturday": "星期六",
+ "sunday": "星期天",
+ "job": "职业",
+ "choose_career": "请选择职业",
+ "career1": "信息技术",
+ "career2": "互联网",
+ "career3": "IT",
+ "career4": "电信运营",
+ "career5": "网络游戏",
+ "career6": "金融保险",
+ "career7": "投资",
+ "career8": "股票基金",
+ "career9": "保险",
+ "career10": "银行",
+ "career11": "信托担保",
+ "career12": "商业服务",
+ "career13": "咨询",
+ "career14": "个体经营",
+ "career15": "美容美发",
+ "career16": "旅游",
+ "career17": "酒店餐饮",
+ "career18": "休闲娱乐",
+ "career19": "贸易",
+ "career20": "汽车",
+ "career21": "房地产",
+ "career22": "物业管理",
+ "career23": "装修装潢",
+ "career24": "侦探",
+ "career25": "工程制造",
+ "career26": "建筑",
+ "career27": "土木工程",
+ "career28": "机械制造",
+ "career29": "电子",
+ "career30": "生物医学",
+ "career31": "食品",
+ "career32": "服装",
+ "career33": "能源",
+ "career34": "交通运输",
+ "career35": "航空",
+ "career36": "铁路",
+ "career37": "航运船舶",
+ "career38": "公共交通",
+ "career39": "物流运输",
+ "career40": "文化传媒",
+ "career41": "媒体出版",
+ "career42": "设计",
+ "career43": "文化传播",
+ "career44": "广告创意",
+ "career45": "动漫",
+ "career46": "公关会展",
+ "career47": "摄影",
+ "career48": "娱乐体育",
+ "career49": "影视",
+ "career50": "运动体育",
+ "career51": "音乐",
+ "career52": "模特",
+ "career53": "公共事业",
+ "career54": "医疗",
+ "career55": "法律",
+ "career56": "教育",
+ "career57": "政府机构",
+ "career58": "公益",
+ "career59": "学生",
+ "career60": "无",
+ "program": "节目",
+ "select_program": "请选择国籍",
+ "healthy_exercise": "健康运动",
+ "night_party": "夜蒲聚会",
+ "gourmet_party": "我是吃货",
+ "watch_movie": "看电影",
+ "play_games": "玩游戏",
+ "travel_together": "结伴旅行",
+ "voice_chat": "连麦聊天",
+ "other": "其他",
+ "expect_lover": "期望对象",
+ "choose_lover": "请选择期望对象",
+ "beautiful": "看脸",
+ "rich": "土豪",
+ "care_me": "关爱我",
+ "look_feeling": "看感觉",
+ "doesnt_matter": "无所谓",
+ "least_account": "请至少填写一种社交账号",
+ "hide_account1": "我的用户资料隐藏社交账号",
+ "more_information": "更多信息",
+ "height": "身高",
+ "weight": "体重",
+ "not_show": "不显示",
+ "self_introduction": "个人介绍",
+ "registration_success1": "注册成功",
+ "exit": "确定退出么",
+ "exit_registration": "你还未完善个人信息,现在退出下次进入请用已注册账号直接登录",
+ "cant_see": "男士无法查看其他男士详情",
+ "cant_see2": "女士无法查看其他女士详情",
+ "see_one": "你今天还能查看/s1位女士",
+ "only_see": "非会员用户每天只能查看15位女士",
+ "continue_see": "继续查看",
+ "user_frozen": "用户已冻结",
+ "search_user": "请输入昵称/职业进行搜索",
+ "nearby": "附近",
+ "member": "会员",
+ "new_registration": "新注册",
+ "authenticate": "认证",
+ "first_online": "在线",
+ "not_positioned": "未开启定位,无法计算与其他用户距离",
+ "unknown": "未知",
+ "secrecy": "保密",
+ "collection": "收藏",
+ "cancel_collection": "取消收藏",
+ "canceled_collection": "已取消收藏",
+ "like": "加入喜欢",
+ "added_like": "已加入喜欢",
+ "canceled_like": "已取消喜欢",
+ "blacklist": "拉黑",
+ "blacklist_choose": "你们将无法再看到对方和对方的动态,确定吗",
+ "blacklisted": "已加入黑名单",
+ "reject_message": "你已拉黑对方并拒收消息",
+ "remove_blacklist": "移除黑名单",
+ "blacklist_removed": "已移除黑名单",
+ "receive_message": "你将对方移除黑名单并取消拒收消息",
+ "online": "在线",
+ "paid_photo": "付费相册",
+ "application_view": "申请浏览",
+ "passed": "已通过",
+ "park": "公园",
+ "radio": "电台",
+ "news": "消息",
+ "me": "我",
+ "more_operations": "更多操作",
+ "anonymous_report": "匿名举报",
+ "certified_video": "认证视频",
+ "passed_video": "她已通过视频认证真实性",
+ "not_video": "她还没认证身份真实性",
+ "her_appointment": "她正在发起约会哦",
+ "pay_join": "他通过付费加入",
+ "passed_review": "他通过了身份安全审核",
+ "invited_user": "他通过资深用户/s1赠送的邀请码加入",
+ "his_appointment": "他正在发起约会哦",
+ "her_dynamics": "她的动态",
+ "his_dynamics": "他的动态",
+ "low_key": "她非常低调",
+ "low_key2": "他非常低调",
+ "her_photo": "她的相册",
+ "his_photo": "他的相册",
+ "set_lock": "他设置了相册锁",
+ "set_lock2": "她设置了相册锁",
+ "free_unlock": "解锁相册(/s1),会员免费",
+ "unlock_user": "解锁/s1的相册",
+ "pay_unlock": "付费解锁(/s1H币)",
+ "become_member": "成为会员,免费解锁",
+ "consumption_once": "是否使用1次机会解锁/s1的相册",
+ "remaining_once": "(你今天还有/s1次机会)",
+ "no_times": "你今天的免费机会已用完,是否赠送/s1解锁/s2的全部资料",
+ "pay": "支付",
+ "view_user": "他设置了限制,查看资料需要请求他的同意",
+ "view_user2": "她设置了限制,查看资料需要请求她的同意",
+ "need_photo": "申请查看需给对方发送一张你的照片。放心,你的照片会在对方长按屏幕查看的2秒后焚毁",
+ "choose_photo": "选择照片",
+ "send_application": "已发送申请,对方确认后你会收到消息提醒",
+ "not_authenticate": "你还没进行认证",
+ "after_authenticate": "认证你的真实性后,才能与他人互动",
+ "authenticate_now": "马上认证",
+ "destroy_after": "阅后即焚",
+ "destroyed": "已焚毁",
+ "red_photo1": "阅后即焚的红包照片",
+ "ask_me": "请通过私聊向我索取",
+ "filled_in": "已填写,点击查看",
+ "unlock_information": "解锁全部资料",
+ "unlock_choose": "使用1次免费解锁",
+ "your_evaluation": "你的真实评价",
+ "her_evaluation": "她的真实评价",
+ "his_evaluation": "他的真实评价",
+ "evaluate": "评价",
+ "friendly": "友好",
+ "interesting": "有趣",
+ "readily": "爽快",
+ "patient": "耐心",
+ "indifferent": "高冷",
+ "bad_temper": "爆脾气",
+ "courtesy": "礼貌",
+ "generous": "大方",
+ "lie": "口嗨",
+ "unfriendly": "不友好",
+ "anonymous_evaluation": "匿名评价",
+ "cant_evaluate": "你还没约过她,无法评价",
+ "cant_evaluate2": "他还没约过你,无法评价",
+ "bad_evaluate": "请提供相关截图,以便我们跟进核实",
+ "submit": "提交",
+ "evaluation_success": "评价成功",
+ "private_chat": "私聊",
+ "close_reminder": "关闭消息提醒",
+ "closed_reminder": "关闭消息提醒成功",
+ "open_reminder": "开启消息提醒",
+ "opened_reminder": "开启消息提醒成功",
+ "her_account": "她的社交账号",
+ "his_account": "他的社交账号",
+ "copy": "复制",
+ "send_account": "发送我的社交账号给她",
+ "enter_account": "输入你的社交账号",
+ "for_example": "比如:微信号abc",
+ "sent_she": "发送给她",
+ "chat": "连麦",
+ "cantt_voice": "对方关闭了连麦功能",
+ "authentication_voice": "认证你的真实性后,才能主动连麦",
+ "requesting_voice": "正在请求连麦",
+ "waitting_answer": "正在等待接听",
+ "answer": "接听",
+ "hang_up": "挂断",
+ "chatting": "连麦中",
+ "handsfree": "免提",
+ "giving_gift": "打赏",
+ "give_success": "打赏成功",
+ "others_gift": "对方已打赏",
+ "given_gift": "你已打赏价值/s1H币的礼物",
+ "earned_gift": "你已获赏/s1H币",
+ "available_balance": "可用余额/s1",
+ "recharge": "充值",
+ "give": "赠送",
+ "balance_insufficien": "抱歉,你的余额不足了",
+ "first_recharge": "请充值后再送礼物哦!",
+ "give_coin": "本次连麦打赏/s1H币",
+ "get_coin": "本次连麦获赏/s1H币",
+ "give_get": "本次连麦打赏/s1H币,获赏了/s2H币",
+ "chat_over": "连麦已结束,时长/s1",
+ "message_center": "消息中心",
+ "can_chat": "你可以在对方的用户详情页发起私聊",
+ "text_chat": "聊天",
+ "system_information": "系统消息",
+ "system_notification": "系统通知",
+ "report_failure": "你举报用户/s1的情况不属实,请提供更有效的证据后再次举报。谢谢!",
+ "report_success": "你举报用户/s1的情况属实,系统已对该用户进行处理",
+ "successful_application": "邀请码申请成功!邀请码【/s1】(点击可复制)",
+ "successful_application2": "邀请码申请成功,感谢你介绍靠谱的朋友!邀请码【/s1】(点击可复制)",
+ "application_failed": "邀请码申请失败!很遗憾您的申请未能通过审核,请填写真实信息将有效的提高审核通过率",
+ "important_notice": "【重要通知】:",
+ "authentication_failed": "你的认证资料不符合要求,请修改后重新提交。",
+ "request1": "1.请根据认证要求拍摄认证视频",
+ "request2": "2.请在相册上传五官清晰的正脸本人照片",
+ "successful_authentication": "恭喜,你的认证申请已通过审核",
+ "re_upload": "你新上传的照片没有通过审核,请根据要求重新上传",
+ "upload_success": "恭喜,你新上传的照片已成功通过审核",
+ "caveat": "您的约会报名因违规被删除,多次违规或情节严重系统将对您账号进行限制甚至封号,请遵守谨记,谢谢配合",
+ "caveat2": "您的评论因违规被删除,多次违规或情节严重系统将对您账号进行限制甚至封号,请遵守谨记,谢谢配合",
+ "radio_message": "电台消息",
+ "no_message": "暂时没有此类消息",
+ "dating_news": "/s1在/s2发布了一条约会消息,点击查看",
+ "go_see": "去看看",
+ "thumbs_up": "/s1赞了你的动态",
+ "thumbs_up2": "/s1赞了你的约会节目",
+ "comment1": "/s1评论了你的动态",
+ "comment2": "/s1评论了你的约会节目",
+ "replied_comment": "/s1回复了你的评论",
+ "signed_up": "/s1报名了你的约会节目",
+ "favorite_user": "你喜欢的用户/s1发布了一条约会,点击查看",
+ "favorite_user2": "你喜欢的用户/s1发布了一条动态,点击查看",
+ "wallet_reminder": "钱包提醒",
+ "paid_you": "/s1付费了(/s2H币)查看了你的红包照片",
+ "paid_you2": "/s1付费了(/s2H币)查看了你的相册",
+ "paid_you3": "/s1付费解锁了你的全部资料",
+ "view_application": "查看申请",
+ "view_application2": "/s1请求查看你的详情页",
+ "aging": "允许(有效期15天)",
+ "refuse": "拒绝",
+ "passed_request": "已通过请求",
+ "l15_days": "/s1已通过你的查看申请,有效期15天",
+ "evaluation_notice": "评价通知",
+ "rate_her": "已经约出/s1了吗?赶快评价一下她吧",
+ "received_evaluation": "联系过你的女士用户(匿名)对你进行了评价:/s1",
+ "received_evaluation2": "联系过你的男士用户(匿名)对你进行了评价:/s1",
+ "application_appeal": "如果评价不属实,你可申请上述,我们会进行核实",
+ "appeal": "我要上诉",
+ "appealed": "已申请上诉",
+ "waiting_results": "我们会尽快核实情况,并通过站内信告诉你处理结果",
+ "successful_appeal": "你上诉的评价:/s1上诉成功,我们将为你撤销此评价。",
+ "social_account": "社交账号",
+ "get_account": "/s1向你发送了他的社交账号",
+ "edit_information": "编辑资料",
+ "save": "保存",
+ "passed_verification1": "你通过了身份安全核实",
+ "by_code": "你通过资深用户/s1的邀请码加入",
+ "by_paying": "你通过付费加入",
+ "passed_verification": "你已通过视频认证身份真实性",
+ "not_certified": "你还没有认证身份真实性",
+ "verificating": "我们正在认证你的真实性",
+ "real_girl": "经过认证的女生更受欢迎哦",
+ "certificating": "认证中",
+ "re_upload2": "待重新上传视频",
+ "update_certification": "更新认证",
+ "enjoy_privileges": "升级会员尊享特权",
+ "expires": "/s1到期",
+ "wallet": "钱包",
+ "setting": "隐私",
+ "my_dynamic": "我的动态",
+ "my_album": "我的相册",
+ "first_photo": "上传我的第一张照片",
+ "no_photo": "有照片才能吸引男士哦",
+ "upload_photos": "上传照片",
+ "upload_video": "上传视频",
+ "upload": "上传照片",
+ "set_photo": "设置红包照片",
+ "photo_order": "长按拖动可对照片排序",
+ "my_evaluation": "我的评价",
+ "my_show": "我的节目",
+ "i_like": "我喜欢的",
+ "your_favorite": "你喜欢的女士会显示这里",
+ "your_favorite2": "你喜欢的男士会显示这里",
+ "no_data": "没有数据",
+ "historical_visitor": "历史访客",
+ "visit_you": "有/s1个人看过你",
+ "visit_photo": "已有/s1个人焚毁了你的照片",
+ "recovery_photo": "一键恢复",
+ "setting2": "设置",
+ "apply_code": "帮朋友申请邀请码",
+ "issue_choose": "申请邀请码是免费的,我们会根据你的历史消费来评估是否发放邀请码。为维持公园的氛围,请一定把邀请码赠与靠谱的朋友",
+ "successfully_submit": "成功递交申请",
+ "share_app": "分享APP给朋友",
+ "need_help": "有问题需要帮助",
+ "need_help2": "联系客服",
+ "need_help3": "为了提高服务效率,如果下面有您的问题,请直接回复序号数字哦!",
+ "question1": "【1】账号被冻结是什么原因?",
+ "answer1": "出现下述任意一种情况,账号都会被冻结:①骗子②中介③骚扰广告④多人举报⑤已有其他账号⑥多次发布违规电台广播无视警告⑦用户自己要求注销",
+ "question2": "【2】钱包现金什么时候才能提现?",
+ "answer2": "所有收益会直接进入到钱包,提现需要三天(按收取时间计算开始),三天后收取的金额将会进入到钱包,金额>=10元即可提现",
+ "question3": "【3】我发出的红包怎么没有显示?",
+ "answer3": "可能是网络原因导致。放心,这种情况对方无法领取你的红包,红包将在24小时后自动退还到你的支付渠道",
+ "question4": "【4】提现需要多久到账?",
+ "answer4": "提交提现申请后两个工作日内到账。温馨提示:提现时请确认账号无误!",
+ "question5": "【5】如何匿名举报其他用户/电台广播内容?",
+ "answer5": "进入对方详情页或选择某条电台广播,点击右上角选择【匿名举报】,请填写相关举报信息即可对其发起举报。",
+ "question6": "【6】如何成为认证用户?",
+ "answer6": "认证通过需满足以下要求:①个人资料填写有效社交账号②相册至少上传一张本人清晰的正脸照③在认证页面查看验证码,在纸上写上昵称+验证码④拿着这张纸,与你的正脸合拍一段视频,点击上传认证视频",
+ "question7": "【7】认证的视频可以不公开吗?",
+ "answer7": "可以在设置里选择是否公开:用户中心-点击认证视频-左下角'将认证视频显示在我的详情页'",
+ "question8": "【8】如何避免认证被取消?",
+ "answer8": "相册至少有一张被标记为本人的照片",
+ "question9": "【9】电台广播被删除是什么原因?",
+ "answer9": "电台广播不能发布敏感图,敏感词,包括但不限于暗示或明示性词语,不能发布个人信息(包括头像,昵称,联系方式),违规电台广播将被删除",
+ "question10": "【10】如何注销账号?",
+ "answer10": "注销账号将无法登录APP,以后再想使用服务则需要重新注册,请谨慎考虑。如果你仍然决定注销账号,请回复序号【12】联系客服",
+ "question11": "【11】忘记密码怎么办?",
+ "answer11": "通过手机号码注册或者绑定手机号码的用户,可以通过登录页面右上角的“忘记密码”功能重置密码。未绑定用户请先绑定手机号,再设置新的登录密码",
+ "question12": "【12】其他问题/转接人工客服",
+ "answer12": "你好,请问有什么问题可以帮你?请描述你的问题(客服上班时间为每天8:00-次日02:00,由于咨询人数较多,你可能需要等待回复)",
+ "certification_center": "认证中心",
+ "for_example2": "认证视频拍摄方式示例",
+ "certification_conditions": "认证条件",
+ "conditions1": "1.个人形象良好",
+ "conditions2": "2.相册中至少上传一张本人照片",
+ "verification_method": "认证方式",
+ "method3": "1.取一张纸,写上你的昵称和以下验证码:",
+ "method4": "2.拿着这张纸,与你的正脸合拍一段视频(3~15秒)",
+ "upload_video2": "上传认证视频",
+ "after_authentication": "认证成功后,你的头像会带有real标志",
+ "show_video": "将认证视频显示在我的详情页",
+ "uploaded_video": "已上传的认证视频",
+ "under_review": "审核中(24小时内)",
+ "certification_status": "认证状态",
+ "certified": "你已通过认证",
+ "wait_resubmitted": "认证待重提",
+ "reason_failure": "您的认证视频不符合要求,原因是:",
+ "claim": "请根据认证要求拍摄认证视频",
+ "claim2": "请在相册上传清晰展示五官的正脸本人照片",
+ "re_upload_video": "重新上传认证视频",
+ "update_video": "更新上传认证视频",
+ "mask_coin": "H币",
+ "get_way": "你可以通过充值或者开麦等途径获得H币。",
+ "coin_use": "H币可用于使用连麦服务,并且在连麦时进行打赏。",
+ "coin_total": "H币总额",
+ "can_redeemed": "可兑消",
+ "who_account": "/s1账号",
+ "bind_account": "绑定/s1账号",
+ "your_account": "你的/s1账号",
+ "get_coin2": "你通过充值获得了/s1H币",
+ "viewed_your": "/s1查看了你的社交账号",
+ "give_gift": "/s1赠送了礼物:1个/s2",
+ "add_coin": "+/s1H币",
+ "give_one": "你赠送了1个/s1给/s2",
+ "less_coin": "-/s1H币",
+ "exchange_cash": "提现",
+ "withdrawal_application": "提现申请",
+ "redeem_choose": "你有/s1枚H币可兑换成/s2,兑换后剩余/s3枚H币。确定申请兑换吗?",
+ "application_submitted": "提现申请已提交",
+ "working_days": "我们将在2个工作日内处理,有疑问可咨询客服",
+ "cash": "现金",
+ "handling_fee": "每当你再聊天页面收到红包,红包金额都会进入这里。金额进账后3天内没人举报你即可提现,提现将收取5%手续费",
+ "total_account": "账户总额",
+ "cannot_redeemed": "金额不足,无法兑消",
+ "successful_redemption": "兑消成功",
+ "redeem_choose2": "你的账户总额为/s1元,本次可提现/s2元,确定申请提现吗?",
+ "personal_details": "个人详情",
+ "public": "公开(推荐)",
+ "paid_album": "相册付费查看",
+ "must_pay": "他人必须付费才能查看你的相册,费用由你定,这可能会降低你的访问量",
+ "set_amount1": "设置查看金额",
+ "first_upload": "请先上传照片,再设置付费相册",
+ "need_permission": "查看前需通过我验证",
+ "permission_choose": "他人必须发照片让你验证身份后才能浏览你的主页,确定吗?",
+ "hide_me": "在附近的人列表隐藏我",
+ "hide_distance": "对他人隐藏我的距离",
+ "hide_account": "对他人隐藏我的社交账号",
+ "chat_setting": "连麦控制",
+ "chat_me": "允许有私聊权限的人对我发起连麦",
+ "successfully_saved": "保存成功",
+ "on_dynamic": "你还没有发布过动态",
+ "release_dynamics": "发布动态",
+ "dynamic_details": "动态详情",
+ "release": "发布",
+ "i_posted": "我发布的",
+ "delete_dynamic": "删除动态",
+ "delete_choose": "确定要删除这条动态吗?",
+ "posted_on": "发布于/s1",
+ "thumbs_up3": "赞",
+ "already_praised": "已经赞过了",
+ "comment": "评论",
+ "send": "发送",
+ "comment_closed": "评论已关闭",
+ "your_comment": "只有发布者能看见你的评论",
+ "everyone_comment": "大家都能看见你的评论",
+ "prohibit_comments": "禁止评论",
+ "comments_disabled": "已禁止评论",
+ "open_comments": "开放评论",
+ "already_open": "已开放评论",
+ "reply": "回复",
+ "report": "举报",
+ "report_choose": "确定举报这条评论吗?",
+ "successful_report": "举报成功,我们会尽快处理",
+ "successfully_deleted": "删除成功",
+ "please_civilization": "谈吐文明的人更受欢迎,请勿发布低俗、色情交易、或曝光他人隐私的内容",
+ "same_sex": "对同性别用户隐藏",
+ "member_free": "会员免费,非会员需/s1H币",
+ "certified_free": "已认证女士免费3次,之后需要支付/s1H币",
+ "enter_something": "请输入文字内容或选择图片",
+ "raid_release": "付费发布(/s1H币)",
+ "become_member2": "成为会员,免费发布",
+ "now_certification": "马上认证,免费发布",
+ "successfully_released": "发布成功",
+ "no_program": "你还没有发布过节目",
+ "program_details": "节目详情",
+ "program_theme": "节目主题",
+ "click_select": "点击选择",
+ "city": "城市",
+ "select_city": "选择城市",
+ "time": "时间",
+ "select_date": "选择日期",
+ "select_time": "选择时间",
+ "unlimited_time": "不限时间",
+ "supplementary_explanation": "补充说明",
+ "image": "配图",
+ "delete_program": "删除节目",
+ "delete_choose2": "确定要删除这条节目吗?",
+ "please_choose": "请选择节目主题",
+ "please_choose2": "请选择期望对象",
+ "please_choose3": "请选择城市",
+ "please_choose4": "请选择日期",
+ "please_choose5": "请选择时间",
+ "release_program": "发布节目",
+ "sign_up": "报名",
+ "end_registration": "结束报名",
+ "end_choose": "确定结束约会吗?",
+ "contact_her": "联系她",
+ "talk_him": "私聊他",
+ "report_choose2": "确定举报这条报名信息吗?",
+ "release_time": "发布时间",
+ "activity_time": "活动时间",
+ "any_sex": "不限性别",
+ "look_women": "只看女士",
+ "look_men": "只看男士",
+ "unlimited_area": "不限地区",
+ "program_deleted": "该节目已删除",
+ "cant_comment": "非会员不能评论",
+ "sign_up2": "我要报名",
+ "need_photo2": "报名需要发送你的正脸照片(只有对方能看到)",
+ "registration_success": "报名成功,如果对方觉得合适将会联系你",
+ "has_ended": "已结束",
+ "men_cant": "男士不能报名男士的节目",
+ "ms_cant": "女士不能报名女士的节目",
+ "men_cant2": "男士不能评论男士的节目",
+ "ms_cant2": "女士不能评论女士的节目",
+ "message_push": "消息推送、修改密码",
+ "phone_number": "手机号码",
+ "bind_phone1": "绑定手机号",
+ "more_safer": "绑定手机号,让你的账户更安全",
+ "modify_choose": "你想修改绑定的手机号码吗?",
+ "change_password": "修改密码",
+ "first_bind": "用户需要先绑定手机号码才可以设置登录密码",
+ "old_password": "原密码",
+ "current_password": "请输入当前登录密码",
+ "new_password": "新密码",
+ "set_new": "请设置新密码,不少于6位",
+ "clear_cache": "清除图片缓存",
+ "cleared_successfully": "清除成功",
+ "user_agreement1": "用户使用协议",
+ "sign_out": "退出登录",
+ "out_choose": "确定退出账号么?",
+ "push_settings": "推送设置",
+ "permission_denied": "权限已被拒绝",
+ "push_setting2": "消息推送设置",
+ "private_chat2": "私聊消息",
+ "new_date": "有新的约会",
+ "passed_request2": "有女士通过了我的查看请求",
+ "men_view": "有男士申请查看我的资料页",
+ "men_view2": "有男士查看我的社交账号",
+ "men_view3": "有男士查看我的红包照片",
+ "men_view4": "有已查看资料的男士给我发送社交账号",
+ "applied_successfully": "邀请码申请成功",
+ "after_open": "打开后将推送相应消息类型",
+ "if_something": "如果你在最近3天曾向她/他支付过费用,我们核实举报后,系统将自动向你退回消费金额",
+ "advertise": "发广告",
+ "false_photo": "虚假照片",
+ "erotic_vulgarity": "色情低俗",
+ "harassment": "骚扰谩骂",
+ "she_liar": "她是骗子",
+ "he_liar": "他是骗子",
+ "provide_screenshots": "请提供相关截图,以便我们跟进核实",
+ "describe_details": "请描述详情(100字内)",
+ "report_reason": "请选择举报原因",
+ "report_success2": "举报成功",
+ "successfully_modified": "修改成功",
+ "boy": "男生",
+ "girl": "女生",
+ "already_applied": "已申请",
+ "view_registration": "查看报名",
+ "expand": "展开",
+ "collapse": "收起",
+ "application_notice": "申请通知",
+ "agrees_application": "有用户同意你的申请",
+ "red_photo": "红包照片",
+ "dont": "请勿上传非法裸露低俗的照片/视频,严重者将封号",
+ "current_version": "当前版本",
+ "bank_card": "绑定银行卡",
+ "choose_bank": "请选择开户行",
+ "bank_number": "请输入银行卡号",
+ "id_number": "请输入证件号",
+ "name": "姓名",
+ "bank_number2": "银行卡号",
+ "license_number": "证件号",
+ "bind_phone": "绑定手机号",
+ "his_homepage": "他的主页",
+ "her_homepage": "她的主页",
+ "wechat_pay": "微信支付",
+ "facebook_pay": "facebook支付",
+ "google_pay": "google支付",
+ "payment_successful": "支付成功",
+ "set_amount": "设置提款金额",
+ "enter_amount": "请输入H币个数",
+ "can_withdraw": "可提现",
+ "language_set": "语言设置",
+ "user_agreement": "用户协议",
+ "renewal_fee": "续费",
+ "open_immediately": "立即开通",
+ "total": "总计",
+ "half_month": "半个月",
+ "month2": "/s1个月",
+ "cancel_shield": "取消屏蔽",
+ "blacklist2": "黑名单",
+ "longTime": "(会员可延长时间达6秒)",
+ "longClick": "按住屏幕查看",
+ "stop_program": "请先结束正在生效的节目",
+ "not_love": "男士不能收藏男士",
+ "not_love2": "女士不能收藏女士",
+ "women_free": "女神可以免费发布",
+ "not_up_man": "他还没有上传照片",
+ "not_up_women": "她还没有上传照片",
+ "not_illage": "请勿通过平台进行不法交易,如被举报核实将作封号处理",
+ "alreay_join": "已报名",
+ "sure_delete": "确定删除这张照片吗",
+ "white_now": "马上填写",
+ "personal": "你还没有填写个人介绍,吸引人的个人介绍对约会成功影响很大哦",
+ "success": "成功",
+ "fail": "失败",
+ "moneyPageTip": "只有认证用户才可以设置红包照片",
+ "alreadyJoin": "你已报名,如果对方觉得合适将会联系你",
+ "waring": "违规警告",
+ "userPravicy": "尊重用户隐私,请勿截图。如有下次,将禁止你查看其他用户照片",
+ "outTime": "约会时间已经过期了,请修改",
+ "reviewing": "审核中",
+ "reviewed": "审核成功",
+ "reviewedFail": "审核失败",
+ "needCard": "用户需要先绑定银行卡才可以提现",
+ "women_not_d": "女士不能评论女士的动态",
+ "man_not_d": "男士不能评论男士的动态",
+ "have_picture": "有照片才能吸引女士哦",
+ "up_cancle": "上滑取消发送",
+ "msg_not": "消息不能为空",
+ "need_record": "此功能需要授予录音权限",
+ "downloading_video": "正在下载视频文件",
+ "reinput": "请重新输入问题序号",
+ "dy_delete": "你的动态被用户匿名举报,经系统核实已将该动态删除,请勿再进行违规操作",
+ "pro_delete": "你的节目被用户匿名举报,经系统核实已将该节目删除,请勿再进行违规操作",
+ "con_delete": "你的评论被用户匿名举报,经系统核实已将该评论删除,请勿再进行违规操作",
+ "coin_returen": "经匿名用户举报,系统核实你近期存在违规行为,已将你近期收到H币进行返还。如有下次,将进行账号冻结",
+ "voicing": "通话中禁止出现色情淫秽等违法行为,一经发现将做封号处理",
+ "help": "客服",
+ "translate_on": "人工翻译开启",
+ "translate_off": "人工翻译关闭",
+ "becomeSvip": "消耗/s1 H币将续费为SVIP",
+ "need_svip": "svip权限可开启",
+ "cannot_vip": "SVIP无法续费为VIP",
+ "offline": "您已离线,无法发送和接收消息",
+ "otherLogin": "账号在其他设备登录,您已离线",
+ "no_new": "暂时没有新消息",
+ "over": "翻译完毕",
+ "bad_ev": "确定要对此条翻译进行差评么?",
+ "right5": "聊的更爽",
+ "right6": "用的更爽",
+ "man_vi": "小哥哥",
+ "women_vi": "小姐姐",
+ "kf_tips": "为了提高服务效率,如果下面有您的问题,请直接回复序号数字哦!",
+ "rejected": "已拒绝",
+ "buy_vip": "你消费了/s1H币购买会员",
+ "buy_program": "你消费了/s1H币发布动态节目",
+ "del_add_money": "你的H币提现申请已处理,已转账/s1到你的银行卡账号,请查收",
+ "adding_money": "你申请提现的/s1H币正在审批中",
+ "free_translate": "免费享受翻译专员实时翻译",
+ "personalTraff": "专享客服为你服务",
+ "ManTranslate": "人工翻译中...",
+ "robotTranslate": "机器翻译中...",
+ "translated": "人工翻译完毕",
+ "delete_progarm": "健康交流,请勿广播低俗内容,一经发现将作删除处理",
+ "open_location": "定位权限未开启",
+ "get_location": "请在手机设置中开启定位权限以获得其他用户距离",
+ "confirm_exit": "再按一次退出",
+ "free_program": "每天/s1次机会发布免费广播",
+ "picture": "图片",
+ "camera": "相机",
+ "video": "视频",
+ "red_money": "红包",
+ "stick": "粘贴",
+ "press_say": "按住说话",
+ "get_money": "/s1领取了你的红包",
+ "you_get_money": "你领取了/s1的红包",
+ "ones_money": "/s1的红包",
+ "money_over": "红包已过期",
+ "downloading_fail": "下载文件失败",
+ "downloading": "正在下载视频文件",
+ "back_money": "未领取的红包,将于24小时后发起退款",
+ "no_money": "红包不存在",
+ "already_money": "红包已领取",
+ "back_user": "已过期,已退到账户",
+ "waiting_user": "等待对方领取",
+ "other_get": "对方已领取",
+ "little": "小小意思,拿去浪吧",
+ "put_money": "塞钱进红包",
+ "mount": "金额",
+ "over_time": "已过期",
+ "has_get": "已领取",
+ "no_gift": "暂时没有礼物",
+ "sent_gift": "打赏礼物",
+ "fill_tips": "填写成功可以获得/s1H币,绑定后无法修改",
+ "bind_code": "绑定邀请码",
+ "invide_code": "邀请码",
+ "confirm_delete": "确认删除",
+ "has_eva": "您已经评价过了",
+ "open": "开",
+ "voice": "语音",
+ "release_send": "松开发送",
+ "time_little": "录音时间过短",
+ "not_online": "对方不在线,无法连麦",
+ "give_red_money": "你给/s1发送了/s2H币的红包",
+ "get_red_money": "你领取了/s1的/s2H币的红包",
+ "give_other_money": "你打赏了/s1/s2H币",
+ "get_other_money": "你获得了/s1的/s2H币的打赏",
+ "svip": "超级会员",
+ "recommend": "推荐",
+ "paid_you4": "你付费了(/s2H币)查看/s1的红包照片",
+ "paid_you5": "你付费了(/s2H币)查看/s1的相册",
+ "paid_you6": "你付费解锁了/s1的全部资料",
+ "UG_LINE0": "hiAPP许可及服务协议",
+ "UG_LINE1": "[首部及导言]",
+ "UG_LINE2": "前海游龙科技有限公司(以下简称“Qianhai Youlong Technology Co., Ltd.”)在此特别提醒用户认真阅读、充分理解本《服务协议》(下称 《协议》)一用户 应认真阅读、充分理解本《协议》中各条款,包括免除或者限制Qianhai Youlong Technology Co., Ltd.责任的免责条款及对用户的权利限制条款。请您审慎阅读并选择接受或不接受本《协议》(未成年人应在法定监护人陪同下阅读)。除非您接受本《协议》所有条款,否则您无权注册、登录或使用本协议所涉相关服务。您的注册、登录、使用等行为将视为对本《协议》的接受,并同意接受本《协议》各项条款的约束。",
+ "UG_LINE3": "本《协议》是您(下称“用户”与Qianhai Youlong Technology Co., Ltd.之间关于用户注册、登录、使用“hi服务所订立的协议。本《协议》描述Qianhai Youlong Technology Co., Ltd.与用户之间关于“hi服务相关方面的权利义务。“用户”是指注册、登录、使用、浏览本服务的个人或组织。您对本协议的接受即受全部条款的约束,包括接受Qianhai Youlong Technology Co., Ltd.对任意服务条款随时所做的任何修改。本《协议》可由Qianhai Youlong Technology Co., Ltd.随时更新,更新后的协议条款一旦公布即代替原来的协议条款,恕不再另行通知,用户可在本APP查阅最新版协议条款。在Qianhai Youlong Technology Co., Ltd.修改《协议》条款后,如果用户不接受修改后的条款,请立即停止使用Qianhai Youlong Technology Co., Ltd.提供的服务,用户继续使用Qianhai Youlong Technology Co., Ltd.提供的服务将被视为已接受了修改后的协议。",
+ "UG_LINE4": "一、使用规则",
+ "UG_LINE5": "1、用户充分了解并同意,仅为用户提供信息分享、传送及获取的平台,用户必须为自己注册帐号下的一切行为负责,包括但不限于您所传送的任何内容以及由此产生的任何结果。",
+ "UG_LINE6": "2、用户在服务中或通过服务所传送的任何内容并不反映Qianhai Youlong Technology Co., Ltd.的观点或政策,Qianhai Youlong Technology Co., Ltd.对此不承担任何责任。",
+ "UG_LINE7": "3、用户充分了解并同意,是一个基于用户关系网的社交信息浏览产品,用户须对在上的注册信息的真实性、合法性、有效性承担全部责任,用户不得冒充他人;不得利用他人的名义传播任何信息;不得恶意使用注册帐号导致其他用户误认;否则Qianhai Youlong Technology Co., Ltd.有权立即停止提供服务,收回帐号并由用户独自承担由此而产生的一切法律责任。",
+ "UG_LINE8": "4、用户须对在上所传送信息的真实性、合法性、无害性、有效性等全权负责,与用户所传播的信息相关的任何法律责任由用户自行承担,与Qianhai Youlong Technology Co., Ltd.无关。",
+ "UG_LINE9": "5、Qianhai Youlong Technology Co., Ltd.保留因业务发展需要,单方面对本服务的全部或部分服务内容在任何时候不经任何通知的情况下变更、暂停、限制、终止或撤销服务的权利,用户需承担此风险。",
+ "UG_LINE10": "6、提供的服务中可能包括广告,用户同意在使用过程中显示和第三方供应商、合作伙伴提供的广告。",
+ "UG_LINE11": "7、用户不得利用或服务制作、上载、复制、发送如下内容:",
+ "UG_LINE12": "(1 )反对宪法所确定的基本原则的;",
+ "UG_LINE13": "(2)危害国家安全,泄露国家秘密,颠覆国家政权,破坏国家统一-的;",
+ "UG_LINE14": "(3)损害国家荣誉和利益的;",
+ "UG_LINE15": "(4)煽动民族仇恨、民族歧视,破坏民族团结的;",
+ "UG_LINE16": "(5)破坏国家宗教政策,宣扬邪教和封建迷信的;",
+ "UG_LINE17": "(6)散布谣言,扰乱社会秩序,破坏社会稳定的;",
+ "UG_LINE18": "(7)散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的;",
+ "UG_LINE19": "(8)侮辱或者诽谤他人,侵害他人合法权益的;",
+ "UG_LINE20": "(9)含有法律、行政法规禁止的其他内容的信息。",
+ "UG_LINE21": "8、Qianhai Youlong Technology Co., Ltd.可依其合理判断,对违反有关法律法规或本协议约定;或侵犯、妨害、威胁任何人权利或安全的内容,或者假冒他人的行为,Qianhai Youlong Technology Co., Ltd.有权依法停止传输任何前述内容,并有权依其自行判断对违反本条款的任何人士采取适当的法律行动,包括但不限于从服务中删除具有违法性、侵权性、不当性等内容,终止违反者的成员资格,阻止其使用全部或部分服务,并且依据法律法规保存有关信息并向有关部门报告等。",
+ "UG_LINE22": "9、用户权利及义务:",
+ "UG_LINE23": "(1 )Qianhai Youlong Technology Co., Ltd.帐号的所有权归Qianhai Youlong Technology Co., Ltd.所有,用户完成申请注册手续后,获得帐号的使用权,该使用权属于初始申请注册人,禁止赠与、借用、租用、转让或售卖。Qianhai Youlong Technology Co., Ltd.因经营需要,有权回收用户的帐号,并有权使用用户照片、视频、语音等进行产品宣传活动。",
+ "UG_LINE24": "(2)用户有权更改、删除在Qianhai Youlong Technology Co., Ltd..上的个人资料、注册信息及传送内容等,但需注意,删除有关信息的同时也会删除任何您储存在系统中的文字和图片。用户需承担该风险。",
+ "UG_LINE25": "(3)用户有责任妥善保管注册帐号信息及帐号密码的安全,用户需要对注册帐号以及密码下的行为承担法律责任。用户同意在任何情况下不使用其他成员的帐号或密码。在您怀疑他人在使用您的帐号或密码时,您同意立即通知Qianhai Youlong Technology Co., Ltd.。",
+ "UG_LINE26": "(4)用户应遵守本协议的各项条款,正确、适当地使用本服务,如因用户违反本协议中的任何条款,Qianhai Youlong Technology Co., Ltd.有权依据协议终止对违约用户Qianhai Youlong Technology Co., Ltd.帐号提供服务。同时,Qianhai Youlong Technology Co., Ltd.保留在任何时候收回Qianhai Youlong Technology Co., Ltd.帐号、用户名的权利。",
+ "UG_LINE27": "(5)如果用户有自己的常用英文帐号,那么用户有优先将该英文帐号注册为帐号的权利,但是如果用户在服务上线后一段时间内没有注册帐号,或者用户虽然注册了微信帐号,但是并不是使用该英文帐号作为微信帐号的,视为用户放弃了将该英文帐号注册为微信帐号的权利,Qianhai Youlong Technology Co., Ltd.有权将该英文帐号回收并分配给其他用户使用,以免造成资源浪费,由此带来问题均由用户自行承担。",
+ "UG_LINE28": "(6)用户注册帐号后如果长期不登录该帐号,Qianhai Youlong Technology Co., Ltd.有权回收该帐号,以免造成资源浪费,由此带来问题均由用户自行承担。",
+ "UG_LINE29": "(7)用户发生纠纷可使用举报功能维护用户平台权益,若收到用户举报反馈,被举报用户有义务主动告知或配合客服人员核实情况,举报内容核实属实,面具公园有权对用户警告、限制账号使用功能等方式约束用户违规行为,严重违规者hi有权直接冻结账号,且账户内余额不返还。如果账号被冻结需申诉,用户可联系客服 。",
+ "UG_LINE30": "二、隐私保护",
+ "UG_LINE31": "用户同意个人隐私信息是指那些能够对用户进行个人辨识或涉及个人通信的信息,包括下列信息:用户真实姓名,手机号码,微信账号,facebook账号,IP地址。而非个人隐私信息是指用户对本服务的操作状态以及使用习惯等一些明确且客观反映在Qianhai Youlong Technology Co., Ltd.服务器端的基本记录信息和其他一切个人隐私信息范围外的普通信息;以及用户同意公开的上述隐私信息。尊重用户个人隐私信息的私有性是Qianhai Youlong Technology Co., Ltd.的一贯制度,Qianhai Youlong Technology Co., Ltd.将会采取合理的措施保护用户的个人隐私信息,除法律或有法律赋予权限的政府部门要求或用户同意等原因外,Qianhai Youlong Technology Co., Ltd.未经用户同意不向除合作单位以外的第三方公开、透露用户个人隐私信息。但是,用户在注册时选择同意,或用户与Qianhai Youlong Technology Co., Ltd.及合作单位之间就用户个人隐私信息公开或使用另有约定的除外,同时用户应自行承担因此可能产生的任何风险,Qianhai Youlong Technology Co., Ltd.对此不予负责。同时,为了运营和改善Qianhai Youlong Technology Co., Ltd.的技术和服务,Qianhai Youlong Technology Co., Ltd.将可能会自行收集使用或向第三方提供用户的非个人隐私信息,这将有助于Qianhai Youlong Technology Co., Ltd.向用户提供更好的用户体验和提高Qianhai Youlong Technology Co., Ltd.的服务质量。Qianhai Youlong Technology Co., Ltd.收集数据是根据用户与Qianhai Youlong Technology Co., Ltd.的互动和用户所做出的选择,包括用户的隐私设置以及用户使用的产品和功能。Qianhai Youlong Technology Co., Ltd.收集的数据可能包括SDK/API/JS代码版本、IP地址、平台、时间戳、应用标识符、应用程序版本、应用分发渠道、独立设备标识符、iOS广告标识符(IDFA)、 安卓广告主标识符、网卡(MAC) 地址、国际移动设备识别码(IMEI)、设备型号、终端制造厂商、终端设备操作系统版本、会话启动/停止时间、语言所在地、时区和网络状态(WiFi等)、 硬盘、 CPU和电池使用情况等。这将有助于Qianhai Youlong Technology Co., Ltd.开展内部数据分析和研究,第三方SDK统计服务,改善Qianhai Youlong Technology Co., Ltd.的产品或服务。为确保用户身份真实性,向用户提供更好的安全保障,用户需提交的身份信息或面部特征等生物识别信息(均属于个人敏感信息)来完成具体产品服务所需或必要的真人认证。.上 述信息将仅用于核实用户身份的真实性。用户提供的.上述信息,将在用户使用本服务期间持续授权Qianhai Youlong Technology Co., Ltd.使用。在用户注销账号时,Qianhai Youlong Technology Co., Ltd.将停止使用。上述信息将存储于中华人民共和国境内。如需跨境传输,Qianhai Youlong Technology Co., Ltd.将会单独征得用户的授权同意。App用户真实性认证需要用户提供能证实用户身份真实性的部分资料。相关资料只用做平台审核不会披露给任何其他用户或用于商业用途,仅法律或有关部门要求介入除外。",
+ "UG_LINE32": "三、Qianhai Youlong Technology Co., Ltd.商标信息",
+ "UG_LINE33": "Qianhai Youlong Technology Co., Ltd.服务中所涉及的logo等图形、文字或其组成,以及其他Qianhai Youlong Technology Co., Ltd.标志及产品、服务名称,均为Qianhai Youlong Technology Co., Ltd.之商标(以下简称“Qianhai Youlong Technology Co., Ltd.标识”)。未经Qianhai Youlong Technology Co., Ltd.事先书面同意,用户不得将Qianhai Youlong Technology Co., Ltd.标识以任何方式展示或使用或作其他处理,也不得向他人表明您有权展示、使用、或其他有权处理Qianhai Youlong Technology Co., Ltd.标识的行为。",
+ "UG_LINE34": "四、法律责任及免责",
+ "UG_LINE35": "1、用户违反本《协议》或相关的服务条款的规定,导致或产生的任何第三方主张的任何索赔、要求或损失,包括合理的律师费,用户同意赔偿Qianhai Youlong Technology Co., Ltd.与合作公司、关联公司,并使之免受损害。",
+ "UG_LINE36": "2、用户因第三方如电信部门的通讯线路故障、技术问题、网络、电脑故障、系统不稳定性及其他各种不可抗力原因而遭受的一切损失,Qianhai Youlong Technology Co., Ltd.及合作单位不承担责任。",
+ "UG_LINE37": "3、因技术故障等不可抗事件影响到服务的正常运行的,Qianhai Youlong Technology Co., Ltd.及合作单位承诺在第一时间内与相关单位配合,及时处理进行修复,但用户因此而遭受的一切损失,Qianhai Youlong Technology Co., Ltd.及合作单位不承担责任。",
+ "UG_LINE38": "4、本服务同大多数互联网服务一样,受包括但不限于用户原因、网络服务质量、社会环境等因素的差异影响,可能受到各种安全问题的侵扰,如他人利用用户的资料,造成现实生活中的骚扰;用户下载安装的其它软件或访问的其他网站中含有“特洛伊木马”等病毒,威胁到用户的计算机信息和数据的安全,继而影响本服务的正常使用等等。用户应加强信息安全及使用者资料的保护意识,要注意加强密码保护,以免遭致损失和骚扰。",
+ "UG_LINE39": "5、用户须明白,使用本服务因涉及Internet服务,可能会受到各个环节不稳定因素的影响。因此,本服务存在因不可抗力、计算机病毒或黑客攻击、系统不稳定、用户所在位置、用户关机以及其他任何技术、互联网络、通信线路原因等造成的服务中断或不能满足用户要求的风险。用户须承担以上风险,Qianhai Youlong Technology Co., Ltd.不作担保。对因此导致用户不能发送和接受阅读信息、或接发错信息,Qianhai Youlong Technology Co., Ltd.不承担任何责任。",
+ "UG_LINE40": "6、用户须明白,在使用本服务过程中存在有来自,任何他人的包括威胁性的、诽谤性的、令人反感的或非法的内容或行为或对他人权利的侵犯(包括知识产权)的匿名或冒名的信息的风险,用户须承担以上风险,Qianhai Youlong Technology Co., Ltd.和合作公司对本服务不作任何类型的担保,不论是明确的或隐含的,包括所有有关信息真实性、适商性、适于某一特定用途、所有权和非侵权性的默示担保和条件,对因此导致任何因用户不正当或非法使用服务产生的直接、间接、偶然、特殊及后续的损害,不承担任何责任。",
+ "UG_LINE41": "7、Qianhai Youlong Technology Co., Ltd.定义的信息内容包括:文字、软件、声音、相片、录像、图表;在广告中全部内容;Qianhai Youlong Technology Co., Ltd.为用户提供的商业信息,所有这些内容受版权、商标权、和其它知识产权和所有权法律的保护。所以,用户只能在Qianhai Youlong Technology Co., Ltd.和广告商授权下才能使用这些内容,而不能擅自复制、修改、编纂这.些内容、或创造与内容有关的衍生产品。",
+ "UG_LINE42": "8、在任何情况下,Qianhai Youlong Technology Co., Ltd.均不对任何间接性、后果性、惩罚性、偶然性、特殊性或刑罚性的损害,包括因用户使用服务而遭受的利润损失,承担责任(即使已被告知该等损失的可能性亦然)。 尽管本协议中可能含有相悖的规定,Qianhai Youlong Technology Co., Ltd.对您承担的全部责任,无论因何原因或何种行为方式,始终不超过您在成员期内因使用服务而支付给Qianhai Youlong Technology Co., Ltd.的费用。",
+ "UG_LINE43": "五、会员条款",
+ "UG_LINE44": "1、hi会员平等享有会员的权利,同时应遵守Qianhai Youlong Technology Co., Ltd.的各项规范、规则,包括但不限于本服务条款和《用户协议》。",
+ "UG_LINE45": "2、因违反Qianhai Youlong Technology Co., Ltd.《用户协议》而导致会员服务被暂停使用的相关损失,由用户自行承担。",
+ "UG_LINE46": "3、会员在会员资格有效期内可以享受hi会员的各项增值服务。",
+ "UG_LINE47": "4、如会员在会员资格有效期内主动终止或取消会员资格,Qianhai Youlong Technology Co., Ltd.不负责退还与该会员剩余会员资格有效期对应的服务费用。",
+ "UG_LINE48": "5、会员自行承担在hi中传送、发布信息及使用hi免费服务或收费服务的法律责任,会员使用hi服务,包括免费服务与收费服务的行为,均应遵守各项法律法规、规章、规范性文件。",
+ "UG_LINE49": "6、会员服务开通之后,不可进行转让或退订。",
+ "UG_LINE50": "7、因会员在使用Qianhai Youlong Technology Co., Ltd.免费服务或收费服务的过程中,存在违反法律法规的行为,Qianhai Youlong Technology Co., Ltd.有权取消该会员的会员资格而无须给予任何补偿,且该会员须自行承担全部责任。",
+ "UG_LINE51": "六、其他条款",
+ "UG_LINE52": "1、Qianhai Youlong Technology Co., Ltd.郑重提醒用户注意本《协议》中免除Qianhai Youlong Technology Co., Ltd.责任和加重用户义务的条款,请用户仔细阅读,自主考虑风险。未成年人应在法定监护人的陪同下阅读本《协议》。以上各项条款内容的最终解释权及修改权归Qianhai Youlong Technology Co., Ltd.所有。",
+ "UG_LINE53": "2、本《协议》所定的任何条款的部分或全部无效者,不影响其它条款的效力。",
+ "UG_LINE54": "3、本《协议》的解释、效力及纠纷的解决,适用于中华人民共和国法律。若用户和Qianhai Youlong Technology Co., Ltd.之间发生任何纠纷或争议,首先应友好协商解决,协商不成的,用户在此完全同意将纠纷或争议提交Qianhai Youlong Technology Co., Ltd.住所地的人民法院管辖。",
+ "UG_LINE55": "4、本《协议》的版权由Qianhai Youlong Technology Co., Ltd.所有,Qianhai Youlong Technology Co., Ltd.保留一切解释和修改权利。",
+ "UG_LINE56": "前海游龙科技有限公司",
+ "net_error": "网络异常",
+ "enter_name": "请输入姓名",
+ "translate": "译",
+ "locate": "位置",
+ "voice_tips": "按住录音,松开发送",
+ "unlock": "解锁",
+ "input_content": "请输入聊天内容",
+ "connecting": "连接中...",
+ "logining": "登陆中...",
+ "reject_reply": "/s1拒绝了你的查看申请",
+ "warning_text": "H币进账3天内没人举报你即可兑消(1:1000越南盾)",
+ "more_big": "输入个数不大于/s1",
+ "little_min": "输入个数不小于/s1",
+ "voice_msg": "/s1邀请你进行通话",
+ "send_gift": "你打赏了对方/s1个/s2",
+ "receive_gift": "对方打赏了你/s1个/s2",
+ "cannot_join": "非会员不能报名",
+ "alreay_back": "已退回",
+ "video_more_big": "文件过大",
+ "select_all": "选择所有",
+ "re_connect": "重新连接",
+ "voice_tips2": "松开发送,滑动取消",
+ "country": "国籍",
+ "have_picture_view": "有照片审核中",
+ "speaker_play": "扬声器播放",
+ "handset_playback": "听筒播放",
+ "play_model": "听筒模式",
+ "password_less": "密码过短",
+ "years_old": "岁",
+ "coin_returen1": "经匿名用户举报,系统核实你近期存在违规行为,请勿再进行违规操作。如有下次,将进行账号冻结",
+ "already_new": "已经是最新版本",
+ "test_it": "立即体验",
+ "found_new": "发现新版本",
+ "ad": "广告",
+ "attention": "关注",
+ "fans": "粉丝",
+ "apply_see": "/s1 申请查看我的资料页",
+ "agree_apply": "/s1 通过了我的查看请求",
+ "see_redBag": "/s1 查看了我的红包照片",
+ "notice": "提醒",
+ "notice_open": "请在手机设置中开启通知权限以获取消息通知",
+ "open_notice": "通知权限未开启",
+ "not_open": "未开启通知权限,无法接收通知",
+ "withdraw_fail": "你申请提现的的/s1H币已被退回,请确认绑定账户是否正确",
+ "dynamics": "动态",
+ "Remark": "备注",
+ "setRemark": "设置备注",
+ "content_num": "/s1条评论",
+ "Redeem": "积分兑换获得/s1H币",
+ "location_permission": "没有访问手机存储权限",
+ "camera_permission": "没有访问摄像头权限",
+ "photo_permission": "没有访问相册的权限",
+ "video_permission": "没有访问麦克风的权限",
+ "your_redMoney_over": "你发送的红包已过期",
+ "other_redMoney_over": "对方发送的红包已过期",
+ "server_error_tips": "貌似出了点问题...",
+ "emoji": "表情",
+ "today_score": "今日签到可领取/s1积分",
+ "sign_tips": "1、每日签到可领取积分,累计天数越多积分越高。\n2、积分可兑换H币,兑换将消耗对应积分,请慎重兑换。\n3、每月最后一天将重置签到,清零积分,请记得及时兑换。",
+ "sign_in": "签到",
+ "my_score": "我的积分",
+ "signin_now": "立即签到",
+ "sign_in_day": "已累积签到/s1天",
+ "have_get": "已兑换",
+ "scan": "扫一扫",
+ "my_qr": "我的二维码",
+ "scan_and_add": "扫一扫,加好友",
+ "amap": "高德地图",
+ "baidumap": "百度地图",
+ "googlemap": "谷歌地图",
+ "applemap": "苹果地图",
+ "go_open": "去开启",
+ "Preview": "预览",
+ "Photo_album": "相册",
+ "all_photo": "全部图片",
+ "have_select": "您已经选择了/s1张图片",
+ "loading": "加载中...",
+ "new_chat_msg": "您有新的聊天消息",
+ "new_video_msg": "您有新的连麦消息",
+ "apply_friends": "/s1申请成为你的好友",
+ "applyed_friends": "/s1通过了你的好友请求",
+ "contact_permission": "没有访问通讯录的权限",
+ "contact": "通讯录",
+ "search": "搜索",
+ "contact_add": "添加通讯录中的好友",
+ "find": "发现",
+ "translate_robot": "翻译机器人",
+ "robot_hello": "你好,我是翻译机器人...",
+ "Simplified_Chinese": "简体中文",
+ "traditional_Chinese": "繁体中文",
+ "english": "英语",
+ "Vietnamese": "越南语",
+ "Korean": "韩语",
+ "Japanese": "日语",
+ "add_friends": "添加好友",
+ "stranger": "陌生人",
+ "receive_stranger": "接收陌生人发送的消息",
+ "signin": "签到",
+ "stranger_close": "对方拒绝接收陌生人发送的消息,是否继续解锁全部资料。",
+ "add": "添加",
+ "added": "已添加",
+ "stranger_close_tips": "对方拒绝接收陌生人发送的消息。",
+ "translate_fail": "翻译失败",
+ "no_photos": "请先上传照片,再设置红包照片。",
+ "successful_appeal1": "你上诉的评价:/s1上诉失败。",
+ "add_success": "添加成功,等待对方同意",
+ "other_pay": "他人代付",
+ "friend_verification": "朋友验证",
+ "add_friends_tips": "你已发送验证申请,等对方通过",
+ "i_am": "我是/s1",
+ "agree": "允许",
+ "privacyAgreement": "\"Hibok\"需要您同意《隐私协议》方可使用",
+ "privacy": "隐私协议",
+ "notification_addfriend": "Hibok!有人申请添加你为好友,看看是谁吧",
+ "distance_long": "面对面才可以加好友哦",
+ "chat_tips": "为了翻译内容的准确性,请不要简写",
+ "fans_list": "粉丝列表",
+ "system_not_open": "功能内测中",
+ "service_withdraw_tips": "iOS客户端暂不支持提现,你可以使用安卓客户端提现,或点击下方按钮进行提现",
+ "withdraw_tips": "点击提现",
+ "add_member": "添加成员",
+ "delete_member": "删除成员",
+ "change_group_name": "修改群名称",
+ "my_group_nickname": "我在本群中的昵称",
+ "group_chat": "群聊",
+ "create_group_chat": "创建群聊",
+ "added_friends_tips": "你需要发送验证申请,等对方通过",
+ "group_chat_name": "群聊名称",
+ "my_group_nickname_tips": "在这里可以设置你在这个群里的昵称,这个昵称只会在此群内显示",
+ "man_gold": "男神动态",
+ "woman_gold": "女神动态",
+ "choose_group_owner": "选择新群主",
+ "group_announcement": "群公告",
+ "chat_news": "聊天消息",
+ "group_qr": "群二维码",
+ "group_setting": "群管理",
+ "close_news_notice": "消息免打扰",
+ "set_chat_top": "置顶聊天",
+ "show_group_member_name": "显示群成员昵称",
+ "quit_group_tips": "退出后不会通知群聊中其他成员,且不会再接收此群聊消息",
+ "quit_and_delete": "退出并删除",
+ "show_more_member": "查看更多群成员",
+ "group_invite": "群聊邀请确认",
+ "change_group_owner": "群主管理权转让",
+ "group_setting_tips": "启用后,群成员需群主确认才能邀请朋友进群。扫二维码进群将同时停用",
+ "invite_detail": "邀请详情",
+ "undefine_name": "未命名",
+ "group_qr_code": "群二维码名片",
+ "group_qr_code_tips": "该二维码7天内(/s1月/s2日前)有效,重新进入将更新",
+ "Goddess_heat": "女神热度",
+ "Goddess_heat_tips": "累计收获的礼物",
+ "new_friends": "新朋友",
+ "before_three_day": "三天前",
+ "after_three_day": "近三天",
+ "group_clean_chat_record": "清除聊天记录",
+ "check": "查看",
+ "apply_fro_friends": "请求添加你为好友",
+ "no_vip_cannot_withdraw": "非会员不能提现",
+ "not_true_woman": "该用户未认证,谨防被骗",
+ "join_group": "加入群聊",
+ "sign_in_apple": "通过Apple登录",
+ "only_host": "只有群主才能编辑群公告",
+ "send_gift1": "你打赏了对方/s1个礼物",
+ "receive_gift1": "对方打赏了你/s1个礼物",
+ "not_in_group": "你已不在该群",
+ "creating_group": "正在创建,请稍等",
+ "article": "条",
+ "group_open_verification": "该群已开启进群验证只能通过邀请进群",
+ "group_memeber": "群成员",
+ "invite_members": "邀请/s1位朋友加入群聊",
+ "total_members": "共/s1人",
+ "qr_outtime": "二维码已过期",
+ "no_goupr_info": "没有该群信息",
+ "you_invite": "你邀请/s1加入了群聊",
+ "invite_you": "你被/s1拉进了群聊",
+ "invite_someone": " /s1 邀请 /s2 加入了群聊",
+ "you": "你",
+ "delete_group": " /s1 将 /s2 移出了群聊",
+ "you_group_owner": "你已成为新群主",
+ "someone_group_owner": "/s1已成为新群主",
+ "change_group_owner1": "群名已更改为/s1",
+ "update_group_announce": "群公告已更新",
+ "you_qr": "你通过扫描二维码加入群聊",
+ "others_qr": "/s1通过扫描二维码加入群聊",
+ "invite_confirm": "\"/s1\" 想邀请/s2位朋友加入群聊 \\$去确认\\$ ",
+ "want_invite_confirm": " \"/s1\" 想邀请\"/s2\" 加入群聊 ",
+ "join_group_confirm": "\"/s1\" 加入群聊 已确认",
+ "you_invite_gourp": "你被 /s1 拉进了群聊 ",
+ "someone_join_group": " \"/s1\" 加入群聊 ",
+ "group_setting_tips1": "群主已开启\"群聊邀请确认\",群成员需群主确认才能邀请朋友进群",
+ "group_setting_tips2": "群主已恢复默认进群方式",
+ "members_max": "群成员已达上限",
+ "group_max": "群数量已达上限",
+ "my_money_info": "我的账单",
+ "my_left_money": "我的余额",
+ "money_tips": "H币可通过充值或兑换方式获得,无法进行提现",
+ "get_money_detail": "收入明细",
+ "hibok_money": "Hibox收入",
+ "charge_h": "兑换H币",
+ "charge_tips": "提款规则",
+ "splash_tips1": "百变定位",
+ "splash_tips2": "翻译机器人",
+ "splash_tips3": "交友APP",
+ "splash_tips_content1": "百变女神,选你所爱",
+ "splash_tips_content2": "语音互动一起聊",
+ "splash_tips_content3": "解决语言问题",
+ "splash_go": "立即体验",
+ "change_h_coin": "你通过收入兑换了/s1H币",
+ "Representation_succes": "您的申述成功,系统已退款",
+ "system_give": "系统赠送",
+ "exchange_fail": "您的提款申请失败,已退回",
+ "hibok_exchange": "通过Hibox收入兑换/s1H币",
+ "bind_code_success": "成功绑定代理优惠码",
+ "translate_money": "您消耗了/s1H币进行人工翻译",
+ "system_back": "系统取消退回",
+ "you_give": "你打赏了对方",
+ "you_get": "对方打赏了你",
+ "enter_num_qian": "兑换数量(单位K)",
+ "enter_num_qian1": "提现数量(单位K)",
+ "daily_translate_voucher": "翻译券",
+ "msg_notice": "通知消息",
+ "select_notice_people":"选择提醒的人",
+ "search_phone":"查找手机号",
+ "not_have_user":"用户不存在",
+ "not_add_Myself":"你不能添加自己",
+ "you_are_blaklisted":"对方已拉黑了你",
+ "confrim_recovery":"确定恢复已被焚毁的照片吗?\n(已经看过的用户可以再看一次)",
+ "send_to": "发送到"
+}
\ No newline at end of file
diff --git a/i18n/zh-HK.json b/i18n/zh-HK.json
new file mode 100644
index 0000000..c1e6be8
--- /dev/null
+++ b/i18n/zh-HK.json
@@ -0,0 +1,1164 @@
+{
+ "appName": "Hi公園",
+ "login": "登錄",
+ "registration": "注册",
+ "other_login": "其他登錄",
+ "account": "賬號",
+ "enter_username": "請輸入賬號",
+ "password": "密碼",
+ "enter_password": "輸入密碼",
+ "forget_password": "忘記密碼",
+ "reset_password": "重置密碼",
+ "number_registration": "手機號註冊",
+ "enter_number": "請輸入手機號",
+ "code": "驗證碼",
+ "enter_code": "請輸入收到的驗證碼",
+ "send_code": "發送驗證碼",
+ "send_again": "重新發送",
+ "set_password": "設置密碼",
+ "password_limit": "密碼不少於6位",
+ "set_password2": "請設置登錄密碼",
+ "next_step": "下一步",
+ "agreed_agreement": "點擊進入表示你已閱讀並同意《用戶協議》",
+ "enter_password2": "請輸入登錄密碼",
+ "reset_now": "立即重置",
+ "choose_gender": "選擇性別",
+ "who": "你是...",
+ "determine": "確定",
+ "cannot_modified": "選擇性別後無法修改",
+ "tip": "提示",
+ "choose_quit": "你即將完成註冊,是否現在退出?",
+ "confirm": "確認",
+ "use": "使用",
+ "cancel": "取消",
+ "close": "關閉",
+ "delete": "刪除",
+ "forget_it": "算了",
+ "ok": "好的",
+ "choose_quit2": "註冊後將不能修改性別,確定麼?",
+ "tip_content": "提示:你不能和同性別用戶進行交流",
+ "welcome": "歡迎",
+ "enter_incode": "請填寫邀請碼",
+ "must_incode": "Hi僅向擁有邀請碼的男士提供服務",
+ "your_incode": "你的邀請碼",
+ "how_get": "沒有邀請碼?你可以通過以下方式獲取",
+ "method1": "方式1",
+ "free": "免費申請",
+ "apply_now": "馬上申請",
+ "check_incode": "查收邀請碼",
+ "so_get": "你需要填寫一些個人信息,審核通過後回給你發送邀請碼",
+ "apply_incode": "申請邀請碼",
+ "location": "所在地",
+ "cityname": "你所在的城市名稱",
+ "message_channel": "信息渠道",
+ "how_know": "你從哪裡知道APP",
+ "wechat_number": "微信號",
+ "your_wechat": "你的微信號",
+ "facebook": "facebook",
+ "your_facebook": "你的臉書",
+ "submit_application": "提交申請",
+ "enter_city": "請輸入所在城市",
+ "so_know": "請告訴我們你獲取APP的信息渠道",
+ "your_social": "請告訴我們你的社交賬號",
+ "receive_incode": "我們將盡快處理你的申請。如果通過審核,你會在消息中心收到我們發放的邀請碼",
+ "wait_incode": "邀請碼還未發放,申請後請耐心等待!",
+ "successful_application1": "邀請碼申請成功!",
+ "application_failed1": "邀請碼申請失敗!",
+ "successful_copy": "複製成功",
+ "method2": "方式2",
+ "joinvip": "加入會員",
+ "join_now": "立即加入",
+ "joined": "已加入",
+ "join_odds": "加入會員可享受各種特權,包括無需邀請碼註冊",
+ "not_joinvip": "你還沒有加入會員",
+ "join_after": "加入會員後,即可不需要邀請碼完成註冊",
+ "incode_passed": "邀請碼驗證通過",
+ "welcome_join": "歡迎加入!請勿把你的賬號洩露給他人,一經發現登錄異常,賬戶會被自動凍結。",
+ "member_centre": "會員中心",
+ "members_privilege": "會員特權",
+ "see_more": "看的更多",
+ "unlimited_see": "每天不限次數查看用戶",
+ "see_cheaper": "看的更省",
+ "free10": "每天/s1次免費機會查看付費相冊或者社交賬號",
+ "see_longer": "看的更久",
+ "towto6": "查看閱後即焚照片的時間從2秒提升到/s1秒",
+ "see_better": "看的更爽",
+ "free_release": "免費發布約會廣播",
+ "choose_price": "選擇套餐",
+ "pay_method": "支付方式",
+ "pay_amount": "支付金額",
+ "not_enough": "錢包餘額不足",
+ "confirm_pay": "確認支付",
+ "complete_material": "完善資料",
+ "basic_information": "基本資料",
+ "upload_avatar": "上傳頭像",
+ "choose": "請選擇",
+ "fill_out": "請填寫",
+ "choose_multiple": "可以多選",
+ "optional": "選填",
+ "least": "最少填寫/s1個",
+ "introduce_yourself": "介紹一下自己",
+ "most": "最多選擇/s1個",
+ "nickname": "暱稱",
+ "only1_8": "暱稱只能1-20個字符",
+ "Resident_city": "當前城市",
+ "Please_select_a_resident_city": "請選擇當前城市",
+ "City1": "芹苴",
+ "City2": "峴港",
+ "City3": "海防",
+ "City4": "河內",
+ "City5": "胡志明",
+ "City6": "安江",
+ "City7": "北江",
+ "City8": "北件",
+ "City9": "薄遼",
+ "City10": "北寧",
+ "City11": "巴地頭頓",
+ "City12": "檳椥",
+ "City13": "平定",
+ "City14": "平陽",
+ "City15": "平福",
+ "City16": "平順",
+ "City17": "金甌",
+ "City18": "高平",
+ "City19": "得樂",
+ "City20": "得農",
+ "City21": "奠邊",
+ "City22": "同奈",
+ "City23": "同塔",
+ "City24": "嘉萊",
+ "City25": "河江",
+ "City26": "海陽",
+ "City27": "河南",
+ "City28": "河靜",
+ "City29": "和平",
+ "City30": "後江",
+ "City31": "興安",
+ "City32": "慶和",
+ "City33": "堅江",
+ "City34": "昆嵩",
+ "City35": "萊州",
+ "City36": "林同",
+ "City37": "諒山",
+ "City38": "老街",
+ "City39": "隆安",
+ "City40": "乂安",
+ "City41": "寧平",
+ "City42": "寧順",
+ "City43": "富壽",
+ "City44": "富安",
+ "City45": "廣平",
+ "City46": "廣南",
+ "City47": "廣義",
+ "City48": "廣寧",
+ "City49": "廣治",
+ "City50": "朔莊",
+ "City51": "山羅",
+ "City52": "西寧",
+ "City53": "太平",
+ "City54": "太原",
+ "City55": "清化",
+ "City56": "承天順化",
+ "City57": "前江",
+ "City58": "茶榮",
+ "City59": "宣光",
+ "City60": "永隆",
+ "City61": "永富",
+ "City62": "安沛",
+ "City63": "南定",
+ "birthday": "生日",
+ "choose_birthday": "請選擇生日",
+ "year": "年",
+ "month": "月",
+ "day": "日",
+ "hour": "時",
+ "minute": "分",
+ "second": "秒",
+ "just": "剛剛",
+ "minute_ago": "/s1分鐘前",
+ "hour_ago": "/s1小時前",
+ "day_ago": "/s1天前",
+ "week_ago": "/s1週前",
+ "month_ago": "/s1月前",
+ "morning": "上午",
+ "noon": "中午",
+ "afternoon": "下午",
+ "night": "晚上",
+ "all_day": "一整天",
+ "yesterday": "昨天",
+ "two_yesterday": "前天",
+ "overnight": "通宵",
+ "one": "個",
+ "ten": "十",
+ "hundred": "百",
+ "thousand": "千",
+ "ten_thousand": "萬",
+ "aries": "白羊座",
+ "taurus": "金牛座",
+ "gemini": "雙子座",
+ "cancer": "巨蟹座",
+ "leo": "獅子座",
+ "virgo": "處女座",
+ "libra": "天秤座",
+ "scorpio": "天蠍座",
+ "sagittarius": "射手座",
+ "capricorn": "摩羯座",
+ "aquarius": "水瓶座",
+ "pisces": "雙魚座",
+ "monday": "星期一",
+ "tuesday": "星期二",
+ "wednesday": "星期三",
+ "thursday": "星期四",
+ "friday": "星期五",
+ "saturday": "星期六",
+ "sunday": "星期天",
+ "job": "職業",
+ "choose_career": "請選擇職業",
+ "career1": "信息技術",
+ "career2": "互聯網",
+ "career3": "IT",
+ "career4": "電信運營",
+ "career5": "網絡遊戲",
+ "career6": "金融保險",
+ "career7": "投資",
+ "career8": "股票基金",
+ "career9": "保險",
+ "career10": "銀行",
+ "career11": "信託擔保",
+ "career12": "商業服務",
+ "career13": "諮詢",
+ "career14": "個體經營",
+ "career15": "美容美髮",
+ "career16": "旅遊",
+ "career17": "酒店餐飲",
+ "career18": "休閒娛樂",
+ "career19": "貿易",
+ "career20": "汽車",
+ "career21": "房地產",
+ "career22": "物業管理",
+ "career23": "裝修裝潢",
+ "career24": "偵探",
+ "career25": "工程製造",
+ "career26": "建築",
+ "career27": "土木工程",
+ "career28": "機械製造",
+ "career29": "電子",
+ "career30": "生物醫學",
+ "career31": "食品",
+ "career32": "服裝",
+ "career33": "能源",
+ "career34": "交通運輸",
+ "career35": "航空",
+ "career36": "鐵路",
+ "career37": "航運船舶",
+ "career38": "公共交通",
+ "career39": "物流運輸",
+ "career40": "文化傳媒",
+ "career41": "媒體出版",
+ "career42": "設計",
+ "career43": "文化傳播",
+ "career44": "廣告創意",
+ "career45": "動漫",
+ "career46": "公關會展",
+ "career47": "攝影",
+ "career48": "娛樂體育",
+ "career49": "影視",
+ "career50": "運動體育",
+ "career51": "音樂",
+ "career52": "模特",
+ "career53": "公共事業",
+ "career54": "醫療",
+ "career55": "法律",
+ "career56": "教育",
+ "career57": "政府機構",
+ "career58": "公益",
+ "career59": "學生",
+ "career60": "無",
+ "program": "節目",
+ "select_program": "請選擇國籍",
+ "healthy_exercise": "健康運動",
+ "night_party": "夜蒲聚會",
+ "gourmet_party": "我是吃貨",
+ "watch_movie": "看電影",
+ "play_games": "玩遊戲",
+ "travel_together": "結伴旅行",
+ "voice_chat": "連麥聊天",
+ "other": "其他",
+ "expect_lover": "期望對象",
+ "choose_lover": "請選擇期望對象",
+ "beautiful": "看臉",
+ "rich": "土豪",
+ "care_me": "關愛我",
+ "look_feeling": "看感覺",
+ "doesnt_matter": "無所謂",
+ "least_account": "請至少填寫一種社交賬號",
+ "hide_account1": "我的用戶資料隱藏社交賬號",
+ "more_information": "更多信息",
+ "height": "身高",
+ "weight": "體重",
+ "not_show": "不顯示",
+ "self_introduction": "個人介紹",
+ "registration_success1": "註冊成功",
+ "exit": "確定退出麼",
+ "exit_registration": "你還未完善個人信息,現在退出下次進入請用已註冊賬號直接登錄",
+ "cant_see": "男士無法查看其他男士詳情",
+ "cant_see2": "女士無法查看其他女士詳情",
+ "see_one": "你今天還能查看/s1位女士",
+ "only_see": "非會員用戶每天只能查看15位女士",
+ "continue_see": "繼續查看",
+ "user_frozen": "用戶已凍結",
+ "search_user": "請輸入暱稱/職業進行搜索",
+ "nearby": "附近",
+ "member": "會員",
+ "new_registration": "新註冊",
+ "authenticate": "認證",
+ "first_online": "在線",
+ "not_positioned": "未開啟定位,無法計算與其他用戶距離",
+ "unknown": "未知",
+ "secrecy": "保密",
+ "collection": "收藏",
+ "cancel_collection": "取消收藏",
+ "canceled_collection": "已取消收藏",
+ "like": "加入喜歡",
+ "added_like": "已加入喜歡",
+ "canceled_like": "已取消喜歡",
+ "blacklist": "拉黑",
+ "blacklist_choose": "你們將無法再看到對方和對方的動態,確定嗎",
+ "blacklisted": "已加入黑名單",
+ "reject_message": "你已拉黑對方並拒收消息",
+ "remove_blacklist": "移除黑名單",
+ "blacklist_removed": "已移除黑名單",
+ "receive_message": "你將對方移除黑名單並取消拒收消息",
+ "online": "在線",
+ "paid_photo": "付費相冊",
+ "application_view": "申請瀏覽",
+ "passed": "已通過",
+ "park": "公園",
+ "radio": "電台",
+ "news": "消息",
+ "me": "我",
+ "more_operations": "更多操作",
+ "anonymous_report": "匿名舉報",
+ "certified_video": "認證視頻",
+ "passed_video": "她已通過視頻認證真實性",
+ "not_video": "她還沒認證身份真實性",
+ "her_appointment": "她正在發起約會哦",
+ "pay_join": "他通過付費加入",
+ "passed_review": "他通過了身份安全審核",
+ "invited_user": "他通過資深用戶/s1贈送的邀請碼加入",
+ "his_appointment": "他正在發起約會哦",
+ "her_dynamics": "她的動態",
+ "his_dynamics": "他的動態",
+ "low_key": "她非常低調",
+ "low_key2": "他非常低調",
+ "her_photo": "她的相冊",
+ "his_photo": "他的相冊",
+ "set_lock": "他設置了相冊鎖",
+ "set_lock2": "她設置了相冊鎖",
+ "free_unlock": "解鎖相冊(/s1),會員免費",
+ "unlock_user": "解鎖/s1的相冊",
+ "pay_unlock": "付費解鎖(/s1 H幣)",
+ "become_member": "成為會員,免費解鎖",
+ "consumption_once": "是否使用1次機會解鎖/s1的相冊",
+ "remaining_once": "(你今天還有/s1次機會)",
+ "no_times": "你今天的免費機會已用完,是否贈送/s1解鎖/s2的全部資料",
+ "pay": "支付",
+ "view_user": "他設置了限制,查看資料需要請求他的同意",
+ "view_user2": "她設置了限制,查看資料需要請求她的同意",
+ "need_photo": "申請查看需給對方發送一張你的照片。放心,你的照片會在對方長按屏幕查看的2秒後焚毀",
+ "choose_photo": "選擇照片",
+ "send_application": "已發送申請,對方確認後你會收到消息提醒",
+ "not_authenticate": "你還沒進行認證",
+ "after_authenticate": "認證你的真實性後,才能與他人互動",
+ "authenticate_now": "馬上認證",
+ "destroy_after": "閱後即焚",
+ "destroyed": "已焚毀",
+ "red_photo1": "閱後即焚的紅包照片",
+ "ask_me": "請通過私聊向我索取",
+ "filled_in": "已填寫,點擊查看",
+ "unlock_information": "解鎖全部資料",
+ "unlock_choose": "使用1次免費解鎖",
+ "your_evaluation": "你的真實評價",
+ "her_evaluation": "她的真實評價",
+ "his_evaluation": "他的真實評價",
+ "evaluate": "評價",
+ "friendly": "友好",
+ "interesting": "有趣",
+ "readily": "爽快",
+ "patient": "耐心",
+ "indifferent": "高冷",
+ "bad_temper": "爆脾氣",
+ "courtesy": "禮貌",
+ "generous": "大方",
+ "lie": "口嗨",
+ "unfriendly": "不友好",
+ "anonymous_evaluation": "匿名評價",
+ "cant_evaluate": "你還沒約過她,無法評價",
+ "cant_evaluate2": "他還沒約過你,無法評價",
+ "bad_evaluate": "請提供相關截圖,以便我們跟進核實",
+ "submit": "提交",
+ "evaluation_success": "評價成功",
+ "private_chat": "私聊",
+ "close_reminder": "關閉消息提醒",
+ "closed_reminder": "關閉消息提醒成功",
+ "open_reminder": "開啟消息提醒",
+ "opened_reminder": "開啟消息提醒成功",
+ "her_account": "她的社交賬號",
+ "his_account": "他的社交賬號",
+ "copy": "複製",
+ "send_account": "發送我的社交賬號給她",
+ "enter_account": "輸入你的社交賬號",
+ "for_example": "比如:微信號abc",
+ "sent_she": "發送給她",
+ "chat": "連麥",
+ "cantt_voice": "對方關閉了連麥功能",
+ "authentication_voice": "認證你的真實性後,才能主動連麥",
+ "requesting_voice": "正在請求連麥",
+ "waitting_answer": "正在等待接聽",
+ "answer": "接聽",
+ "hang_up": "掛斷",
+ "chatting": "連麥中",
+ "handsfree": "免提",
+ "giving_gift": "打赏",
+ "give_success": "打賞成功",
+ "others_gift": "對方已打賞",
+ "given_gift": "你已打賞價值/s1H幣的禮物",
+ "earned_gift": "你已獲賞/s1H幣",
+ "available_balance": "可用餘額/s1",
+ "recharge": "充值",
+ "give": "贈送",
+ "balance_insufficien": "抱歉,你的餘額不足了",
+ "first_recharge": "請充值後再送禮物哦!",
+ "give_coin": "本次連麥打賞/s1H幣",
+ "get_coin": "本次連麥獲賞/s1H幣",
+ "give_get": "本次連麥打賞/s1H幣,獲賞了/s2H幣",
+ "chat_over": "連麥已結束,時長/s1",
+ "message_center": "消息中心",
+ "can_chat": "你可以在對方的用戶詳情頁發起私聊",
+ "text_chat": "聊天",
+ "system_information": "系統消息",
+ "system_notification": "系統通知",
+ "report_failure": "你舉報用戶/s1的情況不屬實,請提供更有效的證據後再次舉報。謝謝!",
+ "report_success": "你舉報用戶/s1的情況屬實,系統已對該用戶進行處理",
+ "successful_application": "邀請碼申請成功!邀請碼【/s1】(點擊可複制)",
+ "successful_application2": "邀請碼申請成功,感謝你介紹靠譜的朋友!邀請碼【/s1】(點擊可複制)",
+ "application_failed": "邀請碼申請失敗!很遺憾您的申請未能通過審核,請填寫真實信息將有效的提高審核通過率",
+ "important_notice": "【重要通知】:",
+ "authentication_failed": "你的認證資料不符合要求,請修改後重新提交。",
+ "request1": "1.請根據認證要求拍攝認證視頻",
+ "request2": "2.請在相冊上傳五官清晰的正臉本人照片",
+ "successful_authentication": "恭喜,你的認證申請已通過審核",
+ "re_upload": "你新上傳的照片沒有通過審核,請根據要求重新上傳",
+ "upload_success": "恭喜,你新上傳的照片已成功通過審核",
+ "caveat": "您的約會報名因違規被刪除,多次違規或情節嚴重系統將對您賬號進行限制甚至封號,請遵守謹記,謝謝配合",
+ "caveat2": "您的評論因違規被刪除,多次違規或情節嚴重系統將對您賬號進行限制甚至封號,請遵守謹記,謝謝配合",
+ "radio_message": "電台消息",
+ "no_message": "暫時沒有此類消息",
+ "dating_news": "/s1在/s2發布了一條約會消息,點擊查看",
+ "go_see": "去看看",
+ "thumbs_up": "/s1讚了你的動態",
+ "thumbs_up2": "/s1讚了你的約會節目",
+ "comment1": "/s1評論了你的動態",
+ "comment2": "/s1評論了你的約會節目",
+ "replied_comment": "/s1回復了你的評論",
+ "signed_up": "/s1報名了你的約會節目",
+ "favorite_user": "你喜歡的用戶/s1發布了一條約會,點擊查看",
+ "favorite_user2": "你喜歡的用戶/s1發布了一條動態,點擊查看",
+ "wallet_reminder": "錢包提醒",
+ "paid_you": "/s1付費了(/s2H幣)查看了你的紅包照片",
+ "paid_you2": "/s1付費了(/s2H幣)查看了你的相冊",
+ "paid_you3": "/s1付費解鎖了你的全部資料",
+ "view_application": "查看申請",
+ "view_application2": "/s1請求查看你的詳情頁",
+ "aging": "允許(有效期15天)",
+ "refuse": "拒絕",
+ "passed_request": "已通過請求",
+ "l15_days": "/s1已通過你的查看申請,有效期15天",
+ "evaluation_notice": "評價通知",
+ "rate_her": "已經約出/s1了嗎?趕快評價一下她吧",
+ "received_evaluation": "聯繫過你的女士用戶(匿名)對你進行了評價:/s1",
+ "received_evaluation2": "聯繫過你的男士用戶(匿名)對你進行了評價:/s1",
+ "application_appeal": "如果評價不屬實,你可申請上述,我們會進行核實",
+ "appeal": "我要上訴",
+ "appealed": "已申請上訴",
+ "waiting_results": "我們會盡快核實情況,並通過站內信告訴你處理結果",
+ "successful_appeal": "你上訴的評價:/s1上訴成功,我們將為你撤銷此評價。",
+ "social_account": "社交賬號",
+ "get_account": "/s1向你發送了他的社交賬號",
+ "edit_information": "編輯資料",
+ "save": "保存",
+ "passed_verification1": "你通過了身份安全核實",
+ "by_code": "你通過資深用戶/s1的邀請碼加入",
+ "by_paying": "你通過付費加入",
+ "passed_verification": "你已通過視頻認證身份真實性",
+ "not_certified": "你還沒有認證身份真實性",
+ "verificating": "我們正在認證你的真實性",
+ "real_girl": "經過認證的女生更受歡迎哦",
+ "certificating": "認證中",
+ "re_upload2": "待重新上傳視頻",
+ "update_certification": "更新認證",
+ "enjoy_privileges": "升級會員尊享特權",
+ "expires": "/s1到期",
+ "wallet": "錢包",
+ "setting": "隱私",
+ "my_dynamic": "我的動態",
+ "my_album": "我的相冊",
+ "first_photo": "上傳我的第一張照片",
+ "no_photo": "有照片才能吸引男士哦",
+ "upload_photos": "上傳照片",
+ "upload_video": "上傳視頻",
+ "upload": "上傳照片",
+ "set_photo": "設置紅包照片",
+ "photo_order": "長按拖動可對照片排序",
+ "my_evaluation": "我的評價",
+ "my_show": "我的節目",
+ "i_like": "我喜歡的",
+ "your_favorite": "你喜歡的女士會顯示這裡",
+ "your_favorite2": "你喜歡的男士會顯示這裡",
+ "no_data": "沒有數據",
+ "historical_visitor": "歷史訪客",
+ "visit_you": "有/s1個人看過你",
+ "visit_photo": "已有/s1個人焚毀了你的照片",
+ "recovery_photo": "一鍵恢復",
+ "setting2": "設置",
+ "apply_code": "幫朋友申請邀請碼",
+ "issue_choose": "申請邀請碼是免費的,我們會根據你的歷史消費來評估是否發放邀請碼。為維持公園的氛圍,請一定把邀請碼贈與靠譜的朋友",
+ "successfully_submit": "成功遞交申請",
+ "share_app": "分享APP給朋友",
+ "need_help": "有問題需要幫助",
+ "need_help2": "聯繫客服",
+ "need_help3": "為了提高服務效率,如果下面有您的問題,請直接回复序號數字哦!",
+ "question1": "【1】賬號被凍結是什麼原因?",
+ "answer1": "出現下述任意一種情況,賬號都會被凍結:①騙子②中介③騷擾廣告④多人舉報⑤已有其他賬號⑥多次發布違規電台廣播無視警告⑦用戶自己要求註銷",
+ "question2": "【2】錢包現金什麼時候才能提現?",
+ "answer2": "所有收益會直接進入到錢包,提現需要三天(按收取時間計算開始),三天后收取的金額將會進入到錢包,金額>=10元即可提現",
+ "question3": "【3】我發出的紅包怎麼沒有顯示?",
+ "answer3": "可能是網絡原因導致。放心,這種情況對方無法領取你的紅包,紅包將在24小時後自動退還到你的支付渠道",
+ "question4": "【4】提現需要多久到賬?",
+ "answer4": "提交提現申請後兩個工作日內到賬。溫馨提示:提現時請確認賬號無誤!",
+ "question5": "【5】如何匿名舉報其他用戶/電台廣播內容?",
+ "answer5": "進入對方詳情頁或選擇某條電台廣播,點擊右上角選擇【匿名舉報】,請填寫相關舉報信息即可對其發起舉報。",
+ "question6": "【6】如何成為認證用戶?",
+ "answer6": "認證通過需滿足以下要求:①個人資料填寫有效社交賬號②相冊至少上傳一張本人清晰的正臉照③在認證頁面查看驗證碼,在紙上寫上暱稱+驗證碼④拿著這張紙,與你的正臉合拍一段視頻,點擊上傳認證視頻",
+ "question7": "【7】認證的視頻可以不公開嗎?",
+ "answer7": "可以在設置裡選擇是否公開:用戶中心-點擊認證視頻-左下角'將認證視頻顯示在我的詳情頁'",
+ "question8": "【8】如何避免認證被取消?",
+ "answer8": "相冊至少有一張被標記為本人的照片",
+ "question9": "【9】電台廣播被刪除是什麼原因?",
+ "answer9": "電台廣播不能發布敏感圖,敏感詞,包括但不限於暗示或明示性詞語,不能發布個人信息(包括頭像,暱稱,聯繫方式),違規電台廣播將被刪除",
+ "question10": "【10】如何註銷賬號?",
+ "answer10": "註銷賬號將無法登錄APP,以後再想使用服務則需要重新註冊,請謹慎考慮。如果你仍然決定註銷賬號,請回复序號【12】聯繫客服",
+ "question11": "【11】忘記密碼怎麼辦?",
+ "answer11": "通過手機號碼註冊或者綁定手機號碼的用戶,可以通過登錄頁面右上角的“忘記密碼”功能重置密碼。未綁定用戶請先綁定手機號,再設置新的登錄密碼",
+ "question12": "【12】其他問題/轉接人工客服",
+ "answer12": "你好,請問有什麼問題可以幫你?請描述你的問題(客服上班時間為每天8:00-次日02:00,由於諮詢人數較多,你可能需要等待回复)",
+ "certification_center": "認證中心",
+ "for_example2": "認證視頻拍攝方式示例",
+ "certification_conditions": "認證條件",
+ "conditions1": "1.個人形象良好",
+ "conditions2": "2.相冊中至少上傳一張本人照片",
+ "verification_method": "認證方式",
+ "method3": "1.取一張紙,寫上你的暱稱和以下驗證碼:",
+ "method4": "2.拿著這張紙,與你的正臉合拍一段視頻(3~15秒)",
+ "upload_video2": "上傳認證視頻",
+ "after_authentication": "認證成功後,你的頭像會帶有real標誌",
+ "show_video": "將認證視頻顯示在我的詳情頁",
+ "uploaded_video": "已上傳的認證視頻",
+ "under_review": "審核中(24小時內)",
+ "certification_status": "認證狀態",
+ "certified": "你已通過認證",
+ "wait_resubmitted": "認證待重提",
+ "reason_failure": "您的認證視頻不符合要求,原因是:",
+ "claim": "請根據認證要求拍攝認證視頻",
+ "claim2": "請在相冊上傳清晰展示五官的正臉本人照片",
+ "re_upload_video": "重新上傳認證視頻",
+ "update_video": "更新上傳認證視頻",
+ "mask_coin": "H幣",
+ "get_way": "你可以通過充值或者開麥等途徑獲得H幣。",
+ "coin_use": "H幣可用於使用連麥服務,並且在連麥時進行打賞。",
+ "coin_total": "H幣總額",
+ "can_redeemed": "可兌消",
+ "who_account": "/s1賬號",
+ "bind_account": "綁定/s1賬號",
+ "your_account": "你的/s1賬號",
+ "get_coin2": "你通過充值獲得了/s1H幣",
+ "viewed_your": "/s1查看了你的社交賬號",
+ "give_gift": "/s1贈送了禮物:1個/s2",
+ "add_coin": "+/s1H幣",
+ "give_one": "你贈送了1個/s1給/s2",
+ "less_coin": "-/s1H幣",
+ "exchange_cash": "提現",
+ "withdrawal_application": "提現申請",
+ "redeem_choose": "你有/s1枚H幣可兌換成/s2,兌換後剩餘/s3枚H幣。確定申請兌換嗎?",
+ "application_submitted": "提現申請已提交",
+ "working_days": "我們將在2個工作日內處理,有疑問可諮詢客服",
+ "cash": "現金",
+ "handling_fee": "每當你再聊天頁面收到紅包,紅包金額都會進入這裡。金額進賬後3天內沒人舉報你即可提現,提現將收取5%手續費",
+ "total_account": "賬戶總額",
+ "cannot_redeemed": "金額不足,無法兌消",
+ "successful_redemption": "兌消成功",
+ "redeem_choose2": "你的賬戶總額為/s1元,本次可提現/s2元,確定申請提現嗎?",
+ "personal_details": "個人詳情",
+ "public": "公開(推薦)",
+ "paid_album": "相冊付費查看",
+ "must_pay": "他人必須付費才能查看你的相冊,費用由你定,這可能會降低你的訪問量",
+ "set_amount1": "設置查看金額",
+ "first_upload": "請先上傳照片,再設置付費相冊",
+ "need_permission": "查看前需通過我驗證",
+ "permission_choose": "他人必鬚髮照片讓你驗證身份後才能瀏覽你的主頁,確定嗎?",
+ "hide_me": "在附近的人列表隱藏我",
+ "hide_distance": "對他人隱藏我的距離",
+ "hide_account": "對他人隱藏我的社交賬號",
+ "chat_setting": "連麥控制",
+ "chat_me": "允許有私聊權限的人對我發起連麥",
+ "successfully_saved": "保存成功",
+ "on_dynamic": "你還沒有發布過動態",
+ "release_dynamics": "發布動態",
+ "dynamic_details": "動態詳情",
+ "release": "發布",
+ "i_posted": "我發布的",
+ "delete_dynamic": "刪除動態",
+ "delete_choose": "確定要刪除這條動態嗎?",
+ "posted_on": "發佈於/s1",
+ "thumbs_up3": "贊",
+ "already_praised": "已經贊過了",
+ "comment": "評論",
+ "send": "發送",
+ "comment_closed": "評論已關閉",
+ "your_comment": "只有發布者能看見你的評論",
+ "everyone_comment": "大家都能看見你的評論",
+ "prohibit_comments": "禁止評論",
+ "comments_disabled": "已禁止評論",
+ "open_comments": "開放評論",
+ "already_open": "已經開放評論",
+ "reply": "回复",
+ "report": "舉報",
+ "report_choose": "確定舉報這條評論嗎?",
+ "successful_report": "舉報成功,我們會盡快處理",
+ "successfully_deleted": "刪除成功",
+ "please_civilization": "談吐文明的人更受歡迎,請勿發布低俗、色情交易、或曝光他人隱私的內容",
+ "same_sex": "對同性別用戶隱藏",
+ "member_free": "會員免費,非會員需/s1H幣",
+ "certified_free": "已認證女士免費3次,之後需要支付/s1H幣",
+ "enter_something": "請輸入文字內容或選擇圖片",
+ "raid_release": "付費發布(/s1H幣)",
+ "become_member2": "成為會員,免費發布",
+ "now_certification": "馬上認證,免費發布",
+ "successfully_released": "發布成功",
+ "no_program": "你還沒有發布過節目",
+ "program_details": "節目詳情",
+ "program_theme": "節目主題",
+ "click_select": "點擊選擇",
+ "city": "城市",
+ "select_city": "選擇城市",
+ "time": "時間",
+ "select_date": "選擇日期",
+ "select_time": "選擇時間",
+ "unlimited_time": "不限時間",
+ "supplementary_explanation": "補充說明",
+ "image": "配圖",
+ "delete_program": "刪除節目",
+ "delete_choose2": "確定要刪除這條節目嗎?",
+ "please_choose": "請選擇節目主題",
+ "please_choose2": "請選擇期望對象",
+ "please_choose3": "請選擇城市",
+ "please_choose4": "請選擇日期",
+ "please_choose5": "請選擇時間",
+ "release_program": "發布節目",
+ "sign_up": "報名",
+ "end_registration": "結束報名",
+ "end_choose": "確定結束約會嗎?",
+ "contact_her": "聯繫她",
+ "talk_him": "私聊他",
+ "report_choose2": "確定舉報這條報名信息嗎?",
+ "release_time": "發佈時間",
+ "activity_time": "活動時間",
+ "any_sex": "不限性別",
+ "look_women": "只看女士",
+ "look_men": "只看男士",
+ "unlimited_area": "不限地區",
+ "program_deleted": "該節目已刪除",
+ "cant_comment": "非會員不能評論",
+ "sign_up2": "我要報名",
+ "need_photo2": "報名需要發送你的正臉照片(只有對方能看到)",
+ "registration_success": "報名成功,如果對方覺得合適將會聯繫你",
+ "has_ended": "已結束",
+ "men_cant": "男士不能報名男士的節目",
+ "ms_cant": "女士不能報名女士的節目",
+ "men_cant2": "男士不能評論男士的節目",
+ "ms_cant2": "女士不能評論女士的節目",
+ "message_push": "消息推送、修改密碼",
+ "phone_number": "手機號碼",
+ "bind_phone1": "綁定手機號",
+ "more_safer": "綁定手機號,讓你的賬戶更安全",
+ "modify_choose": "你想修改綁定的手機號碼嗎?",
+ "change_password": "修改密碼",
+ "first_bind": "用戶需要先綁定手機號碼才可以設置登錄密碼",
+ "old_password": "原密碼",
+ "current_password": "請輸入當前登錄密碼",
+ "new_password": "新密碼",
+ "set_new": "請設置新密碼,不少於6位",
+ "clear_cache": "清除圖片緩存",
+ "cleared_successfully": "清除成功",
+ "user_agreement1": "用戶使用協議",
+ "sign_out": "退出登錄",
+ "out_choose": "確定退出賬號麼?",
+ "push_settings": "推送設置",
+ "permission_denied": "權限已被拒絕",
+ "push_setting2": "消息推送設置",
+ "private_chat2": "私聊消息",
+ "new_date": "有新的約會",
+ "passed_request2": "有女士通過了我的查看請求",
+ "men_view": "有男士申請查看我的資料頁",
+ "men_view2": "有男士查看我的社交賬號",
+ "men_view3": "有男士查看我的紅包照片",
+ "men_view4": "有已查看資料的男士給我發送社交賬號",
+ "applied_successfully": "邀請碼申請成功",
+ "after_open": "打開後將推送相應消息類型",
+ "if_something": "如果你在最近3天曾向她/他支付過費用,我們核實舉報後,系統將自動向你退回消費金額",
+ "advertise": "發廣告",
+ "false_photo": "虛假照片",
+ "erotic_vulgarity": "色情低俗",
+ "harassment": "騷擾謾罵",
+ "she_liar": "她是騙子",
+ "he_liar": "他是騙子",
+ "provide_screenshots": "請提供相關截圖,以便我們跟進核實",
+ "describe_details": "請描述詳情(100字內)",
+ "report_reason": "請選擇舉報原因",
+ "report_success2": "舉報成功",
+ "successfully_modified": "修改成功",
+ "boy": "男生",
+ "girl": "女生",
+ "already_applied": "已申請",
+ "view_registration": "查看報名",
+ "expand": "展開",
+ "collapse": "收起",
+ "application_notice": "申請通知",
+ "agrees_application": "有用戶同意你的申請",
+ "red_photo": "紅包照片",
+ "dont": "請勿上傳非法裸露低俗的照片/視頻,嚴重者將封號",
+ "current_version": "當前版本",
+ "bank_card": "綁定銀行卡",
+ "choose_bank": "請選擇開戶行",
+ "bank_number": "請輸入銀行卡號",
+ "id_number": "請輸入證件號",
+ "name": "姓名",
+ "bank_number2": "銀行卡號",
+ "license_number": "證件號",
+ "bind_phone": "綁定手機號",
+ "his_homepage": "他的主頁",
+ "her_homepage": "她的主頁",
+ "wechat_pay": "微信支付",
+ "facebook_pay": "facebook支付",
+ "google_pay": "google支付",
+ "payment_successful": "支付成功",
+ "set_amount": "設置提款金額",
+ "enter_amount": "請輸入H幣個數",
+ "can_withdraw": "可提現",
+ "language_set": "語言設置",
+ "user_agreement": "用戶協議",
+ "renewal_fee": "續費",
+ "open_immediately": "立即開通",
+ "total": "總計",
+ "half_month": "半 個 月",
+ "month2": "/s1 個 月",
+ "cancel_shield": "取消屏蔽",
+ "blacklist2": "黑名單",
+ "longTime": "(會員可延長時間達6秒)",
+ "longClick": "按住屏幕查看",
+ "stop_program": "請先結束正在生效的節目",
+ "not_love": "男士不能收藏男士",
+ "not_love2": "女士不能收藏女士",
+ "women_free": "女士可以免費發布",
+ "not_up_man": "他還沒有上傳照片",
+ "not_up_women": "她還沒有上傳照片",
+ "not_illage": "請勿通過平台進行不法交易,如被舉報核實將作封號處理",
+ "alreay_join": "已報名",
+ "sure_delete": "確定刪除這張照片嗎",
+ "white_now": "馬上填寫",
+ "personal": "你還沒有填寫個人介紹,吸引人的個人介紹對約會成功影響很大哦",
+ "success": "成功",
+ "fail": "失敗",
+ "moneyPageTip": "只有認證用戶才可以設置紅包照片",
+ "alreadyJoin": "你已報名,如果對方覺得合適將會聯繫你",
+ "waring": "違規警告",
+ "userPravicy": "尊重用戶隱私,請勿截圖。如有下次,將禁止你查看其他用戶照片",
+ "outTime": "約會時間已經過期了,請修改",
+ "reviewing": "審核中",
+ "reviewed": "審核成功",
+ "reviewedFail": "審核失敗",
+ "needCard": "用戶需要先綁定銀行卡才可以提現",
+ "women_not_d": "女士不能評論女士的動態",
+ "man_not_d": "男士不能評論男士的動態",
+ "have_picture": "有照片才能吸引女士哦",
+ "up_cancle": "上滑取消發送",
+ "msg_not": "消息不能為空",
+ "need_record": "此功能需要授予錄音權限",
+ "downloading_video": "正在下載視頻文件",
+ "reinput": "請重新輸入問題序號",
+ "dy_delete": "你的動態被用戶匿名舉報,經系統核實已將該動態刪除,請勿再進行違規操作",
+ "pro_delete": "你的節目被用戶匿名舉報,經系統核實已將該節目刪除,請勿再進行違規操作",
+ "con_delete": "你的評論被用戶匿名舉報,經系統核實已將該評論刪除,請勿再進行違規操作",
+ "coin_returen": "經匿名用戶舉報,系統核實你近期存在違規行為,已將你近期收到H幣進行返還。如有下次,將進行賬號凍結",
+ "voicing": "通話中禁止出現色情淫穢等違法行為,一經發現將做封號處理",
+ "help": "客服",
+ "translate_on": "人工翻譯開啟",
+ "translate_off": "人工翻譯關閉",
+ "becomeSvip": "消耗/s1 H幣將續費為SVIP",
+ "need_svip": "svip權限可開啟",
+ "cannot_vip": "SVIP無法續費為VIP",
+ "offline": "您已離線,無法發送和接收消息",
+ "otherLogin": "賬號在其他設備登錄,您已離線",
+ "no_new": "暫時沒有新消息",
+ "over": "翻譯完畢",
+ "bad_ev": "確定要對此條翻譯進行差評麼?",
+ "right5": "聊的更爽",
+ "right6": "用的更爽",
+ "man_vi": "小哥哥",
+ "women_vi": "小姐姐",
+ "kf_tips": "為了提高服務效率,如果下面有您的問題,請直接回复序號數字哦!",
+ "rejected": "已拒絕",
+ "buy_vip": "你消費了/s1H幣購買會員",
+ "buy_program": "你消費了/s1H幣發布動態節目",
+ "del_add_money": "你的H幣提現申請已處理,已轉賬/s1到你的賬號,請查收",
+ "adding_money": "你申請提現的/s1H幣正在審批中",
+ "free_translate": "免費享受翻譯專員實時翻譯",
+ "personalTraff": "專享客服為你服務",
+ "ManTranslate": "人工翻譯中...",
+ "robotTranslate": "機器翻譯中...",
+ "translated": "人工翻譯完畢",
+ "delete_progarm": "健康交流,請勿廣播低俗內容,一經發現將作刪除處理",
+ "open_location": "定位權限未開啟",
+ "get_location": "請在手機設置中開啟定位權限以獲得其他用戶距離",
+ "confirm_exit": "再按一次退出",
+ "free_program": "每天/s1次機會發布免費廣播",
+ "picture": "圖片",
+ "camera": "相機",
+ "video": "視頻",
+ "red_money": "紅包",
+ "stick": "粘貼",
+ "press_say": "按住說話",
+ "get_money": "/s1領取了你的紅包",
+ "you_get_money": "你領取了/s1的紅包",
+ "ones_money": "/s1的紅包",
+ "money_over": "紅包已過期",
+ "downloading_fail": "下載文件失敗",
+ "downloading": "正在下載視頻文件",
+ "back_money": "未領取的紅包,將於24小時後發起退款",
+ "no_money": "紅包不存在",
+ "already_money": "紅包已領取",
+ "back_user": "已過期,已退到賬戶",
+ "waiting_user": "等待對方領取",
+ "other_get": "對方已領取",
+ "little": "小小意思,拿去浪吧",
+ "put_money": "塞錢進紅包",
+ "mount": "金額",
+ "over_time": "已過期",
+ "has_get": "已領取",
+ "no_gift": "暫時沒有禮物",
+ "sent_gift": "打賞禮物",
+ "fill_tips": "填寫成功可以獲得/s1H幣,綁定後無法修改",
+ "bind_code": "綁定邀請碼",
+ "invide_code": "邀請碼",
+ "confirm_delete": "確認刪除",
+ "has_eva": "您已經評價過了",
+ "open": "開",
+ "voice": "語音",
+ "release_send": "鬆開發送",
+ "time_little": "錄音時間過短",
+ "not_online": "對方不在線,無法連麥",
+ "give_red_money": "你給/s1發送了/s2H幣的紅包",
+ "get_red_money": "你領取了/s1的/s2H幣的紅包",
+ "give_other_money": "你打賞了/s1/s2H幣",
+ "get_other_money": "你獲得了/s1的/s2H幣的打賞",
+ "svip": "超級會員",
+ "recommend": "推薦",
+ "paid_you4": "你付費了(/s2H幣)查看/s1的紅包照片",
+ "paid_you5": "你付費了(/s2H幣)查看/s1的相冊",
+ "paid_you6": "你付費解鎖了/s1的全部資料",
+ "UG_LINE0": "hiAPP許可及服務協議",
+ "UG_LINE1": "[首部及導言]",
+ "UG_LINE2": "前海遊龍科技有限公司(以下簡稱“Qianhai Youlong Technology Co., Ltd.”)在此特別提醒用戶認真閱讀、充分理解本《服務協議》(下稱《協議》)一用戶應認真閱讀、充分理解本《協議》中各條款,包括免除或者限制Qianhai Youlong Technology Co., Ltd.責任的免責條款及對用戶的權利限制條款。請您審慎閱讀並選擇接受或不接受本《協議》(未成年人應在法定監護人陪同下閱讀)。除非您接受本《協議》所有條款,否則您無權註冊、登錄或使用本協議所涉相關服務。您的註冊、登錄、使用等行為將視為對本《協議》的接受,並同意接受本《協議》各項條款的約束。",
+ "UG_LINE3": "本《協議》是您(下稱“用戶”與Qianhai Youlong Technology Co., Ltd.之間關於用戶註冊、登錄、使用“hi服務所訂立的協議。本《協議》描述Qianhai Youlong Technology Co., Ltd.與用戶之間關於“hi服務相關方面的權利義務。“用戶”是指註冊、登錄、使用、瀏覽本服務的個人或組織。您對本協議的接受即受全部條款的約束,包括接受Qianhai Youlong Technology Co., Ltd.對任意服務條款隨時所做的任何修改。本《協議》可由Qianhai Youlong Technology Co., Ltd.隨時更新,更新後的協議條款一旦公佈即代替原來的協議條款,恕不再另行通知,用戶可在本APP查閱最新版協議條款。在Qianhai Youlong Technology Co., Ltd.修改《協議》條款後,如果用戶不接受修改後的條款,請立即停止使用Qianhai Youlong Technology Co., Ltd.提供的服務,用戶繼續使用Qianhai Youlong Technology Co., Ltd.提供的服務將被視為已接受了修改後的協議。",
+ "UG_LINE4": "一、使用規則",
+ "UG_LINE5": "1、用戶充分了解並同意,僅為用戶提供信息分享、傳送及獲取的平台,用戶必須為自己註冊帳號下的一切行為負責,包括但不限於您所傳送的任何內容以及由此產生的任何結果。",
+ "UG_LINE6": "2、用戶在服務中或通過服務所傳送的任何內容並不反映Qianhai Youlong Technology Co., Ltd.的觀點或政策,Qianhai Youlong Technology Co., Ltd.對此不承擔任何責任。",
+ "UG_LINE7": "3、用戶充分了解並同意,是一個基於用戶關係網的社交信息瀏覽產品,用戶須對在上的註冊信息的真實性、合法性、有效性承擔全部責任,用戶不得冒充他人;不得利用他人的名義傳播任何信息;不得惡意使用註冊帳號導致其他用戶誤認;否則Qianhai Youlong Technology Co., Ltd.有權立即停止提供服務,收回帳號並由用戶獨自承擔由此而產生的一切法律責任。",
+ "UG_LINE8": "4、用戶須對在上所傳送信息的真實性、合法性、無害性、有效性等全權負責,與用戶所傳播的信息相關的任何法律責任由用戶自行承擔,與Qianhai Youlong Technology Co., Ltd.無關。",
+ "UG_LINE9": "5、Qianhai Youlong Technology Co., Ltd.保留因業務發展需要,單方面對本服務的全部或部分服務內容在任何時候不經任何通知的情況下變更、暫停、限制、終止或撤銷服務的權利,用戶需承擔此風險。",
+ "UG_LINE10": "6、提供的服務中可能包括廣告,用戶同意在使用過程中顯示和第三方供應商、合作夥伴提供的廣告。",
+ "UG_LINE11": "7、用戶不得利用或服務製作、上載、複製、發送如下內容:",
+ "UG_LINE12": "(1 )反對憲法所確定的基本原則的;",
+ "UG_LINE13": "(2)危害國家安全,洩露國家秘密,顛覆國家政權,破壞國家統一-的;",
+ "UG_LINE14": "(3)損害國家榮譽和利益的;",
+ "UG_LINE15": "(4)煽動民族仇恨、民族歧視,破壞民族團結的;",
+ "UG_LINE16": "(5)破壞國家宗教政策,宣揚邪教和封建迷信的;",
+ "UG_LINE17": "(6)散佈謠言,擾亂社會秩序,破壞社會穩定的;",
+ "UG_LINE18": "(7)散佈淫穢、色情、賭博、暴力、兇殺、恐怖或者教唆犯罪的;",
+ "UG_LINE19": "(8)侮辱或者誹謗他人,侵害他人合法權益的;",
+ "UG_LINE20": "(9)含有法律、行政法規禁止的其他內容的信息。",
+ "UG_LINE21": "8、Qianhai Youlong Technology Co., Ltd.可依其合理判斷,對違反有關法律法規或本協議約定;或侵犯、妨害、威脅任何人權利或安全的內容,或者假冒他人的行為,Qianhai Youlong Technology Co., Ltd.有權依法停止傳輸任何前述內容,並有權依其自行判斷對違反本條款的任何人士採取適當的法律行動,包括但不限於從服務中刪除具有違法性、侵權性、不當性等內容,終止違反者的成員資格,阻止其使用全部或部分服務,並且依據法律法規保存有關信息並向有關部門報告等。",
+ "UG_LINE22": "9、用戶權利及義務:",
+ "UG_LINE23": "(1 )Qianhai Youlong Technology Co., Ltd.帳號的所有權歸Qianhai Youlong Technology Co., Ltd.所有,用戶完成申請註冊手續後,獲得帳號的使用權,該使用權屬於初始申請註冊人,禁止贈與、借用、租用、轉讓或售賣。 Qianhai Youlong Technology Co., Ltd.因經營需要,有權回收用戶的帳號,並有權使用用戶照片、視頻、語音等進行產品宣傳活動。",
+ "UG_LINE24": "(2)用戶有權更改、刪除在Qianhai Youlong Technology Co., Ltd.上的個人資料、註冊信息及傳送內容等,但需注意,刪除有關信息的同時也會刪除任何您儲存在系統中的文字和圖片。用戶需承擔該風險。",
+ "UG_LINE25": "(3)用戶有責任妥善保管註冊帳號信息及帳號密碼的安全,用戶需要對註冊帳號以及密碼下的行為承擔法律責任。用戶同意在任何情況下不使用其他成員的帳號或密碼。在您懷疑他人在使用您的帳號或密碼時,您同意立即通知Qianhai Youlong Technology Co., Ltd.。",
+ "UG_LINE26": "(4)用戶應遵守本協議的各項條款,正確、適當地使用本服務,如因用戶違反本協議中的任何條款,Qianhai Youlong Technology Co., Ltd.有權依據協議終止對違約用戶Qianhai Youlong Technology Co., Ltd.帳號提供服務。同時,Qianhai Youlong Technology Co., Ltd.保留在任何時候收回Qianhai Youlong Technology Co., Ltd.帳號、用戶名的權利。",
+ "UG_LINE27": "(5)如果用戶有自己的常用英文帳號,那麼用戶有優先將該英文帳號註冊為帳號的權利,但是如果用戶在服務上線後一段時間內沒有註冊帳號,或者用戶雖然註冊了微信帳號,但是並不是使用該英文帳號作為微信帳號的,視為用戶放棄了將該英文帳號註冊為微信帳號的權利,Qianhai Youlong Technology Co., Ltd.有權將該英文帳號回收並分配給其他用戶使用,以免造成資源浪費,由此帶來問題均由用戶自行承擔。",
+ "UG_LINE28": "(6)用戶註冊帳號後如果長期不登錄該帳號,Qianhai Youlong Technology Co., Ltd.有權回收該帳號,以免造成資源浪費,由此帶來問題均由用戶自行承擔。",
+ "UG_LINE29": "(7)用戶發生糾紛可使用舉報功能維護用戶平台權益,若收到用戶舉報反饋,被舉報用戶有義務主動告知或配合客服人員核實情況,舉報內容核實屬實,面具公園有權對用戶警告、限制賬號使用功能等方式約束用戶違規行為,嚴重違規者hi有權直接凍結賬號,且賬戶內餘額不返還。如果賬號被凍結需申訴,用戶可聯繫客服 。",
+ "UG_LINE30": "二、隱私保護",
+ "UG_LINE31": "用戶同意個人隱私信息是指那些能夠對用戶進行個人辨識或涉及個人通信的信息,包括下列信息:用戶真實姓名,手機號碼,微信賬號,facebook賬號,IP地址。而非個人隱私信息是指用戶對本服務的操作狀態以及使用習慣等一些明確且客觀反映在Qianhai Youlong Technology Co., Ltd.服務器端的基本記錄信息和其他一切個人隱私信息範圍外的普通信息;以及用戶同意公開的上述隱私信息。尊重用戶個人隱私信息的私有性是Qianhai Youlong Technology Co., Ltd.的一貫制度,Qianhai Youlong Technology Co., Ltd.將會採取合理的措施保護用戶的個人隱私信息,除法律或有法律賦予權限的政府部門要求或用戶同意等原因外,Qianhai Youlong Technology Co., Ltd.未經用戶同意不向除合作單位以外的第三方公開、透露用戶個人隱私信息。但是,用戶在註冊時選擇同意,或用戶與Qianhai Youlong Technology Co., Ltd.及合作單位之間就用戶個人隱私信息公開或使用另有約定的除外,同時用戶應自行承擔因此可能產生的任何風險,Qianhai Youlong Technology Co., Ltd.對此不予負責。同時,為了運營和改善Qianhai Youlong Technology Co., Ltd.的技術和服務,Qianhai Youlong Technology Co., Ltd.將可能會自行收集使用或向第三方提供用戶的非個人隱私信息,這將有助於Qianhai Youlong Technology Co., Ltd.向用戶提供更好的用戶體驗和提高Qianhai Youlong Technology Co., Ltd.的服務質量。 Qianhai Youlong Technology Co., Ltd.收集數據是根據用戶與Qianhai Youlong Technology Co., Ltd.的互動和用戶所做出的選擇,包括用戶的隱私設置以及用戶使用的產品和功能。 Qianhai Youlong Technology Co., Ltd.收集的數據可能包括SDK/API/JS代碼版本、IP地址、平台、時間戳、應用標識符、應用程序版本、應用分發渠道、獨立設備標識符、iOS廣告標識符(IDFA)、 安卓廣告主標識符、網卡(MAC) 地址、國際移動設備識別碼(IMEI)、設備型號、終端製造廠商、終端設備操作系統版本、會話啟動/停止時間、語言所在地、時區和網絡狀態(WiFi等)、硬盤、 CPU和電池使用情況等。這將有助於Qianhai Youlong Technology Co., Ltd.開展內部數據分析和研究,第三方SDK統計服務,改善Qianhai Youlong Technology Co., Ltd.的產品或服務。為確保用戶身份真實性,向用戶提供更好的安全保障,用戶需提交的身份信息或面部特徵等生物識別信息(均屬於個人敏感信息)來完成具體產品服務所需或必要的真人認證。 .上 述信息將僅用於核實用戶身份的真實性。用戶提供的.上述信息,將在用戶使用本服務期間持續授權Qianhai Youlong Technology Co., Ltd.使用。在用戶註銷賬號時,Qianhai Youlong Technology Co., Ltd.將停止使用。上述信息將存儲於中華人民共和國境內。如需跨境傳輸,Qianhai Youlong Technology Co., Ltd.將會單獨徵得用戶的授權同意。 App用戶真實性認證需要用戶提供能證實用戶身份真實性的部分資料。相關資料只用做平台審核不會披露給任何其他用戶或用於商業用途,僅法律或有關部門要求介入除外。",
+ "UG_LINE32": "三、Qianhai Youlong Technology Co., Ltd.商標信息",
+ "UG_LINE33": "Qianhai Youlong Technology Co., Ltd.服務中所涉及的logo等圖形、文字或其組成,以及其他Qianhai Youlong Technology Co., Ltd.標誌及產品、服務名稱,均為Qianhai Youlong Technology Co., Ltd.之商標(以下簡稱“Qianhai Youlong Technology Co., Ltd.標識”)。未經Qianhai Youlong Technology Co., Ltd.事先書面同意,用戶不得將Qianhai Youlong Technology Co., Ltd.標識以任何方式展示或使用或作其他處理,也不得向他人表明您有權展示、使用、或其他有權處理Qianhai Youlong Technology Co., Ltd.標識的行為。",
+ "UG_LINE34": "四、法律責任及免責",
+ "UG_LINE35": "1、用戶違反本《協議》或相關的服務條款的規定,導致或產生的任何第三方主張的任何索賠、要求或損失,包括合理的律師費,用戶同意賠償Qianhai Youlong Technology Co., Ltd.與合作公司、關聯公司,並使之免受損害。",
+ "UG_LINE36": "2、用戶因第三方如電信部門的通訊線路故障、技術問題、網絡、電腦故障、系統不穩定性及其他各種不可抗力原因而遭受的一切損失,Qianhai Youlong Technology Co., Ltd.及合作單位不承擔責任。",
+ "UG_LINE37": "3、因技術故障等不可抗事件影響到服務的正常運行的,Qianhai Youlong Technology Co., Ltd.及合作單位承諾在第一時間內與相關單位配合,及時處理進行修復,但用戶因此而遭受的一切損失,Qianhai Youlong Technology Co., Ltd.及合作單位不承擔責任。",
+ "UG_LINE38": "4、本服務同大多數互聯網服務一樣,受包括但不限於用戶原因、網絡服務質量、社會環境等因素的差異影響,可能受到各種安全問題的侵擾,如他人利用用戶的資料,造成現實生活中的騷擾;用戶下載安裝的其它軟件或訪問的其他網站中含有“特洛伊木馬”等病毒,威脅到用戶的計算機信息和數據的安全,繼而影響本服務的正常使用等等。用戶應加強信息安全及使用者資料的保護意識,要注意加強密碼保護,以免遭致損失和騷擾。",
+ "UG_LINE39": "5、用戶須明白,使用本服務因涉及Internet服務,可能會受到各個環節不穩定因素的影響。因此,本服務存在因不可抗力、計算機病毒或黑客攻擊、系統不穩定、用戶所在位置、用戶關機以及其他任何技術、互聯網絡、通信線路原因等造成的服務中斷或不能滿足用戶要求的風險。用戶須承擔以上風險,Qianhai Youlong Technology Co., Ltd.不作擔保。對因此導致用戶不能發送和接受閱讀信息、或接發錯信息,Qianhai Youlong Technology Co., Ltd.不承擔任何責任。",
+ "UG_LINE40": "6、用戶須明白,在使用本服務過程中存在有來自,任何他人的包括威脅性的、誹謗性的、令人反感的或非法的內容或行為或對他人權利的侵犯(包括知識產權)的匿名或冒名的信息的風險,用戶須承擔以上風險,Qianhai Youlong Technology Co., Ltd.和合作公司對本服務不作任何類型的擔保,不論是明確的或隱含的,包括所有有關信息真實性、適商性、適於某一特定用途、所有權和非侵權性的默示擔保和條件,對因此導致任何因用戶不正當或非法使用服務產生的直接、間接、偶然、特殊及後續的損害,不承擔任何責任。",
+ "UG_LINE41": "7、Qianhai Youlong Technology Co., Ltd.定義的信息內容包括:文字、軟件、聲音、相片、錄像、圖表;在廣告中全部內容;Qianhai Youlong Technology Co., Ltd.為用戶提供的商業信息,所有這些內容受版權、商標權、和其它知識產權和所有權法律的保護。所以,用戶只能在Qianhai Youlong Technology Co., Ltd.和廣告商授權下才能使用這些內容,而不能擅自複制、修改、編纂這.些內容、或創造與內容有關的衍生產品。",
+ "UG_LINE42": "8、在任何情況下,Qianhai Youlong Technology Co., Ltd.均不對任何間接性、後果性、懲罰性、偶然性、特殊性或刑罰性的損害,包括因用戶使用服務而遭受的利潤損失,承擔責任(即使已被告知該等損失的可能性亦然)。儘管本協議中可能含有相悖的規定,Qianhai Youlong Technology Co., Ltd.對您承擔的全部責任,無論因何原因或何種行為方式,始終不超過您在成員期內因使用服務而支付給Qianhai Youlong Technology Co., Ltd.的費用。",
+ "UG_LINE43": "五、會員條款",
+ "UG_LINE44": "1、hi會員平等享有會員的權利,同時應遵守Qianhai Youlong Technology Co., Ltd.的各項規範、規則,包括但不限於本服務條款和《用戶協議》。",
+ "UG_LINE45": "2、因違反Qianhai Youlong Technology Co., Ltd.《用戶協議》而導致會員服務被暫停使用的相關損失,由用戶自行承擔。",
+ "UG_LINE46": "3、會員在會員資格有效期內可以享受hi會員的各項增值服務。",
+ "UG_LINE47": "4、如會員在會員資格有效期內主動終止或取消會員資格,Qianhai Youlong Technology Co., Ltd.不負責退還與該會員剩餘會員資格有效期對應的服務費用。",
+ "UG_LINE48": "5、會員自行承擔在hi中傳送、發布信息及使用hi免費服務或收費服務的法律責任,會員使用hi服務,包括免費服務與收費服務的行為,均應遵守各項法律法規、規章、規範性文件。",
+ "UG_LINE49": "6、會員服務開通之後,不可進行轉讓或退訂。",
+ "UG_LINE50": "7、因會員在使用Qianhai Youlong Technology Co., Ltd.免費服務或收費服務的過程中,存在違反法律法規的行為,Qianhai Youlong Technology Co., Ltd.有權取消該會員的會員資格而無須給予任何補償,且該會員須自行承擔全部責任。",
+ "UG_LINE51": "六、其他條款",
+ "UG_LINE52": "1、Qianhai Youlong Technology Co., Ltd.鄭重提醒用戶注意本《協議》中免除Qianhai Youlong Technology Co., Ltd.責任和加重用戶義務的條款,請用戶仔細閱讀,自主考慮風險。未成年人應在法定監護人的陪同下閱讀本《協議》。以上各項條款內容的最終解釋權及修改權歸Qianhai Youlong Technology Co., Ltd.所有。",
+ "UG_LINE53": "2、本《協議》所定的任何條款的部分或全部無效者,不影響其它條款的效力。",
+ "UG_LINE54": "3、本《協議》的解釋、效力及糾紛的解決,適用於中華人民共和國法律。若用戶和Qianhai Youlong Technology Co., Ltd.之間發生任何糾紛或爭議,首先應友好協商解決,協商不成的,用戶在此完全同意將糾紛或爭議提交Qianhai Youlong Technology Co., Ltd.住所地的人民法院管轄。",
+ "UG_LINE55": "4、本《協議》的版權由Qianhai Youlong Technology Co., Ltd.所有,Qianhai Youlong Technology Co., Ltd.保留一切解釋和修改權利。",
+ "UG_LINE56": "前海遊龍科技有限公司",
+ "net_error": "網絡異常",
+ "enter_name": "請輸入姓名",
+ "translate": "譯",
+ "locate": "位置",
+ "voice_tips": "按住錄音,鬆開發送",
+ "unlock": "解鎖",
+ "input_content": "請輸入聊天內容",
+ "connecting": "連接中...",
+ "logining": "登陸中...",
+ "reject_reply": "/s1拒絕了你的查看申請",
+ "warning_text": "H幣進賬3天內沒人舉報你即可兌消(1:1000越南盾)",
+ "more_big": "輸入個數不大於/s1",
+ "little_min": "輸入個數不小於/s1",
+ "voice_msg": "/s1邀請你進行通話",
+ "send_gift": "你打賞了對方/s1個/s2",
+ "receive_gift": "對方打賞了你/s1個/s2",
+ "cannot_join": "非會員不能報名",
+ "alreay_back": "已退回",
+ "video_more_big": "文件過大",
+ "select_all": "選擇所有",
+ "re_connect": "重新連接",
+ "voice_tips2": "鬆開發送,滑動取消",
+ "country": "國籍",
+ "have_picture_view": "有照片審核中",
+ "speaker_play": "揚聲器播放",
+ "handset_playback": "聽筒播放",
+ "play_model": "聽筒模式",
+ "password_less": "密碼過短",
+ "years_old": "歲",
+ "coin_returen1": "經匿名用戶舉報,系統核實你近期存在違規行為,請勿再進行違規操作。如有下次,將進行賬號凍結",
+ "already_new": "已經是最新版本",
+ "test_it": "立即體驗",
+ "found_new": "發現新版本",
+ "ad": "廣告",
+ "attention": "關注",
+ "fans": "粉絲",
+ "apply_see": "/s1 申請查看我的資料頁",
+ "agree_apply": "/s1 通過了我的查看請求",
+ "see_redBag": "/s1 查看了我的紅包照片",
+ "notice": "提醒",
+ "notice_open": "請在手機設置中開啟通知權限以獲取消息通知",
+ "open_notice": "通知權限未開啟",
+ "not_open": "未開啟通知權限,無法接收通知",
+ "withdraw_fail": "你申請提現的的/s1H幣已被退回,請確認綁定賬戶是否正確",
+ "dynamics": "動態",
+ "Remark": "備註",
+ "setRemark": "設置備註",
+ "content_num": "/s1條評論",
+ "Redeem": "積分兌換獲得/s1H幣",
+ "location_permission": "沒有訪問手機存儲權限",
+ "camera_permission": "沒有訪問攝像頭權限",
+ "photo_permission": "沒有訪問相冊的權限",
+ "video_permission": "沒有訪問麥克風的權限",
+ "your_redMoney_over": "你發送的紅包已過期",
+ "other_redMoney_over": "對方發送的紅包已過期",
+ "server_error_tips": "貌似出了點問題...",
+ "emoji": "表情",
+ "today_score": "今日簽到可領取/s1積分",
+ "sign_tips": "1、每日簽到可領取積分,累計天數越多積分越高。\n2、積分可兌換H幣,兌換將消耗對應積分,請慎重兌換。\n3、每月最後一天將重置簽到,清零積分,請記得及時兌換。",
+ "sign_in": "簽到",
+ "my_score": "我的積分",
+ "signin_now": "立即簽到",
+ "sign_in_day": "已累積簽到/s1天",
+ "have_get": "已兌換",
+ "scan": "掃一掃",
+ "my_qr": "我的二維碼",
+ "scan_and_add": "掃一掃,加好友",
+ "amap": "高德地圖",
+ "baidumap": "百度地圖",
+ "googlemap": "谷歌地圖",
+ "applemap": "蘋果地圖",
+ "go_open": "去開啟",
+ "Preview": "預覽",
+ "Photo_album": "相冊",
+ "all_photo": "全部圖片",
+ "have_select": "您已經選擇了/s1張圖片",
+ "loading": "加載中...",
+ "new_chat_msg": "您有新的聊天消息",
+ "new_video_msg": "您有新的連麥消息",
+ "apply_friends": "/s1申請成為你的好友",
+ "applyed_friends": "/s1通過了你的好友請求",
+ "contact_permission": "沒有訪問通訊錄的權限",
+ "contact": "通訊錄",
+ "search": "搜索",
+ "contact_add": "添加通訊錄中的好友",
+ "find": "發現",
+ "translate_robot": "翻譯機器人",
+ "robot_hello": "你好,我是翻譯機器人...",
+ "Simplified_Chinese": "簡體中文",
+ "traditional_Chinese": "繁體中文",
+ "english": "英語",
+ "Vietnamese": "越南語",
+ "Korean": "韓語",
+ "Japanese": "日語",
+ "add_friends": "添加好友",
+ "stranger": "陌生人",
+ "receive_stranger": "接收陌生人發送的消息",
+ "signin": "簽到",
+ "stranger_close": "對方拒絕接收陌生人發送的消息,是否繼續解鎖全部資料。",
+ "add": "添加",
+ "added": "已添加",
+ "stranger_close_tips": "對方拒絕接收陌生人發送的消息。",
+ "translate_fail": "翻譯失敗",
+ "no_photos": "請先上傳照片,再設置紅包照片。",
+ "successful_appeal1": "你上訴的評價:/s1上訴失敗。",
+ "add_success": "添加成功,等待對方同意",
+ "other_pay": "他人代付",
+ "friend_verification": "朋友驗證",
+ "add_friends_tips": "你已發送驗證申請,等對方通過",
+ "i_am": "我是/s1",
+ "agree": "允許",
+ "privacyAgreement": "\"Hibok\"需要您同意《隱私協議》方可使用",
+ "privacy": "隱私協議",
+ "notification_addfriend": "Hibok!有人申請添加你為好友,看看是誰吧",
+ "distance_long": "面對面才可以加好友哦",
+ "chat_tips": "為了翻譯內容的準確性,請不要簡寫",
+ "fans_list": "粉絲列表",
+ "system_not_open": "功能內測中",
+ "service_withdraw_tips": "iOS客戶端暫不支持提現,你可以使用安卓客戶端提現,或點擊下方按鈕進行提現",
+ "withdraw_tips": "點擊提現",
+ "add_member": "添加成員",
+ "delete_member": "刪除成員",
+ "change_group_name": "修改群名稱",
+ "my_group_nickname": "我在本群中的暱稱",
+ "group_chat": "群聊",
+ "create_group_chat": "創建群聊",
+ "added_friends_tips": "你需要發送驗證申請,等對方通過",
+ "group_chat_name": "群聊名稱",
+ "my_group_nickname_tips": "在這裡可以設置你在這個群裡的暱稱,這個暱稱只會在此群內顯示",
+ "man_gold": "男神動態",
+ "woman_gold": "女神動態",
+ "choose_group_owner": "選擇新群主",
+ "group_announcement": "群公告",
+ "chat_news": "聊天消息",
+ "group_qr": "群二維碼",
+ "group_setting": "群管理",
+ "close_news_notice": "消息免打擾",
+ "set_chat_top": "置頂聊天",
+ "show_group_member_name": "顯示群成員暱稱",
+ "quit_group_tips": "退出後不會通知群聊中其他成員,且不會再接收此群聊消息",
+ "quit_and_delete": "退出並刪除",
+ "show_more_member": "查看更多群成員",
+ "group_invite": "群聊邀請確認",
+ "change_group_owner": "群主管理權轉讓",
+ "group_setting_tips": "啟用後,群成員需群主確認才能邀請朋友進群。掃二維碼進群將同時停用",
+ "invite_detail": "邀請詳情",
+ "undefine_name": "未命名",
+ "group_qr_code": "群二維碼名片",
+ "group_qr_code_tips": "該二維碼7天內(/s1月/s2日前)有效,重新進入將更新",
+ "Goddess_heat": "女神熱度",
+ "Goddess_heat_tips": "累計收穫的禮物",
+ "new_friends": "新朋友",
+ "before_three_day": "三天前",
+ "after_three_day": "近三天",
+ "group_clean_chat_record": "清除聊天記錄",
+ "check": "查看",
+ "apply_fro_friends": "請求添加你為好友",
+ "no_vip_cannot_withdraw": "非會員不能提現",
+ "not_true_woman": "該用戶未認證,謹防被騙",
+ "join_group": "加入群聊",
+ "sign_in_apple": "使用Apple登錄",
+ "only_host": "只有群主才能編輯群公告",
+ "send_gift1": "你打賞了對方/s1個禮物",
+ "receive_gift1": "對方打賞了你/s1個禮物",
+ "not_in_group": "你已不在該群",
+ "creating_group": "正在創建,請稍等",
+ "article": "條",
+ "group_open_verification": "該群已開啟進群驗證只能通過邀請進群",
+ "group_memeber": "群成員",
+ "invite_members": "邀請/s1位朋友加入群聊",
+ "total_members": "共/s1人",
+ "qr_outtime": "二維碼已過期",
+ "no_goupr_info": "沒有該群信息",
+ "you_invite": "你邀請/s1加入了群聊",
+ "invite_you": "你被/s1拉進了群聊",
+ "invite_someone": " /s1 邀請 /s2 加入了群聊",
+ "you": "你",
+ "delete_group": " /s1 將 /s2 移出了群聊",
+ "you_group_owner": "你已成為新群主",
+ "someone_group_owner": "/s1已成為新群主",
+ "change_group_owner1": "群名已更改為/s1",
+ "update_group_announce": "群公告已更新",
+ "you_qr": "你通過掃描二維碼加入群聊",
+ "others_qr": "/s1通過掃描二維碼加入群聊",
+ "invite_confirm": "\"/s1\" 想邀請/s2位朋友加入群聊 \\$去確認\\$ ",
+ "want_invite_confirm": " \"/s1\" 想邀請\"/s2\" 加入群聊",
+ "join_group_confirm": "\"/s1\" 加入群聊 已確認",
+ "you_invite_gourp": "你被 /s1 拉進了群聊",
+ "someone_join_group": " \"/s1\" 加入群聊",
+ "group_setting_tips1": "群主已開啟\"群聊邀請確認\",群成員需群主確認才能邀請朋友進群",
+ "group_setting_tips2": "群主已恢復默認進群方式",
+ "members_max": "群成員已達上限",
+ "group_max": "群數量已達上限",
+ "my_money_info": "我的賬單",
+ "my_left_money": "我的餘額",
+ "money_tips": "H幣可通過充值或兌換方式獲得,無法進行提現",
+ "get_money_detail": "收入明細",
+ "hibok_money": "Hibox收入",
+ "charge_h": "兌換H幣",
+ "charge_tips": "提款規則",
+ "splash_tips1": "百變定位",
+ "splash_tips2": "翻譯機器人",
+ "splash_tips3": "交友APP",
+ "splash_tips_content1": "百變女神,選你所愛",
+ "splash_tips_content2": "語音互動一起聊",
+ "splash_tips_content3": "解決語言問題",
+ "splash_go": "立即體驗",
+ "change_h_coin": "你通過收入兌換了/s1H幣",
+ "Representation_succes": "您的申述成功,系統已退款",
+ "system_give": "系統贈送",
+ "exchange_fail": "您的提款申請失敗,已退回",
+ "hibok_exchange": "通過Hibox收入兌換/s1H幣",
+ "bind_code_success": "成功綁定代理優惠碼",
+ "translate_money":"您消耗了/s1H幣進行人工翻譯",
+ "system_back": "系統取消退回",
+ "you_give": "你打賞了對方",
+ "you_get":"對方打賞了你",
+ "enter_num_qian":"兑换数目(单位K)",
+ "enter_num_qian1":"提现数目(单位K)",
+ "daily_translate_voucher": "翻譯券",
+ "msg_notice":"通知消息",
+ "select_notice_people":"選擇提醒的人",
+ "search_phone":"查找手機號",
+ "not_have_user":"用戶不存在",
+ "not_add_Myself":"你不能添加自己",
+ "you_are_blaklisted":"對方已拉黑了你",
+ "confrim_recovery":"確定恢復已被焚毀的照片嗎?\n(已經看過的用戶可以再看一次)",
+ "send_to": "發送到"
+}
\ No newline at end of file
diff --git a/i18nconfig.json b/i18nconfig.json
new file mode 100644
index 0000000..8c8c9ad
--- /dev/null
+++ b/i18nconfig.json
@@ -0,0 +1,22 @@
+{
+ "defaultLocale": "en-US",
+ "locales": [
+ "en-US",
+ "vi-VN",
+ "zh-HK",
+ "zh-CN",
+ "ko-KR",
+ "ja-JP"
+ ],
+ "localePath": "i18n",
+ "generatedPath": "lib/generated",
+ "ltr": [
+ "en-US",
+ "vi-VN",
+ "zh-HK",
+ "zh-CN",
+ "ko-KR",
+ "ja-JP"
+ ],
+ "rtl": []
+}
\ No newline at end of file
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 0000000..58e65f9
--- /dev/null
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ App
+ CFBundleIdentifier
+ io.flutter.flutter.app
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ App
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 8.0
+
+
diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig
new file mode 100644
index 0000000..c242b3d
--- /dev/null
+++ b/ios/Flutter/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include "Generated.xcconfig"
diff --git a/ios/Flutter/Flutter.podspec b/ios/Flutter/Flutter.podspec
new file mode 100644
index 0000000..5ca3041
--- /dev/null
+++ b/ios/Flutter/Flutter.podspec
@@ -0,0 +1,18 @@
+#
+# NOTE: This podspec is NOT to be published. It is only used as a local source!
+#
+
+Pod::Spec.new do |s|
+ s.name = 'Flutter'
+ s.version = '1.0.0'
+ s.summary = 'High-performance, high-fidelity mobile apps.'
+ s.description = <<-DESC
+Flutter provides an easy and productive way to build and deploy high-performance mobile apps for Android and iOS.
+ DESC
+ s.homepage = 'https://flutter.io'
+ s.license = { :type => 'MIT' }
+ s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
+ s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s }
+ s.ios.deployment_target = '8.0'
+ s.vendored_frameworks = 'Flutter.framework'
+end
diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig
new file mode 100644
index 0000000..6f07b31
--- /dev/null
+++ b/ios/Flutter/Release.xcconfig
@@ -0,0 +1,2 @@
+#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include "Generated.xcconfig"
diff --git a/ios/Flutter/flutter_export_environment.sh b/ios/Flutter/flutter_export_environment.sh
new file mode 100755
index 0000000..4496333
--- /dev/null
+++ b/ios/Flutter/flutter_export_environment.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+# This is a generated file; do not edit or check into version control.
+export "FLUTTER_ROOT=/Users/random/sdk/flutter_sdk"
+export "FLUTTER_APPLICATION_PATH=/Users/random/code/flutter/project/qunliao"
+export "FLUTTER_TARGET=/Users/random/code/flutter/project/qunliao/lib/main.dart"
+export "FLUTTER_BUILD_DIR=build"
+export "SYMROOT=${SOURCE_ROOT}/../build/ios"
+export "FLUTTER_FRAMEWORK_DIR=/Users/random/sdk/flutter_sdk/bin/cache/artifacts/engine/ios"
+export "FLUTTER_BUILD_NAME=1.0.5"
+export "FLUTTER_BUILD_NUMBER=6"
+export "TRACK_WIDGET_CREATION=true"
diff --git a/ios/Podfile b/ios/Podfile
new file mode 100644
index 0000000..e428bce
--- /dev/null
+++ b/ios/Podfile
@@ -0,0 +1,90 @@
+# Uncomment this line to define a global platform for your project
+ platform :ios, '9.0'
+
+# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
+ENV['COCOAPODS_DISABLE_STATS'] = 'true'
+
+project 'Runner', {
+ 'Debug' => :debug,
+ 'Profile' => :release,
+ 'Release' => :release,
+}
+
+def parse_KV_file(file, separator='=')
+ file_abs_path = File.expand_path(file)
+ if !File.exists? file_abs_path
+ return [];
+ end
+ generated_key_values = {}
+ skip_line_start_symbols = ["#", "/"]
+ File.foreach(file_abs_path) do |line|
+ next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
+ plugin = line.split(pattern=separator)
+ if plugin.length == 2
+ podname = plugin[0].strip()
+ path = plugin[1].strip()
+ podpath = File.expand_path("#{path}", file_abs_path)
+ generated_key_values[podname] = podpath
+ else
+ puts "Invalid plugin specification: #{line}"
+ end
+ end
+ generated_key_values
+end
+
+target 'Runner' do
+ use_frameworks!
+ use_modular_headers!
+
+ # Flutter Pod
+
+ copied_flutter_dir = File.join(__dir__, 'Flutter')
+ copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
+ copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
+ unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
+ # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
+ # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
+ # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.
+
+ generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
+ unless File.exist?(generated_xcode_build_settings_path)
+ raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
+ end
+ generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
+ cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];
+
+ unless File.exist?(copied_framework_path)
+ FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
+ end
+ unless File.exist?(copied_podspec_path)
+ FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
+ end
+ end
+
+ # Keep pod path relative so it can be checked into Podfile.lock.
+ pod 'Flutter', :path => 'Flutter'
+
+ # Plugin Pods
+
+ # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
+ # referring to absolute paths on developers' machines.
+ system('rm -rf .symlinks')
+ system('mkdir -p .symlinks/plugins')
+ plugin_pods = parse_KV_file('../.flutter-plugins')
+ plugin_pods.each do |name, path|
+ symlink = File.join('.symlinks', 'plugins', name)
+ File.symlink(path, symlink)
+ pod name, :path => File.join(symlink, 'ios')
+ end
+end
+
+# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
+install! 'cocoapods', :disable_input_output_paths => true
+
+post_install do |installer|
+ installer.pods_project.targets.each do |target|
+ target.build_configurations.each do |config|
+ config.build_settings['ENABLE_BITCODE'] = 'NO'
+ end
+ end
+end
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
new file mode 100644
index 0000000..291308e
--- /dev/null
+++ b/ios/Podfile.lock
@@ -0,0 +1,391 @@
+PODS:
+ - agora_rtc_engine (1.0.6):
+ - AgoraRtcEngine_iOS (= 2.9.1)
+ - Flutter
+ - AgoraRtcEngine_iOS (2.9.1)
+ - amap_location (0.0.1):
+ - AMapLocation
+ - Flutter
+ - AMapFoundation (1.6.2)
+ - AMapLocation (2.6.4):
+ - AMapFoundation (~> 1.6.1)
+ - android_intent (0.0.1):
+ - Flutter
+ - app_installer (0.1.0):
+ - Flutter
+ - apple_sign_in (0.0.1):
+ - Flutter
+ - audioplayer (0.0.1):
+ - Flutter
+ - auto_orientation (0.0.1):
+ - Flutter
+ - Bugly (2.5.2)
+ - city_pickers (0.0.1):
+ - Flutter
+ - connectivity (0.0.1):
+ - Flutter
+ - Reachability
+ - easy_contact_picker (0.0.1):
+ - Flutter
+ - FBSDKCoreKit (5.13.1):
+ - FBSDKCoreKit/Basics (= 5.13.1)
+ - FBSDKCoreKit/Core (= 5.13.1)
+ - FBSDKCoreKit/Basics (5.13.1)
+ - FBSDKCoreKit/Core (5.13.1):
+ - FBSDKCoreKit/Basics
+ - FBSDKLoginKit (5.13.1):
+ - FBSDKLoginKit/Login (= 5.13.1)
+ - FBSDKLoginKit/Login (5.13.1):
+ - FBSDKCoreKit (~> 5.0)
+ - file_picker (0.0.1):
+ - Flutter
+ - Flutter (1.0.0)
+ - flutter_app_badger (0.0.1):
+ - Flutter
+ - flutter_audio_recorder (0.5.4):
+ - Flutter
+ - flutter_bugly (0.0.1):
+ - Bugly
+ - Flutter
+ - flutter_facebook_login (0.0.1):
+ - FBSDKCoreKit (~> 5.5)
+ - FBSDKLoginKit (~> 5.5)
+ - Flutter
+ - flutter_ijkplayer (0.0.1):
+ - Flutter
+ - FlutterIJK (~> 0.1.0)
+ - flutter_image_compress (0.0.1):
+ - Flutter
+ - Mantle
+ - flutter_inapp_purchase (0.0.1):
+ - Flutter
+ - flutter_local_notifications (0.0.1):
+ - Flutter
+ - flutter_plugin_android_lifecycle (0.0.1):
+ - Flutter
+ - flutter_qr_reader (0.0.1):
+ - Flutter
+ - flutter_webview_plugin (0.0.1):
+ - Flutter
+ - FlutterIJK (0.1.0)
+ - fluwx_no_pay (0.0.1):
+ - Flutter
+ - FMDB (2.7.5):
+ - FMDB/standard (= 2.7.5)
+ - FMDB/standard (2.7.5)
+ - geolocator (5.1.5):
+ - Flutter
+ - google_api_availability (2.0.1):
+ - Flutter
+ - google_maps_flutter (0.0.1):
+ - Flutter
+ - GoogleMaps
+ - GoogleMaps (3.7.0):
+ - GoogleMaps/Maps (= 3.7.0)
+ - GoogleMaps/Base (3.7.0)
+ - GoogleMaps/Maps (3.7.0):
+ - GoogleMaps/Base
+ - image_cropper (0.0.2):
+ - Flutter
+ - TOCropViewController (~> 2.5.2)
+ - image_gallery_saver (0.0.1):
+ - Flutter
+ - image_picker (0.0.1):
+ - Flutter
+ - JCore (2.1.8)
+ - JPush (3.2.8):
+ - JCore (< 3.0.0, >= 2.0.0)
+ - jpush_flutter (0.0.2):
+ - Flutter
+ - JPush
+ - keyboard_utils (0.0.1):
+ - Flutter
+ - libwebp (1.0.3):
+ - libwebp/demux (= 1.0.3)
+ - libwebp/mux (= 1.0.3)
+ - libwebp/webp (= 1.0.3)
+ - libwebp/demux (1.0.3):
+ - libwebp/webp
+ - libwebp/mux (1.0.3):
+ - libwebp/demux
+ - libwebp/webp (1.0.3)
+ - location (0.0.1):
+ - Flutter
+ - location_permissions (2.0.3):
+ - Flutter
+ - Mantle (2.1.0):
+ - Mantle/extobjc (= 2.1.0)
+ - Mantle/extobjc (2.1.0)
+ - open_file (0.0.1):
+ - Flutter
+ - package_info (0.0.1):
+ - Flutter
+ - path_provider (0.0.1):
+ - Flutter
+ - permission_handler (4.0.0):
+ - Flutter
+ - photo_manager (0.0.1):
+ - Flutter
+ - Reachability (3.2)
+ - receive_sharing_intent (0.0.1):
+ - Flutter
+ - share (0.5.2):
+ - Flutter
+ - shared_preferences (0.0.1):
+ - Flutter
+ - shared_preferences_macos (0.0.1):
+ - Flutter
+ - shared_preferences_web (0.0.1):
+ - Flutter
+ - sqflite (0.0.1):
+ - Flutter
+ - FMDB (~> 2.7.2)
+ - TOCropViewController (2.5.2)
+ - url_launcher (0.0.1):
+ - Flutter
+ - video_player (0.0.1):
+ - Flutter
+ - video_thumbnail (0.0.1):
+ - Flutter
+ - libwebp
+ - wifi_info_plugin (0.0.1):
+ - Flutter
+
+DEPENDENCIES:
+ - agora_rtc_engine (from `.symlinks/plugins/agora_rtc_engine/ios`)
+ - amap_location (from `.symlinks/plugins/amap_location/ios`)
+ - android_intent (from `.symlinks/plugins/android_intent/ios`)
+ - app_installer (from `.symlinks/plugins/app_installer/ios`)
+ - apple_sign_in (from `.symlinks/plugins/apple_sign_in/ios`)
+ - audioplayer (from `.symlinks/plugins/audioplayer/ios`)
+ - auto_orientation (from `.symlinks/plugins/auto_orientation/ios`)
+ - city_pickers (from `.symlinks/plugins/city_pickers/ios`)
+ - connectivity (from `.symlinks/plugins/connectivity/ios`)
+ - easy_contact_picker (from `.symlinks/plugins/easy_contact_picker/ios`)
+ - file_picker (from `.symlinks/plugins/file_picker/ios`)
+ - Flutter (from `Flutter`)
+ - flutter_app_badger (from `.symlinks/plugins/flutter_app_badger/ios`)
+ - flutter_audio_recorder (from `.symlinks/plugins/flutter_audio_recorder/ios`)
+ - flutter_bugly (from `.symlinks/plugins/flutter_bugly/ios`)
+ - flutter_facebook_login (from `.symlinks/plugins/flutter_facebook_login/ios`)
+ - flutter_ijkplayer (from `.symlinks/plugins/flutter_ijkplayer/ios`)
+ - flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`)
+ - flutter_inapp_purchase (from `.symlinks/plugins/flutter_inapp_purchase/ios`)
+ - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
+ - flutter_plugin_android_lifecycle (from `.symlinks/plugins/flutter_plugin_android_lifecycle/ios`)
+ - flutter_qr_reader (from `.symlinks/plugins/flutter_qr_reader/ios`)
+ - flutter_webview_plugin (from `.symlinks/plugins/flutter_webview_plugin/ios`)
+ - fluwx_no_pay (from `.symlinks/plugins/fluwx_no_pay/ios`)
+ - geolocator (from `.symlinks/plugins/geolocator/ios`)
+ - google_api_availability (from `.symlinks/plugins/google_api_availability/ios`)
+ - google_maps_flutter (from `.symlinks/plugins/google_maps_flutter/ios`)
+ - image_cropper (from `.symlinks/plugins/image_cropper/ios`)
+ - image_gallery_saver (from `.symlinks/plugins/image_gallery_saver/ios`)
+ - image_picker (from `.symlinks/plugins/image_picker/ios`)
+ - jpush_flutter (from `.symlinks/plugins/jpush_flutter/ios`)
+ - keyboard_utils (from `.symlinks/plugins/keyboard_utils/ios`)
+ - location (from `.symlinks/plugins/location/ios`)
+ - location_permissions (from `.symlinks/plugins/location_permissions/ios`)
+ - open_file (from `.symlinks/plugins/open_file/ios`)
+ - package_info (from `.symlinks/plugins/package_info/ios`)
+ - path_provider (from `.symlinks/plugins/path_provider/ios`)
+ - permission_handler (from `.symlinks/plugins/permission_handler/ios`)
+ - photo_manager (from `.symlinks/plugins/photo_manager/ios`)
+ - receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`)
+ - share (from `.symlinks/plugins/share/ios`)
+ - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`)
+ - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`)
+ - shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`)
+ - sqflite (from `.symlinks/plugins/sqflite/ios`)
+ - url_launcher (from `.symlinks/plugins/url_launcher/ios`)
+ - video_player (from `.symlinks/plugins/video_player/ios`)
+ - video_thumbnail (from `.symlinks/plugins/video_thumbnail/ios`)
+ - wifi_info_plugin (from `.symlinks/plugins/wifi_info_plugin/ios`)
+
+SPEC REPOS:
+ trunk:
+ - AgoraRtcEngine_iOS
+ - AMapFoundation
+ - AMapLocation
+ - Bugly
+ - FBSDKCoreKit
+ - FBSDKLoginKit
+ - FlutterIJK
+ - FMDB
+ - GoogleMaps
+ - JCore
+ - JPush
+ - libwebp
+ - Mantle
+ - Reachability
+ - TOCropViewController
+
+EXTERNAL SOURCES:
+ agora_rtc_engine:
+ :path: ".symlinks/plugins/agora_rtc_engine/ios"
+ amap_location:
+ :path: ".symlinks/plugins/amap_location/ios"
+ android_intent:
+ :path: ".symlinks/plugins/android_intent/ios"
+ app_installer:
+ :path: ".symlinks/plugins/app_installer/ios"
+ apple_sign_in:
+ :path: ".symlinks/plugins/apple_sign_in/ios"
+ audioplayer:
+ :path: ".symlinks/plugins/audioplayer/ios"
+ auto_orientation:
+ :path: ".symlinks/plugins/auto_orientation/ios"
+ city_pickers:
+ :path: ".symlinks/plugins/city_pickers/ios"
+ connectivity:
+ :path: ".symlinks/plugins/connectivity/ios"
+ easy_contact_picker:
+ :path: ".symlinks/plugins/easy_contact_picker/ios"
+ file_picker:
+ :path: ".symlinks/plugins/file_picker/ios"
+ Flutter:
+ :path: Flutter
+ flutter_app_badger:
+ :path: ".symlinks/plugins/flutter_app_badger/ios"
+ flutter_audio_recorder:
+ :path: ".symlinks/plugins/flutter_audio_recorder/ios"
+ flutter_bugly:
+ :path: ".symlinks/plugins/flutter_bugly/ios"
+ flutter_facebook_login:
+ :path: ".symlinks/plugins/flutter_facebook_login/ios"
+ flutter_ijkplayer:
+ :path: ".symlinks/plugins/flutter_ijkplayer/ios"
+ flutter_image_compress:
+ :path: ".symlinks/plugins/flutter_image_compress/ios"
+ flutter_inapp_purchase:
+ :path: ".symlinks/plugins/flutter_inapp_purchase/ios"
+ flutter_local_notifications:
+ :path: ".symlinks/plugins/flutter_local_notifications/ios"
+ flutter_plugin_android_lifecycle:
+ :path: ".symlinks/plugins/flutter_plugin_android_lifecycle/ios"
+ flutter_qr_reader:
+ :path: ".symlinks/plugins/flutter_qr_reader/ios"
+ flutter_webview_plugin:
+ :path: ".symlinks/plugins/flutter_webview_plugin/ios"
+ fluwx_no_pay:
+ :path: ".symlinks/plugins/fluwx_no_pay/ios"
+ geolocator:
+ :path: ".symlinks/plugins/geolocator/ios"
+ google_api_availability:
+ :path: ".symlinks/plugins/google_api_availability/ios"
+ google_maps_flutter:
+ :path: ".symlinks/plugins/google_maps_flutter/ios"
+ image_cropper:
+ :path: ".symlinks/plugins/image_cropper/ios"
+ image_gallery_saver:
+ :path: ".symlinks/plugins/image_gallery_saver/ios"
+ image_picker:
+ :path: ".symlinks/plugins/image_picker/ios"
+ jpush_flutter:
+ :path: ".symlinks/plugins/jpush_flutter/ios"
+ keyboard_utils:
+ :path: ".symlinks/plugins/keyboard_utils/ios"
+ location:
+ :path: ".symlinks/plugins/location/ios"
+ location_permissions:
+ :path: ".symlinks/plugins/location_permissions/ios"
+ open_file:
+ :path: ".symlinks/plugins/open_file/ios"
+ package_info:
+ :path: ".symlinks/plugins/package_info/ios"
+ path_provider:
+ :path: ".symlinks/plugins/path_provider/ios"
+ permission_handler:
+ :path: ".symlinks/plugins/permission_handler/ios"
+ photo_manager:
+ :path: ".symlinks/plugins/photo_manager/ios"
+ receive_sharing_intent:
+ :path: ".symlinks/plugins/receive_sharing_intent/ios"
+ share:
+ :path: ".symlinks/plugins/share/ios"
+ shared_preferences:
+ :path: ".symlinks/plugins/shared_preferences/ios"
+ shared_preferences_macos:
+ :path: ".symlinks/plugins/shared_preferences_macos/ios"
+ shared_preferences_web:
+ :path: ".symlinks/plugins/shared_preferences_web/ios"
+ sqflite:
+ :path: ".symlinks/plugins/sqflite/ios"
+ url_launcher:
+ :path: ".symlinks/plugins/url_launcher/ios"
+ video_player:
+ :path: ".symlinks/plugins/video_player/ios"
+ video_thumbnail:
+ :path: ".symlinks/plugins/video_thumbnail/ios"
+ wifi_info_plugin:
+ :path: ".symlinks/plugins/wifi_info_plugin/ios"
+
+SPEC CHECKSUMS:
+ agora_rtc_engine: 653a2211f179b00e5b696410829febafa046f8b4
+ AgoraRtcEngine_iOS: b2eedd8f9ab47b71163f3285e836bd23feb43fff
+ amap_location: a3e2a140bb25950d4e97560ce1b00e53a121e4f4
+ AMapFoundation: 672dc3a4759cb733f447c1e1b020f7ba2729f4ab
+ AMapLocation: b4162db67f813508a14ee7e05c7ee4073785221d
+ android_intent: f144b3783d533cc5bc2cd04cdbd1dc2b6950bd69
+ app_installer: c0d3e58ec1f19df67307d7e988d5e0ccf8a47a52
+ apple_sign_in: 7716c7ddfa195aeab7dec0dc374ef4ff45d1adb4
+ audioplayer: f4462b84216b9c55f02bbbdc7ab60eec7427b2d4
+ auto_orientation: 2941c44ebe5c3d41016001597ab03e81a92a26ce
+ Bugly: dbac48b55ad469a97cc4321045cd50df8f63d44f
+ city_pickers: b0370f4c35c201723b5b7fcce10ec29b59d5bc35
+ connectivity: 6e94255659cc86dcbef1d452ad3e0491bb1b3e75
+ easy_contact_picker: 9ab9dc70e8ddde6e76a19ffc482d7bf899868730
+ FBSDKCoreKit: 8fb98209109fb684937f05d534305edb18c20207
+ FBSDKLoginKit: c7c6ffd9ca9ea45aee32361840af040ad8f6706a
+ file_picker: 408623be2125b79a4539cf703be3d4b3abe5e245
+ Flutter: 0e3d915762c693b495b44d77113d4970485de6ec
+ flutter_app_badger: 65de4d6f0c34a891df49e6cfb8a1c0496426fa68
+ flutter_audio_recorder: eb998d4e75e59b39d9e3ca1818a5e0f3a82f5836
+ flutter_bugly: c9800f4d5bc5bdc27ffdde3417a26ba44266e0c3
+ flutter_facebook_login: cfb5659f686b1c575ef205c6b6fd20db9679d3c4
+ flutter_ijkplayer: ef9006131553deb6d8ae6d7fbd3bcbf93b135930
+ flutter_image_compress: f69d0e0e078ce52b4810695593bc861ee319ae7d
+ flutter_inapp_purchase: 5c6a1ac3f11b11d0c8c0321c0c41c1f05805e4c8
+ flutter_local_notifications: 9e4738ce2471c5af910d961a6b7eadcf57c50186
+ flutter_plugin_android_lifecycle: 47de533a02850f070f5696a623995e93eddcdb9b
+ flutter_qr_reader: 254fd9eea45a65ef461e050d6607daf9cfb753e8
+ flutter_webview_plugin: ed9e8a6a96baf0c867e90e1bce2673913eeac694
+ FlutterIJK: 68b00c1d11162b5016f3611853aa699e198bd1d2
+ fluwx_no_pay: 50ed1ec3cb01457042232905b851071dfb3b84a7
+ FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
+ geolocator: 80aba2bb48f8c7dfc5a8b70b9d13fc3edc8399c4
+ google_api_availability: 163b30f802e6148c67f092aa4501c90ddd8eec8d
+ google_maps_flutter: d0dd62f5a7d39bae61057eb9f52dd778d99c7c6c
+ GoogleMaps: 55da829c68aa931f3ae982b9e341cc2f3d89c587
+ image_cropper: 3c16d7651730ffe85897f5a1c4e2547e6b54989a
+ image_gallery_saver: 73b3cd8ad9c950c739878af9c311744d1bf5405d
+ image_picker: e3eacd46b94694dde7cf2705955cece853aa1a8f
+ JCore: a7f1dead960d77a97717c73ea8b0aa5b33706491
+ JPush: 8ce888d6dedfa417e90c8b6bc87405a16ce2e699
+ jpush_flutter: 69133df35eaf9135e540549b154d992c44f8ee44
+ keyboard_utils: ab24bc711be9e91a5937c20489056b8dd650fecc
+ libwebp: 057912d6d0abfb6357d8bb05c0ea470301f5d61e
+ location: 3a2eed4dd2fab25e7b7baf2a9efefe82b512d740
+ location_permissions: 195ff2a1182fa9029ef3f2653156961ee5a1e40b
+ Mantle: 2fa750afa478cd625a94230fbf1c13462f29395b
+ open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d
+ package_info: 48b108e75b8802c2d5e126f208ef540561c98aef
+ path_provider: fb74bd0465e96b594bb3b5088ee4a4e7bb1f2a9d
+ permission_handler: 0fb88b8a3c23e31e5de45b8f1bb8b7de28cf8941
+ photo_manager: f7c619c2cc8c2adb8d85c63363babac477de9c67
+ Reachability: 33e18b67625424e47b6cde6d202dce689ad7af96
+ receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1
+ share: bae0a282aab4483288913fc4dc0b935d4b491f2e
+ shared_preferences: 430726339841afefe5142b9c1f50cb6bd7793e01
+ shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087
+ shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9
+ sqflite: 4001a31ff81d210346b500c55b17f4d6c7589dd0
+ TOCropViewController: e9da34f484aedd4e5d5a8ab230ba217cfe16c729
+ url_launcher: a1c0cc845906122c4784c542523d8cacbded5626
+ video_player: 69c5f029fac4ffe4fc8a85ea7f7b793709661549
+ video_thumbnail: c4e2a3c539e247d4de13cd545344fd2d26ffafd1
+ wifi_info_plugin: ff6048382842ec5c7594460750ae96ad54bd3044
+
+PODFILE CHECKSUM: 1a36abd97d6ef8a9a64844b75e3a41d456448dec
+
+COCOAPODS: 1.8.4
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..61ca478
--- /dev/null
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,875 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
+ 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 5C60199023A719FD00D1DB1E /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 55B5585223A364C300531379 /* Info.plist */; };
+ 5C95C0912406514F00CEBCE3 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C95C0902406514F00CEBCE3 /* ShareViewController.swift */; };
+ 5C95C0942406514F00CEBCE3 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5C95C0922406514F00CEBCE3 /* MainInterface.storyboard */; };
+ 5C95C0982406514F00CEBCE3 /* Share Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 5C95C08E2406514F00CEBCE3 /* Share Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
+ 5CDF760323AB4AC2002E6DF9 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CDF760523AB4AC2002E6DF9 /* InfoPlist.strings */; };
+ 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
+ 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };
+ 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
+ 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+ D34B099915D830BEECE2A21C /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A31DC0BCE3BBDE9DB405FE6 /* Pods_Runner.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 5C95C0962406514F00CEBCE3 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 5C95C08D2406514F00CEBCE3;
+ remoteInfo = "Share Extension";
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 5C95C0992406514F00CEBCE3 /* Embed App Extensions */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 13;
+ files = (
+ 5C95C0982406514F00CEBCE3 /* Share Extension.appex in Embed App Extensions */,
+ );
+ name = "Embed App Extensions";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
+ 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 1EFE82ACF3C79BC7EE01A8E9 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; };
+ 5153B98FA78898F848ACB2BE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
+ 55B5585223A364C300531379 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 5C60198F23A717FB00D1DB1E /* Runner.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; };
+ 5C95C08E2406514F00CEBCE3 /* Share Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Share Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5C95C0902406514F00CEBCE3 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; };
+ 5C95C0932406514F00CEBCE3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; };
+ 5C95C0952406514F00CEBCE3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 5C95C09E240655AF00CEBCE3 /* Share ExtensionProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Share ExtensionProfile.entitlements"; sourceTree = ""; };
+ 5C95C09F240655F500CEBCE3 /* RunnerProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = RunnerProfile.entitlements; sourceTree = ""; };
+ 5C95C0A0240754B900CEBCE3 /* Share Extension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Share Extension.entitlements"; sourceTree = ""; };
+ 5CDF760423AB4AC2002E6DF9 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; };
+ 5CDF760623AB4B55002E6DF9 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; };
+ 5CDF760723AB872C002E6DF9 /* vi */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = vi; path = vi.lproj/InfoPlist.strings; sourceTree = ""; };
+ 5CFAF1B023AB8D140097F186 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = ""; };
+ 5CFAF1B123AB8D220097F186 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; };
+ 5CFAF1B223AB8D310097F186 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; };
+ 72F4344FD9917096E93A1968 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
+ 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
+ 8A31DC0BCE3BBDE9DB405FE6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
+ 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
+ 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 5C95C08B2406514F00CEBCE3 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
+ 3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
+ D34B099915D830BEECE2A21C /* Pods_Runner.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 19BD53E34344AF42C09DC0A3 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8A31DC0BCE3BBDE9DB405FE6 /* Pods_Runner.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 5C95C08F2406514F00CEBCE3 /* Share Extension */ = {
+ isa = PBXGroup;
+ children = (
+ 5C95C0A0240754B900CEBCE3 /* Share Extension.entitlements */,
+ 5C95C09E240655AF00CEBCE3 /* Share ExtensionProfile.entitlements */,
+ 5C95C0902406514F00CEBCE3 /* ShareViewController.swift */,
+ 5C95C0922406514F00CEBCE3 /* MainInterface.storyboard */,
+ 5C95C0952406514F00CEBCE3 /* Info.plist */,
+ );
+ path = "Share Extension";
+ sourceTree = "";
+ };
+ 8E51791D64FE2BD2495C930B /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 72F4344FD9917096E93A1968 /* Pods-Runner.debug.xcconfig */,
+ 1EFE82ACF3C79BC7EE01A8E9 /* Pods-Runner.release.xcconfig */,
+ 5153B98FA78898F848ACB2BE /* Pods-Runner.profile.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 3B80C3931E831B6300D905FE /* App.framework */,
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEBA1CF902C7004384FC /* Flutter.framework */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 5C95C08F2406514F00CEBCE3 /* Share Extension */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ 8E51791D64FE2BD2495C930B /* Pods */,
+ 19BD53E34344AF42C09DC0A3 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ 5C95C08E2406514F00CEBCE3 /* Share Extension.appex */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 5C95C09F240655F500CEBCE3 /* RunnerProfile.entitlements */,
+ 5C60198F23A717FB00D1DB1E /* Runner.entitlements */,
+ 55B5585223A364C300531379 /* Info.plist */,
+ 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
+ 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C146F11CF9000F007C117D /* Supporting Files */,
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+ 5CDF760523AB4AC2002E6DF9 /* InfoPlist.strings */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+ 97C146F11CF9000F007C117D /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146F21CF9000F007C117D /* main.m */,
+ );
+ name = "Supporting Files";
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 5C95C08D2406514F00CEBCE3 /* Share Extension */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 5C95C09D2406514F00CEBCE3 /* Build configuration list for PBXNativeTarget "Share Extension" */;
+ buildPhases = (
+ 5C95C08A2406514F00CEBCE3 /* Sources */,
+ 5C95C08B2406514F00CEBCE3 /* Frameworks */,
+ 5C95C08C2406514F00CEBCE3 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Share Extension";
+ productName = "Share Extension";
+ productReference = 5C95C08E2406514F00CEBCE3 /* Share Extension.appex */;
+ productType = "com.apple.product-type.app-extension";
+ };
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 3350986A0786211686578BBB /* [CP] Check Pods Manifest.lock */,
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ 74E44EF25DBCD813164B0D15 /* [CP] Embed Pods Frameworks */,
+ 72C47CA77DA3D0C2C0859F91 /* [CP] Copy Pods Resources */,
+ 5C95C0992406514F00CEBCE3 /* Embed App Extensions */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 5C95C0972406514F00CEBCE3 /* PBXTargetDependency */,
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 97C146E61CF9000F007C117D /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ DefaultBuildSystemTypeForWorkspace = Original;
+ LastSwiftUpdateCheck = 1130;
+ LastUpgradeCheck = 1020;
+ ORGANIZATIONNAME = "The Chromium Authors";
+ TargetAttributes = {
+ 5C95C08D2406514F00CEBCE3 = {
+ CreatedOnToolsVersion = 11.3;
+ DevelopmentTeam = 76U6VCZ8JY;
+ ProvisioningStyle = Automatic;
+ };
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ DevelopmentTeam = 76U6VCZ8JY;
+ ProvisioningStyle = Automatic;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ "zh-Hans",
+ vi,
+ "zh-Hant",
+ ja,
+ ko,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ 5C95C08D2406514F00CEBCE3 /* Share Extension */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 5C95C08C2406514F00CEBCE3 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5C95C0942406514F00CEBCE3 /* MainInterface.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5C60199023A719FD00D1DB1E /* Info.plist in Resources */,
+ 5CDF760323AB4AC2002E6DF9 /* InfoPlist.strings in Resources */,
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3350986A0786211686578BBB /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
+ };
+ 72C47CA77DA3D0C2C0859F91 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "[CP] Copy Pods Resources";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 74E44EF25DBCD813164B0D15 /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 5C95C08A2406514F00CEBCE3 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5C95C0912406514F00CEBCE3 /* ShareViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
+ 97C146F31CF9000F007C117D /* main.m in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 5C95C0972406514F00CEBCE3 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 5C95C08D2406514F00CEBCE3 /* Share Extension */;
+ targetProxy = 5C95C0962406514F00CEBCE3 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 5C95C0922406514F00CEBCE3 /* MainInterface.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 5C95C0932406514F00CEBCE3 /* Base */,
+ );
+ name = MainInterface.storyboard;
+ sourceTree = "";
+ };
+ 5CDF760523AB4AC2002E6DF9 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 5CDF760423AB4AC2002E6DF9 /* en */,
+ 5CDF760623AB4B55002E6DF9 /* zh-Hans */,
+ 5CDF760723AB872C002E6DF9 /* vi */,
+ 5CFAF1B023AB8D140097F186 /* zh-Hant */,
+ 5CFAF1B123AB8D220097F186 /* ja */,
+ 5CFAF1B223AB8D310097F186 /* ko */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C147001CF9000F007C117D /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Profile;
+ };
+ 249021D4217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = Runner/RunnerProfile.entitlements;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 9;
+ DEVELOPMENT_TEAM = 76U6VCZ8JY;
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ MARKETING_VERSION = 1.0.7;
+ PRODUCT_BUNDLE_IDENTIFIER = com.cyhd.henho;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 4.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VALID_ARCHS = "arm64 arm64e armv7s";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Profile;
+ };
+ 5C95C09A2406514F00CEBCE3 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "Share Extension/Share Extension.entitlements";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 9;
+ DEVELOPMENT_TEAM = 76U6VCZ8JY;
+ ENABLE_BITCODE = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ INFOPLIST_FILE = "Share Extension/Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
+ MARKETING_VERSION = 1.0.7;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ OTHER_LDFLAGS = "";
+ PRODUCT_BUNDLE_IDENTIFIER = com.cyhd.henho.share;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ 5C95C09B2406514F00CEBCE3 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "Share Extension/Share Extension.entitlements";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 9;
+ DEVELOPMENT_TEAM = 76U6VCZ8JY;
+ ENABLE_BITCODE = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ INFOPLIST_FILE = "Share Extension/Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
+ MARKETING_VERSION = 1.0.7;
+ MTL_FAST_MATH = YES;
+ OTHER_LDFLAGS = "";
+ PRODUCT_BUNDLE_IDENTIFIER = com.cyhd.henho.share;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SKIP_INSTALL = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ 5C95C09C2406514F00CEBCE3 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "Share Extension/Share ExtensionProfile.entitlements";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 9;
+ DEVELOPMENT_TEAM = 76U6VCZ8JY;
+ ENABLE_BITCODE = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ INFOPLIST_FILE = "Share Extension/Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
+ MARKETING_VERSION = 1.0.7;
+ MTL_FAST_MATH = YES;
+ OTHER_LDFLAGS = "";
+ PRODUCT_BUNDLE_IDENTIFIER = com.cyhd.henho.share;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SKIP_INSTALL = YES;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Profile;
+ };
+ 97C147031CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 97C147041CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 97C147061CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 9;
+ DEVELOPMENT_TEAM = 76U6VCZ8JY;
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ MARKETING_VERSION = 1.0.7;
+ PRODUCT_BUNDLE_IDENTIFIER = com.cyhd.henho;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 4.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VALID_ARCHS = "arm64 arm64e armv7s";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 9;
+ DEVELOPMENT_TEAM = 76U6VCZ8JY;
+ ENABLE_BITCODE = NO;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ INFOPLIST_FILE = Runner/Info.plist;
+ IPHONEOS_DEPLOYMENT_TARGET = 9.0;
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/Flutter",
+ );
+ MARKETING_VERSION = 1.0.7;
+ PRODUCT_BUNDLE_IDENTIFIER = com.cyhd.henho;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 4.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VALID_ARCHS = "arm64 arm64e armv7s";
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 5C95C09D2406514F00CEBCE3 /* Build configuration list for PBXNativeTarget "Share Extension" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 5C95C09A2406514F00CEBCE3 /* Debug */,
+ 5C95C09B2406514F00CEBCE3 /* Release */,
+ 5C95C09C2406514F00CEBCE3 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147031CF9000F007C117D /* Debug */,
+ 97C147041CF9000F007C117D /* Release */,
+ 249021D3217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147061CF9000F007C117D /* Debug */,
+ 97C147071CF9000F007C117D /* Release */,
+ 249021D4217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}
diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..59c6d39
--- /dev/null
+++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000..41a8126
--- /dev/null
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..21a3cc1
--- /dev/null
+++ b/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..6b30c74
--- /dev/null
+++ b/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,10 @@
+
+
+
+
+ BuildSystemType
+ Original
+ PreviewsEnabled
+
+
+
diff --git a/ios/Runner/AppDelegate.h b/ios/Runner/AppDelegate.h
new file mode 100644
index 0000000..106c836
--- /dev/null
+++ b/ios/Runner/AppDelegate.h
@@ -0,0 +1,13 @@
+#import
+#import
+
+@interface AppDelegate : FlutterAppDelegate
+{
+
+}
+@property (nonatomic,assign) UIBackgroundTaskIdentifier task;
+@property (nonatomic, strong) FlutterEventSink eventSink;
+
+@end
+
+
diff --git a/ios/Runner/AppDelegate.m b/ios/Runner/AppDelegate.m
new file mode 100644
index 0000000..2624940
--- /dev/null
+++ b/ios/Runner/AppDelegate.m
@@ -0,0 +1,271 @@
+#include "AppDelegate.h"
+#include "GeneratedPluginRegistrant.h"
+#import "GoogleMaps/GoogleMaps.h"
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application
+didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+ [GMSServices provideAPIKey:@"AIzaSyAb9JNtW0BEZ_qLeDg87ZhvxSmZply-7hU"];
+
+ FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
+
+ FlutterMethodChannel* channel = [FlutterMethodChannel
+ methodChannelWithName:@"make.photo.screen.hibok"
+ binaryMessenger:controller];
+
+ [channel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
+ if ([@"makePhotoScreen" isEqualToString:call.method]) {
+ UIImage* img = [self makePhotoScreen: controller.view];
+
+ NSData *imageData = UIImageJPEGRepresentation(img, 0.8);
+ FlutterStandardTypedData* value = [FlutterStandardTypedData typedDataWithBytes:imageData];
+
+ result(value);
+ }else if([@"openMapForOth" isEqualToString:call.method]){
+ NSDictionary* params = call.arguments;
+ NSString* mapType = params[@"mapType"];
+ NSArray* latLng = params[@"latLng"];
+ NSString* address = params[@"address"];
+
+ [self openMapForOth:mapType latLng:latLng adress:address];
+ }else if([@"getListForMap" isEqualToString:call.method]){
+ NSArray* supportMaps = [self getListForMap];
+ result(supportMaps);
+ }
+ else
+ {
+ result(FlutterMethodNotImplemented);
+ }
+ }];
+
+
+ // 创建eventChannel 代理方法里处理stream流 delegate设置为self
+ FlutterEventChannel *eventChannel = [FlutterEventChannel eventChannelWithName:@"com.file.hibok" binaryMessenger:controller];
+ [eventChannel setStreamHandler:self];
+
+ [GeneratedPluginRegistrant registerWithRegistry:self];
+
+
+ if(![[NSUserDefaults standardUserDefaults]objectForKey:@"Notification"]){
+ [[UIApplication sharedApplication] cancelAllLocalNotifications];
+ [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"Notification"];
+ }
+
+ // Override point for customization after application launch.
+ return [super application:application didFinishLaunchingWithOptions:launchOptions];
+}
+
+
+
+#pragma mark - FlutterStreamHandler
+- (FlutterError* _Nullable)onListenWithArguments:(id _Nullable)arguments
+ eventSink:(FlutterEventSink)eventSink{
+ self.eventSink = eventSink;
+ return nil;
+}
+
+- (FlutterError* _Nullable)onCancelWithArguments:(id _Nullable)arguments {
+ return nil;
+}
+
+- (UIImage*)makePhotoScreen:(UIView*)view {
+
+ CGSize size = view.bounds.size;
+ UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
+ [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
+ UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+
+ // CGImageRef imageRef =image.CGImage;
+
+ // CGRect rect = CGRectMake(CGImageGetWidth(imageRef)/4, CGImageGetHeight(imageRef)/2-CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2, CGImageGetWidth(imageRef)/2);//这里可以设置想要截图的区域
+ //
+ // CGImageRef imageRefRect =CGImageCreateWithImageInRect(imageRef, rect);
+ //
+ // UIImage *sendImage =[[UIImage alloc] initWithCGImage:imageRefRect];
+ //
+ //
+
+ return image;
+}
+
+- (NSArray*)getListForMap{
+
+ NSMutableArray* maps = [[NSMutableArray alloc] init];
+
+ //苹果地图
+ [maps addObject:@"apple"];
+
+
+ //谷歌地图
+
+ if([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"comgooglemaps://"]]) {
+ [maps addObject:@"google"];
+
+ }
+
+ //高德地图
+
+ if([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"iosamap://"]]) {
+ [maps addObject:@"minimap"];
+ }
+
+ //百度地图
+
+ if([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:@"baidumap://"]]) {
+ [maps addObject:@"baidu"];
+ }
+
+
+
+
+
+
+ return maps;
+
+}
+
+-(void) openMapForOth:(NSString *)mapType latLng:(NSArray*)latLng adress:(NSString*)adress {
+
+ if([mapType isEqualToString:@"baidu"]){
+ NSString*urlString = [[NSString stringWithFormat:@"baidumap://map/geocoder?location=%@f,%@f&coord_type=gcj02&src=com.cyhd.henhoandroid",latLng.firstObject, latLng.lastObject] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+ [[UIApplication sharedApplication] openURL: [NSURL URLWithString:urlString]];
+
+ }else if([mapType isEqualToString:@"minimap"]){
+
+ NSString*urlString = [[NSString stringWithFormat:@"iosamap://navi?sourceApplication= &lat=%@f&lon=%@f&dev=1",latLng.firstObject, latLng.lastObject] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+
+ [[UIApplication sharedApplication] openURL: [NSURL URLWithString:urlString]];
+
+ }else if([mapType isEqualToString:@"apple"]){
+
+ NSString*urlString = [[NSString stringWithFormat:@"http://maps.apple.com/?daddr=%@f,%@f",latLng.firstObject, latLng.lastObject] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+ [[UIApplication sharedApplication] openURL: [NSURL URLWithString:urlString]];
+
+ }else if([mapType isEqualToString:@"google"]){
+
+ NSString*urlString = [[NSString stringWithFormat:@"comgooglemaps://?daddr=%@f,%@f",latLng.firstObject, latLng.lastObject] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
+ [[UIApplication sharedApplication] openURL: [NSURL URLWithString:urlString]];
+ }
+
+}
+
+
+- (void)applicationDidEnterBackground:(UIApplication *)application {
+
+
+ self.task = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
+
+ [[UIApplication sharedApplication] endBackgroundTask:self.task];
+ self.task = UIBackgroundTaskInvalid;
+
+ }];
+
+
+// __block int count = 0;
+// [NSTimer scheduledTimerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
+//
+// count ++;
+// NSLog(@"%d",count);
+//
+// }];
+
+}
+
+
+//申请后台运行权限
+- (void)backGroundSpeech {
+ UIApplication *app = [UIApplication sharedApplication];
+ __block UIBackgroundTaskIdentifier bgTask;
+ bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
+ dispatch_async(dispatch_get_main_queue(), ^{
+ if (bgTask != UIBackgroundTaskInvalid)
+ {
+ bgTask = UIBackgroundTaskInvalid;
+ }
+ });
+ }];
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+ dispatch_async(dispatch_get_main_queue(), ^{
+ if (bgTask != UIBackgroundTaskInvalid)
+ {
+ bgTask = UIBackgroundTaskInvalid;
+ }
+ });
+ });
+}
+
+
+
+
+
+
+#pragma mark ------------------ 结束后台任务 ------------------
+- (void)endBackgroundUpdateask{
+ [[UIApplication sharedApplication] endBackgroundTask:self.task];
+ self.task = UIBackgroundTaskInvalid;
+}
+
+
+
+
+- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
+{
+
+ NSLog(@"myurl %@",url.absoluteString);
+
+// if (url != nil) {
+//// 不跟分享插件冲突
+// if ([url.absoluteString containsString:@"SharePhotos"]) {
+// NSLog(@"myurl 存在");
+//
+// }
+// }
+
+ if (url != nil && [url.absoluteString containsString:@"file:///private"]) {
+ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+ NSString *documentsDirectory = [paths lastObject];
+ if (url != nil) {
+ NSString *path = [url absoluteString];
+ path = [path stringByRemovingPercentEncoding];
+ NSMutableString *string = [[NSMutableString alloc] initWithString:path];
+ if ([path hasPrefix:@"file:///private"]) {
+ [string replaceOccurrencesOfString:@"file:///private" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, path.length)];
+ }
+ NSArray *tempArray = [string componentsSeparatedByString:@"/"];
+ NSString *fileName = tempArray.lastObject;
+ NSString *sourceName = options[@"UIApplicationOpenURLOptionsSourceApplicationKey"];
+
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",fileName]];
+ if ([fileManager fileExistsAtPath:filePath]) {
+ NSLog(@"文件已存在");
+ self.eventSink(filePath);
+ // [SVProgressHUD showErrorWithStatus:@"文件已存在"];
+ return YES;
+ }
+ // [MRTools creatFilePathInManager:sourceName];
+
+ BOOL isSuccess = [fileManager copyItemAtPath:string toPath:filePath error:nil];
+ if (isSuccess == YES) {
+ NSLog(@"拷贝成功");
+ self.eventSink(filePath);
+ // [SVProgressHUD showSuccessWithStatus:@"文件拷贝成功"];
+ } else {
+ NSLog(@"拷贝失败");
+ // [SVProgressHUD showErrorWithStatus:@"文件拷贝失败"];
+ }
+ }
+ }else{
+ [super application:self openURL:url options:nil];
+ return YES;
+ }
+
+
+
+ NSLog(@"application:openURL:options:");
+ return YES;
+}
+
+
+@end
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..193d0dc
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,158 @@
+{
+ "images": [
+ {
+ "size": "20x20",
+ "idiom": "iphone",
+ "filename": "icon-20@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "20x20",
+ "idiom": "iphone",
+ "filename": "icon-20@3x.png",
+ "scale": "3x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "iphone",
+ "filename": "icon-29.png",
+ "scale": "1x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "iphone",
+ "filename": "icon-29@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "iphone",
+ "filename": "icon-29@3x.png",
+ "scale": "3x"
+ },
+ {
+ "size": "40x40",
+ "idiom": "iphone",
+ "filename": "icon-40@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "40x40",
+ "idiom": "iphone",
+ "filename": "icon-40@3x.png",
+ "scale": "3x"
+ },
+ {
+ "size": "57x57",
+ "idiom": "iphone",
+ "filename": "icon-57.png",
+ "scale": "1x"
+ },
+ {
+ "size": "57x57",
+ "idiom": "iphone",
+ "filename": "icon-57@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "60x60",
+ "idiom": "iphone",
+ "filename": "icon-60@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "60x60",
+ "idiom": "iphone",
+ "filename": "icon-60@3x.png",
+ "scale": "3x"
+ },
+ {
+ "size": "20x20",
+ "idiom": "ipad",
+ "filename": "icon-20-ipad.png",
+ "scale": "1x"
+ },
+ {
+ "size": "20x20",
+ "idiom": "ipad",
+ "filename": "icon-20@2x-ipad.png",
+ "scale": "2x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "ipad",
+ "filename": "icon-29-ipad.png",
+ "scale": "1x"
+ },
+ {
+ "size": "29x29",
+ "idiom": "ipad",
+ "filename": "icon-29@2x-ipad.png",
+ "scale": "2x"
+ },
+ {
+ "size": "40x40",
+ "idiom": "ipad",
+ "filename": "icon-40.png",
+ "scale": "1x"
+ },
+ {
+ "size": "40x40",
+ "idiom": "ipad",
+ "filename": "icon-40@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "50x50",
+ "idiom": "ipad",
+ "filename": "icon-50.png",
+ "scale": "1x"
+ },
+ {
+ "size": "50x50",
+ "idiom": "ipad",
+ "filename": "icon-50@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "72x72",
+ "idiom": "ipad",
+ "filename": "icon-72.png",
+ "scale": "1x"
+ },
+ {
+ "size": "72x72",
+ "idiom": "ipad",
+ "filename": "icon-72@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "76x76",
+ "idiom": "ipad",
+ "filename": "icon-76.png",
+ "scale": "1x"
+ },
+ {
+ "size": "76x76",
+ "idiom": "ipad",
+ "filename": "icon-76@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "83.5x83.5",
+ "idiom": "ipad",
+ "filename": "icon-83.5@2x.png",
+ "scale": "2x"
+ },
+ {
+ "size": "1024x1024",
+ "idiom": "ios-marketing",
+ "filename": "icon-1024.png",
+ "scale": "1x"
+ }
+ ],
+ "info": {
+ "version": 1,
+ "author": "icon.wuruihong.com"
+ }
+}
\ No newline at end of file
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png
new file mode 100644
index 0000000..ea7e0a5
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-1024.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png
new file mode 100644
index 0000000..e2ae424
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20-ipad.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png
new file mode 100644
index 0000000..20aa80a
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png
new file mode 100644
index 0000000..20aa80a
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png
new file mode 100644
index 0000000..3ceeebd
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-20@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png
new file mode 100644
index 0000000..d7da6be
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29-ipad.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29.png
new file mode 100644
index 0000000..d7da6be
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png
new file mode 100644
index 0000000..ff5e169
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x-ipad.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png
new file mode 100644
index 0000000..ff5e169
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png
new file mode 100644
index 0000000..c9975c6
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-29@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40.png
new file mode 100644
index 0000000..20aa80a
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png
new file mode 100644
index 0000000..a68352b
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png
new file mode 100644
index 0000000..186fe66
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-40@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-50.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-50.png
new file mode 100644
index 0000000..4591db4
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-50.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png
new file mode 100644
index 0000000..ecd5652
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-50@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-57.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-57.png
new file mode 100644
index 0000000..dafc433
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-57.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png
new file mode 100644
index 0000000..89b3ff4
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-57@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png
new file mode 100644
index 0000000..186fe66
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png
new file mode 100644
index 0000000..a250e81
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-60@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-72.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-72.png
new file mode 100644
index 0000000..e10aacf
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-72.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png
new file mode 100644
index 0000000..21f1074
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-72@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76.png
new file mode 100644
index 0000000..5092bd0
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png
new file mode 100644
index 0000000..d2161c0
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-76@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png
new file mode 100644
index 0000000..da0ae07
Binary files /dev/null and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/icon-83.5@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 0000000..d08a4de
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 0000000..65a94b5
--- /dev/null
+++ b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..497371e
--- /dev/null
+++ b/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..d50e550
--- /dev/null
+++ b/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
new file mode 100644
index 0000000..a7fede0
--- /dev/null
+++ b/ios/Runner/Info.plist
@@ -0,0 +1,194 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDocumentTypes
+
+
+ CFBundleTypeIconFiles
+
+ CFBundleTypeName
+ OFFICE Document
+ LSHandlerRank
+ Owner
+ LSItemContentTypes
+
+ com.microsoft.word.doc
+ com.microsoft.powerpoint.ppt
+ com.microsoft.excel.xls
+ com.adobe.pdf
+ org.openxmlformats.wordprocessingml.document
+ org.openxmlformats.presentationml.presentation
+ org.openxmlformats.spreadsheetml.sheet
+ public.data
+
+
+
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ Hibok
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+ CFBundleSignature
+ ????
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ fb473720630090702
+
+
+
+ CFBundleTypeRole
+ Editor
+ CFBundleURLSchemes
+
+ SharePhotos
+ wx02328a8853f058ad
+
+
+
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ FacebookAppID
+ 473720630090702
+ FacebookDisplayName
+ Hibok
+ LSApplicationQueriesSchemes
+
+ weixin
+ weixinULAPI
+ fb-messenger-share-api
+ fbauth2
+ fbapi
+ fbshareextension
+ iosamap
+ baidumap
+ comgooglemaps
+
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+ NSAllowsArbitraryLoadsInWebContent
+
+
+ NSAppleMusicUsageDescription
+ We use access to music responsibly
+ NSCalendarsUsageDescription
+ App need your agree, can visit your calendars
+ NSCameraUsageDescription
+ App need your agree, can visit your camera to take a picture and send it to a friend
+ NSContactsUsageDescription
+ App need your agree, can visit your contacts
+ NSLocationAlwaysUsageDescription
+ App need your agree, get your location to find nearby friends
+ NSLocationWhenInUseUsageDescription
+ App need your agree, get your location to find nearby friends
+ NSMicrophoneUsageDescription
+ App need your agree, can visit your microphone
+ NSMotionUsageDescription
+ App need your agree, can visit your motion
+ NSPhotoLibraryAddUsageDescription
+ App need your agree, can add photo
+ NSPhotoLibraryUsageDescription
+ App need your agree, can visit your photo library and send picture to friends
+ NSSpeechRecognitionUsageDescription
+ App need your agree, can visit your speech
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIViewControllerBasedStatusBarAppearance
+
+ UTExportedTypeDeclarations
+
+
+ UTTypeConformsTo
+
+ public.data
+ public.composite-content
+
+ UTTypeDescription
+ PDF文档
+ UTTypeIdentifier
+ com.adobe.pdf
+ UTTypeTagSpecification
+
+ public.filename-extension
+
+ pdf
+
+ public.mime-type
+ application/pdf
+
+
+
+ UTTypeConformsTo
+
+ public.data
+
+ UTTypeDescription
+ Word文档
+ UTTypeIdentifier
+ com.microsoft.word.doc
+ UTTypeTagSpecification
+
+ public.filename-extension
+
+ doc
+ docx
+
+ public.mime-type
+ application/msword
+
+
+
+ UTTypeConformsTo
+
+ public.data
+
+ UTTypeDescription
+ Excel Document
+ UTTypeIdentifier
+ com.microsoft.excel.xls
+ UTTypeTagSpecification
+
+ public.filename-extension
+
+ xls
+
+ public.mime-type
+ application/vnd.ms-excel
+
+
+
+ io.flutter.embedded_views_preview
+
+ kTCCServiceMediaLibrary
+ App need your agree, can visit your music
+
+
diff --git a/ios/Runner/Runner.entitlements b/ios/Runner/Runner.entitlements
new file mode 100644
index 0000000..96eb663
--- /dev/null
+++ b/ios/Runner/Runner.entitlements
@@ -0,0 +1,16 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.developer.applesignin
+
+ Default
+
+ com.apple.security.application-groups
+
+ group.com.cyhd.henho
+
+
+
diff --git a/ios/Runner/RunnerProfile.entitlements b/ios/Runner/RunnerProfile.entitlements
new file mode 100644
index 0000000..96eb663
--- /dev/null
+++ b/ios/Runner/RunnerProfile.entitlements
@@ -0,0 +1,16 @@
+
+
+
+
+ aps-environment
+ development
+ com.apple.developer.applesignin
+
+ Default
+
+ com.apple.security.application-groups
+
+ group.com.cyhd.henho
+
+
+
diff --git a/ios/Runner/en.lproj/InfoPlist.strings b/ios/Runner/en.lproj/InfoPlist.strings
new file mode 100644
index 0000000..1852f04
--- /dev/null
+++ b/ios/Runner/en.lproj/InfoPlist.strings
@@ -0,0 +1,14 @@
+/*
+ InfoPlist.strings
+ Runner
+
+ Created by 黄家豪 on 2019/12/19.
+ Copyright © 2019 The Chromium Authors. All rights reserved.
+*/
+NSMicrophoneUsageDescription = "Allow voice chat in apps, create voice messages etc";
+NSCameraUsageDescription = "For scanning QR codes, taking pictures, uploading avatars, and sending pictures";
+NSLocationAlwaysUsageDescription = "After the location is acquired, we can provide you with more accurate recommendation services";
+NSLocationWhenInUseUsageDescription = "After the location is acquired, we can provide you with more accurate recommendation services";
+NSPhotoLibraryUsageDescription = "For uploading avatars, publishing programs, sending pictures etc.";
+NSContactsUsageDescription = "You can add your phone buddies after getting your contacts";
+NSPhotoLibraryAddUsageDescription = "Used to save pictures sent by others";
diff --git a/ios/Runner/ja.lproj/InfoPlist.strings b/ios/Runner/ja.lproj/InfoPlist.strings
new file mode 100644
index 0000000..c05dcd8
--- /dev/null
+++ b/ios/Runner/ja.lproj/InfoPlist.strings
@@ -0,0 +1,14 @@
+/*
+ InfoPlist.strings
+ Runner
+
+ Created by 黄家豪 on 2019/12/19.
+ Copyright © 2019 The Chromium Authors. All rights reserved.
+*/
+NSMicrophoneUsageDescription = "アプリでのボイスチャットの許可、ボイスメッセージの作成など";
+NSCameraUsageDescription = "QRコードのスキャン、写真の撮影、アバターのアップロード、写真の送信";
+NSLocationAlwaysUsageDescription = "場所を取得した後、より正確な推奨サービスを提供できます";
+NSLocationWhenInUseUsageDescription = "場所を取得した後、より正確な推奨サービスを提供できます";
+NSPhotoLibraryUsageDescription = "アバターのアップロード、プログラムの公開、写真の送信など。";
+NSContactsUsageDescription = "連絡先を取得した後、電話のメンバーを追加できます";
+NSPhotoLibraryAddUsageDescription = "他から送信された写真を保存するために使用";
diff --git a/ios/Runner/ko.lproj/InfoPlist.strings b/ios/Runner/ko.lproj/InfoPlist.strings
new file mode 100644
index 0000000..7d6131e
--- /dev/null
+++ b/ios/Runner/ko.lproj/InfoPlist.strings
@@ -0,0 +1,14 @@
+/*
+ InfoPlist.strings
+ Runner
+
+ Created by 黄家豪 on 2019/12/19.
+ Copyright © 2019 The Chromium Authors. All rights reserved.
+*/
+NSMicrophoneUsageDescription = "앱에서 음성 채팅 허용, 음성 메시지 작성 등";
+NSCameraUsageDescription = "QR 코드 스캔, 사진 촬영, 아바타 업로드 및 사진 전송";
+NSLocationAlwaysUsageDescription = "위치를 확보하면보다 정확한 추천 서비스를 제공 할 수 있습니다.";
+NSLocationWhenInUseUsageDescription = "위치를 확보하면보다 정확한 추천 서비스를 제공 할 수 있습니다.";
+NSPhotoLibraryUsageDescription = "아바타 업로드, 프로그램 게시, 사진 전송 등";
+NSContactsUsageDescription = "당신은 당신의 연락처를 얻은 후 전화 친구를 추가 할 수 있습니다";
+NSPhotoLibraryAddUsageDescription = "다른 사람이 보낸 사진을 저장하는 데 사용";
diff --git a/ios/Runner/main.m b/ios/Runner/main.m
new file mode 100644
index 0000000..4618607
--- /dev/null
+++ b/ios/Runner/main.m
@@ -0,0 +1,9 @@
+#import
+#import
+#import "AppDelegate.h"
+
+int main(int argc, char* argv[]) {
+ @autoreleasepool {
+ return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+ }
+}
diff --git a/ios/Runner/vi.lproj/InfoPlist.strings b/ios/Runner/vi.lproj/InfoPlist.strings
new file mode 100644
index 0000000..f3e929f
--- /dev/null
+++ b/ios/Runner/vi.lproj/InfoPlist.strings
@@ -0,0 +1,14 @@
+/*
+ InfoPlist.strings
+ Runner
+
+ Created by 黄家豪 on 2019/12/19.
+ Copyright © 2019 The Chromium Authors. All rights reserved.
+*/
+NSMicrophoneUsageDescription = "Cho phép trò chuyện bằng giọng nói trong ứng dụng, tạo tin nhắn thoại và hơn thế nữa";
+NSCameraUsageDescription = "Để quét mã QR, chụp ảnh, tải lên hình đại diện và gửi hình ảnh";
+NSLocationAlwaysUsageDescription = "Sau khi có được vị trí, chúng tôi có thể cung cấp cho bạn các dịch vụ đề xuất chính xác hơn";
+NSLocationWhenInUseUsageDescription = "Sau khi có được vị trí, chúng tôi có thể cung cấp cho bạn các dịch vụ đề xuất chính xác hơn";
+NSPhotoLibraryUsageDescription = "Để tải lên hình đại diện, chương trình xuất bản, gửi hình ảnh, vv";
+NSContactsUsageDescription = "Sau khi nhận được, chúng tôi có thể cung cấp cho bạn các dịch vụ đề xuất chính xác hơn";
+NSPhotoLibraryAddUsageDescription = "Được sử dụng để lưu hình ảnh được gửi bởi người khác";
diff --git a/ios/Runner/zh-Hans.lproj/InfoPlist.strings b/ios/Runner/zh-Hans.lproj/InfoPlist.strings
new file mode 100644
index 0000000..7cc751d
--- /dev/null
+++ b/ios/Runner/zh-Hans.lproj/InfoPlist.strings
@@ -0,0 +1,14 @@
+/*
+ InfoPlist.strings
+ Runner
+
+ Created by 黄家豪 on 2019/12/19.
+ Copyright © 2019 The Chromium Authors. All rights reserved.
+*/
+NSMicrophoneUsageDescription = "允许在应用中进行语音聊天、创建语音消息等";
+NSCameraUsageDescription = "用于扫描二维码、拍照上传头像、发送图片功能";
+NSLocationAlwaysUsageDescription = "位置获取后可以为您提供更精准的推荐服务";
+NSLocationWhenInUseUsageDescription = "位置获取后可以为您提供更精准的推荐服务";
+NSPhotoLibraryUsageDescription = "用于上传头像、发布节目、发送图片等功能";
+NSContactsUsageDescription = "通讯录获取后可以添加您的手机好友";
+NSPhotoLibraryAddUsageDescription = "用于保存别人发送的的图片";
diff --git a/ios/Runner/zh-Hant.lproj/InfoPlist.strings b/ios/Runner/zh-Hant.lproj/InfoPlist.strings
new file mode 100644
index 0000000..4a51a22
--- /dev/null
+++ b/ios/Runner/zh-Hant.lproj/InfoPlist.strings
@@ -0,0 +1,14 @@
+/*
+ InfoPlist.strings
+ Runner
+
+ Created by 黄家豪 on 2019/12/19.
+ Copyright © 2019 The Chromium Authors. All rights reserved.
+*/
+NSMicrophoneUsageDescription = "允許在應用中進行語音聊天、創建語音消息等";
+NSCameraUsageDescription = "用於掃描二維碼、拍照上傳頭像、發送圖片功能";
+NSLocationAlwaysUsageDescription = "位置獲取後可以為您提供更精準的推薦服務";
+NSLocationWhenInUseUsageDescription = "位置獲取後可以為您提供更精準的推薦服務";
+NSPhotoLibraryUsageDescription = "用於上傳頭像、發布節目、發送圖片等功能";
+NSContactsUsageDescription = "通訊錄獲取後可以添加您的手機好友";
+NSPhotoLibraryAddUsageDescription = "用於保存別人發送的的圖片";
diff --git a/ios/Share Extension/Base.lproj/MainInterface.storyboard b/ios/Share Extension/Base.lproj/MainInterface.storyboard
new file mode 100644
index 0000000..286a508
--- /dev/null
+++ b/ios/Share Extension/Base.lproj/MainInterface.storyboard
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ios/Share Extension/Info.plist b/ios/Share Extension/Info.plist
new file mode 100644
index 0000000..cd7fadf
--- /dev/null
+++ b/ios/Share Extension/Info.plist
@@ -0,0 +1,46 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Share Extension
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ $(MARKETING_VERSION)
+ CFBundleVersion
+ $(CURRENT_PROJECT_VERSION)
+ NSExtension
+
+ NSExtensionAttributes
+
+ NSExtensionActivationRule
+
+ NSExtensionActivationSupportsImageWithMaxCount
+ 100
+ NSExtensionActivationSupportsMovieWithMaxCount
+ 100
+
+ PHSupportedMediaTypes
+
+ Image
+ Video
+
+
+ NSExtensionMainStoryboard
+ MainInterface
+ NSExtensionPointIdentifier
+ com.apple.share-services
+
+
+
diff --git a/ios/Share Extension/Share Extension.entitlements b/ios/Share Extension/Share Extension.entitlements
new file mode 100644
index 0000000..e149f21
--- /dev/null
+++ b/ios/Share Extension/Share Extension.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.application-groups
+
+ group.com.cyhd.henho
+
+
+
diff --git a/ios/Share Extension/Share ExtensionProfile.entitlements b/ios/Share Extension/Share ExtensionProfile.entitlements
new file mode 100644
index 0000000..e149f21
--- /dev/null
+++ b/ios/Share Extension/Share ExtensionProfile.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.security.application-groups
+
+ group.com.cyhd.henho
+
+
+
diff --git a/ios/Share Extension/ShareViewController.swift b/ios/Share Extension/ShareViewController.swift
new file mode 100644
index 0000000..1187f15
--- /dev/null
+++ b/ios/Share Extension/ShareViewController.swift
@@ -0,0 +1,283 @@
+import UIKit
+import Social
+import MobileCoreServices
+import Photos
+
+class ShareViewController: SLComposeServiceViewController {
+ // TODO: IMPORTANT: This should be your host app bundle identifier
+ let hostAppBundleIdentifier = "com.cyhd.henho"
+ let sharedKey = "ShareKey"
+ var sharedMedia: [SharedMediaFile] = []
+ var sharedText: [String] = []
+ let imageContentType = kUTTypeImage as String
+ let videoContentType = kUTTypeMovie as String
+ let textContentType = kUTTypeText as String
+ let urlContentType = kUTTypeURL as String
+
+ override func isContentValid() -> Bool {
+ return true
+ }
+
+ override func viewDidLoad() {
+ // This is called after the user selects Post. Do the upload of contentText and/or NSExtensionContext attachments.
+
+ if let content = extensionContext!.inputItems[0] as? NSExtensionItem {
+ if let contents = content.attachments {
+ for (index, attachment) in (contents as! [NSItemProvider]).enumerated() {
+
+ if attachment.hasItemConformingToTypeIdentifier(imageContentType) {
+ handleImages(content: content, attachment: attachment, index: index)
+ } else if attachment.hasItemConformingToTypeIdentifier(textContentType) {
+ handleText(content: content, attachment: attachment, index: index)
+ } else if attachment.hasItemConformingToTypeIdentifier(urlContentType) {
+ handleUrl(content: content, attachment: attachment, index: index)
+ } else if attachment.hasItemConformingToTypeIdentifier(videoContentType) {
+// handleVideos(content: content, attachment: attachment, index: index)
+ }
+ }
+ }
+ }
+ }
+
+ override func didSelectPost() {
+ print("didSelectPost");
+ }
+
+ override func configurationItems() -> [Any]! {
+ // To add configuration options via table cells at the bottom of the sheet, return an array of SLComposeSheetConfigurationItem here.
+ return []
+ }
+
+ private func handleText (content: NSExtensionItem, attachment: NSItemProvider, index: Int) {
+ attachment.loadItem(forTypeIdentifier: textContentType, options: nil) { [weak self] data, error in
+
+ if error == nil, let item = data as? String, let this = self {
+
+ this.sharedText.append(item)
+
+ // If this is the last item, save imagesData in userDefaults and redirect to host app
+ if index == (content.attachments?.count)! - 1 {
+ let userDefaults = UserDefaults(suiteName: "group.\(this.hostAppBundleIdentifier)")
+ userDefaults?.set(this.sharedText, forKey: this.sharedKey)
+ userDefaults?.synchronize()
+ this.redirectToHostApp(type: .text)
+ }
+
+ } else {
+ self?.dismissWithError()
+ }
+ }
+ }
+
+ private func handleUrl (content: NSExtensionItem, attachment: NSItemProvider, index: Int) {
+ attachment.loadItem(forTypeIdentifier: urlContentType, options: nil) { [weak self] data, error in
+
+ if error == nil, let item = data as? URL, let this = self {
+
+ this.sharedText.append(item.absoluteString)
+
+ // If this is the last item, save imagesData in userDefaults and redirect to host app
+ if index == (content.attachments?.count)! - 1 {
+ let userDefaults = UserDefaults(suiteName: "group.\(this.hostAppBundleIdentifier)")
+ userDefaults?.set(this.sharedText, forKey: this.sharedKey)
+ userDefaults?.synchronize()
+ this.redirectToHostApp(type: .text)
+ }
+
+ } else {
+ self?.dismissWithError()
+ }
+ }
+ }
+
+ private func handleImages (content: NSExtensionItem, attachment: NSItemProvider, index: Int) {
+ attachment.loadItem(forTypeIdentifier: imageContentType, options: nil) { [weak self] data, error in
+
+ if error == nil, let url = data as? URL, let this = self {
+
+ // Always copy
+ let fileExtension = this.getExtension(from: url, type: .image)
+ let newName = UUID().uuidString
+ let newPath = FileManager.default
+ .containerURL(forSecurityApplicationGroupIdentifier: "group.\(this.hostAppBundleIdentifier)")!
+ .appendingPathComponent("\(newName).\(fileExtension)")
+ let copied = this.copyFile(at: url, to: newPath)
+ if(copied) {
+ this.sharedMedia.append(SharedMediaFile(path: newPath.absoluteString, thumbnail: nil, duration: nil, type: .image))
+ }
+
+ // If this is the last item, save imagesData in userDefaults and redirect to host app
+ if index == (content.attachments?.count)! - 1 {
+ let userDefaults = UserDefaults(suiteName: "group.\(this.hostAppBundleIdentifier)")
+ userDefaults?.set(this.toData(data: this.sharedMedia), forKey: this.sharedKey)
+ userDefaults?.synchronize()
+ this.redirectToHostApp(type: .media)
+ }
+
+ } else {
+ self?.dismissWithError()
+ }
+ }
+ }
+
+// private func handleVideos (content: NSExtensionItem, attachment: NSItemProvider, index: Int) {
+// attachment.loadItem(forTypeIdentifier: videoContentType, options: nil) { [weak self] data, error in
+//
+// if error == nil, let url = data as? URL, let this = self {
+//
+// // Always copy
+// let fileExtension = this.getExtension(from: url, type: .video)
+// let newName = UUID().uuidString
+// let newPath = FileManager.default
+// .containerURL(forSecurityApplicationGroupIdentifier: "group.\(this.hostAppBundleIdentifier)")!
+// .appendingPathComponent("\(newName).\(fileExtension)")
+// let copied = this.copyFile(at: url, to: newPath)
+// if(copied) {
+// guard let sharedFile = this.getSharedMediaFile(forVideo: newPath) else {
+// return
+// }
+// this.sharedMedia.append(sharedFile)
+// }
+//
+// // If this is the last item, save imagesData in userDefaults and redirect to host app
+// if index == (content.attachments?.count)! - 1 {
+// let userDefaults = UserDefaults(suiteName: "group.\(this.hostAppBundleIdentifier)")
+// userDefaults?.set(this.toData(data: this.sharedMedia), forKey: this.sharedKey)
+// userDefaults?.synchronize()
+// this.redirectToHostApp(type: .media)
+// }
+//
+// } else {
+// self?.dismissWithError()
+// }
+// }
+// }
+
+ private func dismissWithError() {
+ print("GETTING ERROR")
+ let alert = UIAlertController(title: "Error", message: "Error loading data", preferredStyle: .alert)
+
+ let action = UIAlertAction(title: "Error", style: .cancel) { _ in
+ self.dismiss(animated: true, completion: nil)
+ }
+
+ alert.addAction(action)
+ present(alert, animated: true, completion: nil)
+ extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
+ }
+
+ private func redirectToHostApp(type: RedirectType) {
+ let url = URL(string: "SharePhotos://dataUrl=\(sharedKey)#\(type)")
+ var responder = self as UIResponder?
+ let selectorOpenURL = sel_registerName("openURL:")
+
+ while (responder != nil) {
+ if (responder?.responds(to: selectorOpenURL))! {
+ let _ = responder?.perform(selectorOpenURL, with: url)
+ }
+ responder = responder!.next
+ }
+ extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
+ }
+
+ enum RedirectType {
+ case media
+ case text
+ }
+
+ func getExtension(from url: URL, type: SharedMediaType) -> String {
+ let parts = url.lastPathComponent.components(separatedBy: ".")
+ var ex: String? = nil
+ if (parts.count > 1) {
+ ex = parts.last
+ }
+
+ if (ex == nil) {
+ switch type {
+ case .image:
+ ex = "PNG"
+ case .video:
+ ex = "MP4"
+ }
+ }
+ return ex ?? "Unknown"
+ }
+
+ func copyFile(at srcURL: URL, to dstURL: URL) -> Bool {
+ do {
+ if FileManager.default.fileExists(atPath: dstURL.path) {
+ try FileManager.default.removeItem(at: dstURL)
+ }
+ try FileManager.default.copyItem(at: srcURL, to: dstURL)
+ } catch (let error) {
+ print("Cannot copy item at \(srcURL) to \(dstURL): \(error)")
+ return false
+ }
+ return true
+ }
+
+// private func getSharedMediaFile(forVideo: URL) -> SharedMediaFile? {
+// let asset = AVAsset(url: forVideo)
+// let duration = (CMTimeGetSeconds(asset.duration) * 1000).rounded()
+// let thumbnailPath = getThumbnailPath(for: forVideo)
+//
+// if FileManager.default.fileExists(atPath: thumbnailPath.path) {
+// return SharedMediaFile(path: forVideo.absoluteString, thumbnail: thumbnailPath.absoluteString, duration: duration, type: .video)
+// }
+//
+// var saved = false
+// let assetImgGenerate = AVAssetImageGenerator(asset: asset)
+// assetImgGenerate.appliesPreferredTrackTransform = true
+// // let scale = UIScreen.main.scale
+// assetImgGenerate.maximumSize = CGSize(width: 360, height: 360)
+// do {
+// let img = try assetImgGenerate.copyCGImage(at: CMTimeMakeWithSeconds(1.0, 600), actualTime: nil)
+// try UIImagePNGRepresentation(UIImage(cgImage: img))?.write(to: thumbnailPath)
+// saved = true
+// } catch {
+// saved = false
+// }
+//
+// return saved ? SharedMediaFile(path: forVideo.absoluteString, thumbnail: thumbnailPath.absoluteString, duration: duration, type: .video) : nil
+//
+// }
+
+ private func getThumbnailPath(for url: URL) -> URL {
+ let fileName = Data(url.lastPathComponent.utf8).base64EncodedString().replacingOccurrences(of: "==", with: "")
+ let path = FileManager.default
+ .containerURL(forSecurityApplicationGroupIdentifier: "group.\(hostAppBundleIdentifier)")!
+ .appendingPathComponent("\(fileName).jpg")
+ return path
+ }
+
+ class SharedMediaFile: Codable {
+ var path: String; // can be image, video or url path. It can also be text content
+ var thumbnail: String?; // video thumbnail
+ var duration: Double?; // video duration in milliseconds
+ var type: SharedMediaType;
+
+
+ init(path: String, thumbnail: String?, duration: Double?, type: SharedMediaType) {
+ self.path = path
+ self.thumbnail = thumbnail
+ self.duration = duration
+ self.type = type
+ }
+ }
+
+ enum SharedMediaType: Int, Codable {
+ case image
+ case video
+ }
+
+ func toData(data: [SharedMediaFile]) -> Data {
+ let encodedData = try? JSONEncoder().encode(data)
+ return encodedData!
+ }
+}
+
+extension Array {
+ subscript (safe index: UInt) -> Element? {
+ return Int(index) < count ? self[Int(index)] : nil
+ }
+}
diff --git a/jsons/user.json b/jsons/user.json
new file mode 100644
index 0000000..1ad1cae
--- /dev/null
+++ b/jsons/user.json
@@ -0,0 +1,4 @@
+{
+ "name": "John Smith",
+ "email": "john@example.com"
+}
\ No newline at end of file
diff --git a/lib/chat/ChatPage.dart b/lib/chat/ChatPage.dart
new file mode 100644
index 0000000..3b2e3c0
--- /dev/null
+++ b/lib/chat/ChatPage.dart
@@ -0,0 +1,535 @@
+import 'dart:io';
+
+import 'package:chat/chat/translate_state.dart';
+import 'package:chat/data/UserData.dart';
+import 'package:chat/data/chat_data_mgr.dart';
+import 'package:chat/data/constants.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/models/ChatMsg.dart';
+import 'package:chat/models/UserInfo.dart';
+import 'package:chat/models/keyboard_provider.dart';
+import 'package:chat/models/ref_name_provider.dart';
+import 'package:chat/models/voucher_change.dart';
+import 'package:chat/proto/all.pbserver.dart';
+import 'package:chat/utils/CustomUI.dart';
+import 'package:chat/utils/HttpUtil.dart';
+import 'package:chat/utils/MessageMgr.dart';
+import 'package:chat/utils/TokenMgr.dart';
+import 'package:chat/utils/analyze_utils.dart';
+import 'package:chat/utils/app_navigator.dart';
+import 'package:chat/utils/blacklist_mgr.dart';
+import 'package:chat/utils/friend_list_mgr.dart';
+import 'package:chat/utils/msgHandler.dart';
+import 'package:chat/utils/net_state_widget.dart';
+import 'package:chat/utils/sound_util.dart';
+import 'package:chat/utils/sp_utils.dart';
+import 'package:chat/utils/sql_util.dart';
+import 'package:dio/dio.dart';
+import 'package:extended_text/extended_text.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:oktoast/oktoast.dart';
+import 'package:provider/provider.dart';
+import '../r.dart';
+import 'ChatPageItem.dart';
+import 'input_bar.dart';
+import 'package:chat/utils/PopUpMenu.dart' as myPop;
+import 'package:chat/models/money_change.dart';
+
+
+class ChatPage extends StatefulWidget {
+ final int friendId;
+ final int enterType; // 0默认 1图片
+ final dynamic enterContent;
+ ChatPage({Key key, this.friendId, this.enterType = 0, this.enterContent})
+ : super(key: key);
+
+ _ChatPageState createState() => _ChatPageState();
+}
+
+class _ChatPageState extends State {
+ ScrollController _scrollCtrl = ScrollController();
+
+ MessageMgr msgMgr = MessageMgr();
+
+ UserInfo friendInfo;
+
+ List msgList;
+
+ KeyboardIndexProvider _keyboardIndexProvider = KeyboardIndexProvider();
+
+ TextEditingController nickNameController = new TextEditingController();
+
+ //统计聊天时长
+ int startTime;
+
+ @override
+ void dispose() {
+ var endTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
+ AnalyzeUtils.commitChatDuration(startTime, endTime);
+
+ MessageMgr().off('Send CoinBag', _sendCoin);
+ msgMgr.off('New Chat Message', receiveMsg);
+ msgMgr.off('Keyboard Hide', dealWithKeyboardHide);
+ msgMgr.off('Delete Select Message', _deleteItem);
+
+ MsgHandler.curActiveSession = 0;
+ SoundUtils().stop();
+ nickNameController.dispose();
+ _scrollCtrl.dispose();
+
+ super.dispose();
+ }
+
+ @override
+ void initState() {
+ super.initState();
+ print('init chatpage');
+ getDefaultSetting();
+ getUserInfo();
+
+ startTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
+
+ msgList = ChatDataMgr().getRecord();
+
+ msgMgr.on('New Chat Message', receiveMsg);
+ msgMgr.on('Keyboard Hide', dealWithKeyboardHide);
+ msgMgr.on('Send CoinBag', _sendCoin);
+ msgMgr.on('Delete Select Message', _deleteItem);
+ }
+
+ void _sendFile(File file) async {
+// File file = await FilePicker.getFile();
+ int fileSize = file.lengthSync();
+ print('选择的文件 ${file.path} 大小 $fileSize');
+
+ if (fileSize > 33 * 1024 * 1024) {
+ showToast('文件大于33M');
+ return;
+ }
+
+ var fileName = file.path.split('/').last;
+ print('fileName $fileName');
+
+ var ext = '';
+ var extList = fileName.split('.');
+ if (extList.length > 1) {
+ ext = extList.last;
+ }
+ print('ext $ext');
+
+ var fileMsg = FileChat.create();
+ fileMsg.type = ext;
+ fileMsg.size = fileSize;
+ fileMsg.name = fileName;
+
+ var msg = MsgHandler.createSendMsg(
+ ChatType.FileChatType, fileMsg.writeToBuffer(),
+ friendId: widget.friendId,
+ localFile: file.path,
+ channelType: ChatChannelType.Session);
+
+ sendMsg(msg);
+ }
+
+ _sendCoin(args) async {
+ var res = await _checkCoinBeforeSend(args['amount']);
+ if (res != null) {
+ args['redNo'] = res['redNo'];
+ args['friendId'] = widget.friendId;
+ var msg = MsgHandler.createCoinBagMsg(args);
+
+ sendMsg(msg);
+ }
+ }
+
+//校验
+ _checkCoinBeforeSend(int amount) async {
+ Map data = {
+ "userId": UserData().basicInfo.userId,
+ "rUserId": friendInfo.userId,
+ "price": amount,
+ };
+ data['sign'] = TokenMgr().getSign(data);
+
+ Response res = await HttpUtil().post('red/packet/send', data: data);
+ if (res == null) {
+ return null;
+ }
+ Map resData = res.data;
+ if (resData['code'] == 0) {
+ print(resData['data']);
+ return resData['data'];
+ }
+
+ return null;
+ }
+
+ void getDefaultSetting() async {
+ bool soundPlayMode =
+ (await SPUtils.getBool(Constants.SOUND_PLAY_MODE)) ?? false;
+
+ _keyboardIndexProvider.init(soundPlayMode);
+ }
+
+ dealWithKeyboardHide(args) {
+ if (_keyboardIndexProvider.curKeyboardIndex == 0) {
+ hideKeyBoard();
+ }
+ }
+
+ getUserInfo() async {
+ //先从本地获取用户信息
+ friendInfo = await HttpUtil().getFriendInfo(widget.friendId, true);
+
+ //如果是新的聊天,向服务器发送创建会话消息
+ if (msgList.length == 0) {
+ MsgHandler.getActiveSesstion(
+ [friendInfo.userId, UserData().basicInfo.userId]);
+ }
+
+ if (mounted) {
+ setState(() {});
+ }
+
+ WidgetsBinding.instance.addPostFrameCallback((_) {
+ if (widget.enterType == 1) {
+ print('接收到的:${widget.enterContent}');
+
+ File file = new File(widget.enterContent);
+ if(file.existsSync()){
+ print('接收到的文件--存在');
+ }else{
+ print('接收到的文件--不存在');
+ }
+
+ _sendFile(File(widget.enterContent));
+ }
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ print('build chatpage');
+
+ if (friendInfo == null) {
+ return Scaffold(
+ backgroundColor: const Color(0xFFE2E9F1),
+ body: SafeArea(
+ child: Center(
+ child: CircularProgressIndicator(),
+ ),
+ ),
+ );
+ }
+
+ List actions = [];
+
+ int voucher = Provider.of(context).voucher;
+ actions.add(Row(
+ children: [
+ CustomUI.buildImageLabel("assets/images/voucher.png", voucher,
+ imgOpc: 0.5, imgHeight: 13),
+ CustomUI.buildImageLabel(
+ R.assetsImagesCoin, Provider.of(context).money,
+ isLeft: false)
+ ],
+ ));
+ actions.add(TranslateSateWidget(friendId: friendInfo.userId));
+ actions.add(Container(
+ margin: EdgeInsets.only(top: 1),
+ child: myPop.PopupMenuButton(
+ icon: Icon(
+ Icons.more_horiz,
+ size: 24,
+ ),
+ offset: Offset(0, 100),
+ onSelected: (int index) {
+ if (index == 2) {
+ AppNavigator.pushInformUserPage(
+ context, friendInfo.sex == 1, friendInfo.userId);
+ } else if (index == 1) {
+ nickNameController.text = Provider.of(context)
+ .getRefName(friendInfo.userId, friendInfo.nickName);
+
+ var confirm = CustomUI.buildConfirmBotton(
+ I18n.of(context).determine, () async {
+ nickNameController.text = nickNameController.text.trim();
+ if (nickNameController.text == null ||
+ nickNameController.text.length > 25) {
+ showToast(I18n.of(context).only1_8);
+ return;
+ }
+ Provider.of(context).changeRefName(
+ friendInfo.userId, nickNameController.text, () {
+ Navigator.of(context).pop();
+ });
+ });
+ var tip = Column(
+ children: [
+ Container(
+ margin: EdgeInsets.only(top: 20),
+ child: Text(
+ I18n.of(context).setRemark,
+ textScaleFactor: 1.0,
+ style: TextStyle(
+ color: Constants.BlackTextColor, fontSize: 16),
+ ),
+ ),
+ Container(
+ margin: EdgeInsets.only(top: 23, bottom: 25),
+ decoration: BoxDecoration(
+ color: Colors.grey[200],
+ borderRadius: BorderRadius.all(Radius.circular(8))),
+ child: TextField(
+ keyboardAppearance: Brightness.light,
+ controller: nickNameController,
+ textAlign: TextAlign.center,
+ textInputAction: TextInputAction.search,
+ style: TextStyle(
+ textBaseline: TextBaseline.alphabetic,
+ fontSize: 14),
+ decoration: InputDecoration(
+ hintText: friendInfo.nickName,
+ hintStyle: TextStyle(fontSize: 12),
+ filled: true,
+ contentPadding: EdgeInsets.only(top: 10, bottom: 10),
+ fillColor: Colors.transparent,
+ border: InputBorder.none,
+ ),
+ maxLines: 1,
+ inputFormatters: [LengthLimitingTextInputFormatter(15)],
+ ),
+ )
+ ],
+ );
+ var content = CustomUI.buildConfirmContent(tip, confirm);
+ CustomUI.buildTip(context, '', content);
+ }
+ },
+ itemBuilder: (BuildContext context) {
+ return >[
+ myPop.PopupMenuItem(
+ child: Container(
+ alignment: Alignment.center,
+ color: Colors.white,
+ padding: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
+ child: Text(I18n.of(context).anonymous_report,
+ textScaleFactor: 1.0,
+ maxLines: 1,
+ style: TextStyle(
+ color: Color(AppColors.AppBarColor), fontSize: 12)),
+ ),
+ value: 2,
+ ),
+ myPop.PopupMenuItem(
+ child: Container(
+ decoration: BoxDecoration(
+ border: Border(
+ top: BorderSide(width: 1, color: Colors.grey[300])),
+ color: Colors.white,
+ ),
+ alignment: Alignment.center,
+ padding: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
+ child: Text(I18n.of(context).Remark,
+ textScaleFactor: 1.0,
+ maxLines: 1,
+ style: TextStyle(
+ color: Color(AppColors.AppBarColor), fontSize: 12)),
+ ),
+ value: 1,
+ ),
+ ];
+ })));
+
+ return MultiProvider(
+ providers: [
+ ChangeNotifierProvider(create: (_) => _keyboardIndexProvider),
+ Provider.value(value: false),
+ Provider.value(value: widget.friendId),
+ ],
+ child: GestureDetector(
+ onTap: hideKeyBoard,
+ child: ExtendedTextSelectionPointerHandler(
+ ///选择文字,消除弹窗
+
+ builder: (states) {
+ return Listener(
+ child: Scaffold(
+ resizeToAvoidBottomInset: false,
+ backgroundColor: const Color(0xFFE2E9F1),
+ // appBar: PreferredSize(
+ // preferredSize: Size.fromHeight(58),
+ // child: Container(
+ // color: AppBarTheme.of(context).color,
+ // child: SafeArea(
+ // child: Container(
+ // height: 56,
+ // child: Row(children: [
+ // SizedBox(width: 10),
+ // CustomUI.buildCustomLeading(context),
+ // Text(
+ // Provider.of(context)
+ // .getRefName(friendInfo.userId,
+ // friendInfo.nickName),
+ // textScaleFactor: 1.0,
+ // style: TextStyle(
+ // textBaseline: TextBaseline.ideographic,
+ // color: Constants.BlackTextColor,
+ // fontSize: 16.47),
+ // ),
+ // Expanded(
+ // child: Row(
+ // mainAxisAlignment:
+ // MainAxisAlignment.end,
+ // children: actions))
+ // ]),
+ // )))),
+ appBar: AppBar(
+ title: Text(
+ '${Provider.of(context).getRefName(friendInfo.userId, friendInfo.nickName)}',
+ textScaleFactor: 1.0,
+ style: TextStyle(
+ color: Constants.BlackTextColor,
+ fontSize: 16.47),
+ ),
+ leading: CustomUI.buildCustomLeading(context),
+ titleSpacing: -10,
+ centerTitle: false,
+ elevation: 1,
+ actions: actions),
+ body: SafeArea(
+ child: Column(
+ children: [
+ NetStateWidget(),
+ Expanded(child: _buildMessageList()),
+ InputBar(sendMsg: sendMsg),
+ ],
+ ))),
+ behavior: HitTestBehavior.translucent,
+ onPointerDown: (value) {
+ for (var state in states) {
+ if (!state.containsPosition(value.position)) {
+ //clear other selection
+ state.clearSelection();
+ }
+ }
+ },
+ onPointerMove: (value) {
+ //clear other selection
+ for (var state in states) {
+ if (!state.containsPosition(value.position)) {
+ //clear other selection
+ state.clearSelection();
+ }
+ }
+ },
+ );
+ },
+ )));
+ }
+
+ Widget _buildMessageList() {
+ return Container(
+ alignment: Alignment.topCenter,
+ child: msgList.length == 0
+ ? Padding(
+ padding: EdgeInsets.all(8),
+ child: Text(
+ I18n.of(context).chat_tips,
+ textAlign: TextAlign.center,
+ textScaleFactor: 1.0,
+ style: TextStyle(color: Colors.grey, fontSize: 12),
+ ))
+ : NotificationListener(
+ child: Scrollbar(
+ child: ListView.builder(
+ reverse: true,
+ shrinkWrap: true,
+ itemCount: msgList.length,
+ controller: _scrollCtrl,
+ padding: EdgeInsets.all(8.0),
+ itemBuilder: _buildItem,
+ )),
+ onNotification: (notification) {
+ if (notification is ScrollNotification) {
+ // var offset = notification.metrics.pixels;
+ // print('滚动事件 offset $offset');
+ }
+ return true;
+ },
+ ),
+ );
+ }
+
+ hideKeyBoard() {
+ _keyboardIndexProvider.changeSelectIndex(-1);
+ }
+
+ readOnly() {
+ _keyboardIndexProvider.changeReadOnlyKey(true);
+ }
+
+ sendMsg(MsgModel msg) {
+ print('对方是否拉黑你 ${friendInfo.isBlackened}');
+ if (BlacklistMgr.isBlaklistMe(friendInfo.userId)) {
+ showToast(I18n.of(context).you_are_blaklisted);
+ return;
+ }
+
+ if (BlacklistMgr.isInMyblaklist(friendInfo.userId)) {
+ showToast(I18n.of(context).reject_message);
+ return;
+ }
+
+ if (!friendInfo.isCanStrangerNews &&
+ !FriendListMgr().isMyFriend(friendInfo.userId)) {
+ showToast(I18n.of(context).stranger_close_tips);
+ return;
+ }
+
+ MsgHandler.insertMsgToDB(msg);
+ MsgHandler.sendChatMsg(msg);
+ if (mounted) {
+ setState(() {});
+ if (_scrollCtrl.hasClients) {
+ _scrollCtrl.animateTo(0,
+ duration: new Duration(milliseconds: 500), curve: Curves.ease);
+ }
+ }
+ }
+
+ void receiveMsg(args) {
+ if (mounted) {
+ setState(() {});
+ if (_scrollCtrl.hasClients) {
+ _scrollCtrl.animateTo(0,
+ duration: new Duration(milliseconds: 500), curve: Curves.ease);
+ }
+ }
+ }
+
+ _deleteItem(msg) {
+ MessageMgr().emit('Cancel Request', msg);
+ print('#### 开始删除--');
+ msgList.remove(msg);
+ setState(() {});
+ SqlUtil().deleteSigleRecordWith(msg.sessionId, msg.time);
+ }
+
+ Widget _buildItem(BuildContext context, int index) {
+ var lastMsgTime;
+ if (index < msgList.length - 1) {
+ lastMsgTime = msgList[index + 1].time;
+ }
+
+ MsgModel msg = msgList[index];
+ return ChatPageItem(
+ key: Key(msg.time.toString()),
+ msg: msg,
+ hideKeyboard: readOnly,
+ friendInfo: friendInfo,
+ lastMsgTime: lastMsgTime);
+ }
+}
diff --git a/lib/chat/ChatPageItem.dart b/lib/chat/ChatPageItem.dart
new file mode 100644
index 0000000..50cb465
--- /dev/null
+++ b/lib/chat/ChatPageItem.dart
@@ -0,0 +1,1302 @@
+import 'dart:convert';
+import 'dart:math';
+import 'dart:typed_data';
+
+import 'package:cached_network_image/cached_network_image.dart';
+import 'package:chat/chat/download_item.dart';
+import 'package:chat/chat/file_msg_item.dart';
+import 'package:chat/chat/gift_msg_item.dart';
+import 'package:chat/chat/msg_state_widge.dart';
+import 'package:chat/chat/place_item.dart';
+import 'package:chat/chat/redbag_widget.dart';
+import 'package:chat/chat/upload_item.dart';
+import 'package:chat/chat/video_view.dart';
+import 'package:chat/data/UserData.dart';
+import 'package:chat/data/constants.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/models/ChatMsg.dart';
+import 'package:chat/models/UserInfo.dart';
+import 'package:chat/models/group_info_model.dart';
+import 'package:chat/models/keyboard_provider.dart';
+import 'package:chat/models/ref_name_provider.dart';
+import 'package:chat/proto/chat.pbenum.dart';
+import 'package:chat/proto/chat.pbserver.dart';
+import 'package:chat/utils/CustomUI.dart';
+import 'package:chat/utils/HttpUtil.dart';
+import 'package:chat/utils/MessageMgr.dart';
+import 'package:chat/utils/app_navigator.dart';
+import 'package:chat/utils/date_utils.dart';
+import 'package:chat/utils/msgHandler.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:chat/utils/sound_util.dart';
+import 'package:chat/utils/upload_util.dart';
+import 'package:chat/utils/video_anim.dart';
+import 'package:chat/utils/wpop/w_popup_menu.dart';
+import 'package:dio/dio.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:oktoast/oktoast.dart';
+import 'package:provider/provider.dart';
+
+import '../r.dart';
+import 'full_img_view.dart';
+import 'upload_item.dart';
+import 'package:chat/models/money_change.dart';
+import 'package:chat/models/voucher_change.dart';
+
+const double ChatRadius = 7.5;
+const Color SendMsgBg = Color(0xFFD4F0FF);
+
+const double TextHeight = 1.2;
+
+const double PaddingLeft = 9.5;
+
+const Color ReciveBorderColor = Color(0xFFDCDCDC);
+
+const double FontSize = 15;
+
+class ChatPageItem extends StatefulWidget {
+ final MsgModel msg;
+
+ final UserInfo friendInfo;
+ final int lastMsgTime;
+
+ final Function hideKeyboard;
+
+ const ChatPageItem(
+ {Key key, this.msg, this.lastMsgTime, this.friendInfo, this.hideKeyboard})
+ : assert(msg != null),
+ super(key: key);
+
+ @override
+ _ChatPageItemState createState() => _ChatPageItemState();
+}
+
+class _ChatPageItemState extends State
+ with SingleTickerProviderStateMixin {
+ int curTextType = 0; //文字、译文切换索引
+ List textList = [];
+
+ UserInfo friendInfo;
+
+ String curSoundUrl;
+
+ CancelToken _cancelToken = CancelToken();
+
+ bool isLongPressed = false;
+ @override
+ void initState() {
+ super.initState();
+ friendInfo = widget.friendInfo;
+
+ if (widget.msg.from == UserData().basicInfo.userId &&
+ widget.msg.state == MsgState.None) {
+ print('重新发送消息');
+ MsgHandler.sendChatMsg(widget.msg);
+ }
+
+ textList = widget.msg.getTransTextList();
+
+ MessageMgr().on('Update Translate Message', updateTranslateMsg);
+ MessageMgr().on('Cancel Request', _deleteItem);
+
+ MessageMgr().on('Cancel Request', _deleteItem);
+ }
+
+ @override
+ void dispose() {
+ MessageMgr().off('Cancel Request', _deleteItem);
+ MessageMgr().off('Update Translate Message', updateTranslateMsg);
+ super.dispose();
+ }
+
+ _deleteItem(msg) {
+ if (msg == widget.msg) {
+ print(widget.msg.state);
+ if (widget.msg.state == MsgState.Uploading) {
+ print('取消上传');
+ UploadUtil().cancelRequests(_cancelToken);
+ }
+ }
+ }
+
+ updateTextList() {
+ textList.clear();
+ curTextType = 0;
+ textList = widget.msg.getTransTextList();
+ }
+
+ updateTranslateMsg(msg) {
+ if (msg.time == widget.msg.time) {
+ if (mounted) {
+ updateTextList();
+ if (!mounted) {
+ return;
+ }
+ setState(() {
+ print('更新翻译文字');
+ });
+ }
+ }
+ }
+
+ getTodayTime(msgDate) {
+ String showTimeStr;
+
+ var sendTime = widget.msg.time;
+ var today = DateTime.now();
+ //今天
+ if (msgDate.year == today.year &&
+ msgDate.month == today.month &&
+ msgDate.day == today.day) {
+ showTimeStr =
+ DateUtils().getFormartData(timeSamp: sendTime, format: 'HH:mm');
+ } else {
+ showTimeStr = DateUtils()
+ .getFormartData(timeSamp: sendTime, format: 'yyyy/MM/dd HH:mm');
+ }
+
+ return showTimeStr;
+ }
+
+ String getMsgTime() {
+ String showTimeStr;
+
+ var sendTime = widget.msg.time;
+
+ var msgDate = DateTime.fromMillisecondsSinceEpoch(sendTime);
+ if (widget.lastMsgTime == null) {
+ showTimeStr = getTodayTime(msgDate);
+ } else {
+ if (sendTime - widget.lastMsgTime > 3 * 60 * 1000) {
+ showTimeStr = getTodayTime(msgDate);
+ }
+ }
+
+ return showTimeStr;
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ var showTime = getMsgTime();
+
+ return Container(
+ width: Screen.width,
+ margin: const EdgeInsets.symmetric(vertical: 10.0),
+ child: Column(
+ children: [
+ showTime == null
+ ? SizedBox()
+ : Container(
+ decoration: BoxDecoration(
+ color: Color(0xFF2C2F36).withOpacity(0.25),
+ borderRadius: BorderRadius.all(Radius.circular(9.5))),
+ padding:
+ EdgeInsets.only(left: 7, right: 7, top: 3, bottom: 2),
+ child: Text(showTime,
+ textScaleFactor: 1.0,
+ style: TextStyle(fontSize: 10.0, color: Colors.white)),
+ ),
+ SizedBox(height: 10),
+ _msgWidget()
+ ],
+ ),
+ );
+ }
+
+ _msgWidget() {
+ if (widget.msg.from == 0) {
+ return _serverNotifyMsg();
+ } else {
+ if (widget.msg.from == UserData().basicInfo.userId) {
+ return _getSentMessageLayout(context);
+ } else {
+ return _getReceivedMessageLayout(context);
+ }
+ }
+ }
+
+ _serverNotifyMsg() {
+ var type = widget.msg.msgType;
+
+ if (type == ChatType.RedWalletChatType.value) {
+ RedWallet wallet = RedWallet.fromBuffer(widget.msg.msgContent);
+
+ var msg = '';
+
+ if (wallet.state == RedWalletState.Received) {
+ if (wallet.tuId == friendInfo.userId) {
+ msg = I18n.of(context).get_money.replaceFirst(
+ '/s1',
+ Provider.of(context)
+ .getRefName(friendInfo.userId, friendInfo.nickName));
+ } else {
+ msg = I18n.of(context).you_get_money.replaceFirst(
+ '/s1',
+ Provider.of(context)
+ .getRefName(friendInfo.userId, friendInfo.nickName));
+ }
+ } else {
+ if (wallet.tuId == friendInfo.userId) {
+ msg = I18n.of(context).your_redMoney_over;
+ } else {
+ msg = I18n.of(context).other_redMoney_over;
+ }
+ }
+
+ return Container(
+ alignment: Alignment.center,
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ child: extendedText(msg, color: Constants.GreyTextColor, fontSize: 12),
+ );
+ } else {
+ if (type == ChatType.GroupChatNoticeType.value) {
+ var res = GroupChatNotice.fromBuffer(widget.msg.msgContent);
+
+ var groupInfoModel = Provider.of(context);
+ var showStr = MsgHandler.getGroupNoticeMsg(res, groupInfoModel);
+ return Container(
+ alignment: Alignment.center,
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ child: Text(
+ showStr,
+ textScaleFactor: 1.0,
+ textAlign: TextAlign.center,
+ style: TextStyle(color: Constants.GreyTextColor, fontSize: 12),
+ ),
+ );
+ }
+ }
+ return Container();
+ }
+
+ _textGif(List msgContent) {
+ var msg = utf8.decode(msgContent);
+ return Container(
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ child: extendedText(
+ msg,
+ hideKeyboard: widget.hideKeyboard,
+ fontSize: FontSize,
+ color: Colors.black,
+ ),
+ );
+ }
+
+ _textMsg(List msgContent) {
+ var msg = utf8.decode(msgContent);
+
+ Widget text = Container(
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ child: extendedText(
+ msg,
+ hideKeyboard: widget.hideKeyboard,
+ fontSize: FontSize,
+ color: Colors.black,
+ ),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ decoration: BoxDecoration(
+ color: isLongPressed ? Colors.grey[300] : SendMsgBg,
+ border: Border.all(color: Color(0xFFB9CBD7), width: 0.6),
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ );
+
+ if (widget.msg.refMsgContent != null &&
+ widget.msg.refMsgContent.length > 0) {
+ QuoteMsg quoteMsg = QuoteMsg.fromBuffer(widget.msg.refMsgContent);
+
+ return Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ text,
+ SizedBox(height: 2),
+ Container(
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ padding: EdgeInsets.symmetric(vertical: 1, horizontal: 3),
+ child: Text(
+ quoteMsg.content,
+ maxLines: 1,
+ textScaleFactor: 1.0,
+ overflow: TextOverflow.ellipsis,
+ style: TextStyle(fontSize: 12),
+ ),
+ decoration: BoxDecoration(
+ color: Colors.grey[300],
+ borderRadius: BorderRadius.circular(5)),
+ )
+ ],
+ );
+ } else {
+ return text;
+ }
+ }
+
+ _soundMsg() {
+ double time = widget.msg.extraInfo / 1000;
+ if (time > 60) {
+ time = 60.0;
+ }
+ bool isPlaying = false;
+
+ var soundPath = widget.msg.localFile;
+
+ isPlaying = SoundUtils().isPlaying(soundPath);
+
+ var soundWidget = GestureDetector(
+ child: Container(
+ width: 120,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ Container(
+ alignment: Alignment.center,
+ padding: EdgeInsets.only(bottom: 2),
+ margin: EdgeInsets.only(right: 10),
+ width: 25.5,
+ height: 25.5,
+ decoration: BoxDecoration(
+ border:
+ Border.all(color: const Color(0xFF1B92C7), width: 0.5),
+ color: const Color(0xFF04A4FE),
+ shape: BoxShape.circle),
+ child: Icon(
+ IconData(isPlaying ? 0xe652 : 0xe653,
+ fontFamily: Constants.IconFontFamily),
+ size: isPlaying ? 15 : 18,
+ color: Colors.white,
+ ),
+ ),
+ isPlaying
+ ? Stack(
+ children: [
+ Container(
+ height: 18,
+ width: 19,
+ ),
+ Positioned(
+ bottom: 0,
+ child: VideoAnim(
+ begin: 18,
+ start: 0.444,
+ end: 4.5,
+ )),
+ Positioned(
+ left: 7,
+ bottom: 0,
+ child: VideoAnim(
+ begin: 4.5,
+ end: 18,
+ )),
+ Positioned(
+ left: 14,
+ bottom: 0,
+ child: VideoAnim(
+ begin: 18,
+ end: 4.5,
+ ))
+ ],
+ )
+ : Stack(
+ children: [
+ Container(
+ height: 18,
+ width: 19,
+ ),
+ Positioned(
+ bottom: 0, child: CustomUI.buildAudioContaniner(12)),
+ Positioned(
+ left: 7,
+ bottom: 0,
+ child: CustomUI.buildAudioContaniner(4.5)),
+ Positioned(
+ left: 14,
+ bottom: 0,
+ child: CustomUI.buildAudioContaniner(18))
+ ],
+ ),
+ Expanded(child: SizedBox()),
+ fixedText(time.toStringAsFixed(0),
+ color: Constants.BlackTextColor, fontSize: 16)
+ ],
+ ),
+ padding: EdgeInsets.symmetric(horizontal: 15, vertical: 12),
+ decoration: BoxDecoration(
+ color: SendMsgBg,
+ border: Border.all(color: Color(0xFFB9CBD7), width: 0.6),
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ ),
+ onTap: () async {
+ print('播放状态 : $isPlaying');
+ print('当前文件$soundPath ');
+ if (isPlaying) {
+ SoundUtils().pause();
+ } else {
+ SoundUtils().play(soundPath, onPlayed: () {
+ if (mounted) {
+ setState(() {});
+ }
+ }, complete: () {
+ if (mounted) {
+ setState(() {});
+ }
+ });
+ }
+ },
+ );
+
+ return UploadImgItem(
+ msg: widget.msg,
+ child: soundWidget,
+ isShowProgress: false,
+ );
+ }
+
+ Size _getImgSize() {
+ double aspectRatio = widget.msg.extraInfo / 100;
+
+ var maxWidth = Screen.width * 0.65;
+ var maxHeight = Screen.height / 4;
+
+ var width, height;
+ if (maxWidth / maxHeight > aspectRatio) {
+ height = maxHeight;
+ width = maxHeight * aspectRatio;
+ } else {
+ width = maxWidth;
+ height = maxWidth / aspectRatio;
+ }
+
+ return Size(width, height);
+ }
+
+ _imgMsg(List imgData) {
+ var imgSize = _getImgSize();
+
+ return GestureDetector(
+ child: ClipRRect(
+ child: UploadImgItem(
+ msg: widget.msg,
+ cancelToken: _cancelToken,
+ child: Container(
+ height: imgSize.height,
+ width: imgSize.width,
+ child: Image(
+ fit: BoxFit.contain,
+ image: MemoryImage(Uint8List.fromList(imgData)),
+ ),
+ )),
+ borderRadius: BorderRadius.circular(5),
+ ),
+ onTap: () async {
+ showFullImg(context, widget.msg);
+ });
+ }
+
+ _videoMsg(BuildContext context, List thumbnail) {
+ var imgSize = _getImgSize();
+ return InkWell(
+ child: ClipRRect(
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ UploadImgItem(
+ msg: widget.msg,
+ cancelToken: _cancelToken,
+ child: Container(
+ width: imgSize.width,
+ height: imgSize.height,
+ child: Image(
+ fit: BoxFit.contain,
+ image: MemoryImage(Uint8List.fromList(thumbnail)),
+ ),
+ ))
+ ],
+ ),
+ borderRadius: BorderRadius.circular(5),
+ ),
+ onTap: () {
+ showVideoPage(context, widget.msg.localFile);
+ },
+ );
+ }
+
+ _msgLayout(BuildContext context, MsgModel msg) {
+ Widget item;
+
+ switch (ChatType.valueOf(msg.msgType)) {
+ case ChatType.TextChatType:
+ item = _textMsg(msg.msgContent);
+ break;
+
+ case ChatType.EmoticonType:
+ item = _textGif(msg.msgContent);
+ break;
+ case ChatType.ImageChatType:
+ item = _imgMsg(msg.msgContent);
+ break;
+ case ChatType.ShortVideoChatType:
+ item = _videoMsg(context, msg.msgContent);
+ break;
+ case ChatType.ShortVoiceChatType:
+ item = _soundMsg();
+ break;
+ case ChatType.RedWalletChatType:
+ item = RedBagItem(
+ Key(msg.time.toString()), UserData().basicInfo.userId, msg);
+ break;
+ case ChatType.PlaceChatType:
+ item = PlaceItem(isMe: true, placeContent: msg.msgContent);
+ break;
+ case ChatType.GiftChatType:
+ item = GiftMsgItem(msg.msgContent, true);
+ break;
+ case ChatType.FileChatType:
+ item = _fileMsgItem();
+ break;
+ default:
+ }
+
+ return wrapItemWithMenu(item);
+ }
+
+ Widget _fileMsgItem() {
+ return UploadImgItem(
+ msg: widget.msg,
+ cancelToken: _cancelToken,
+ child: Container(
+ height: 100,
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ decoration: BoxDecoration(
+ color: isLongPressed ? Colors.grey[300] : SendMsgBg,
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ child: FileMsgItem(widget.msg)));
+ }
+
+ Widget _getSentMessageLayout(BuildContext context) {
+ bool hasHeadImg = true;
+ if (UserData().basicInfo.headimgurl == null ||
+ UserData().basicInfo.headimgurl.length == 0) {
+ hasHeadImg = false;
+ }
+ return Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ MsgStateWidget(widget.msg),
+ SizedBox(width: 3),
+ _msgLayout(context, widget.msg),
+ SizedBox(width: 10),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ ClipRRect(
+ borderRadius: BorderRadius.circular(8),
+ child: hasHeadImg
+ ? CachedNetworkImage(
+ imageUrl: UserData().basicInfo.headimgurl,
+ width: 40,
+ height: 40,
+ )
+ : SizedBox(
+ width: 40,
+ height: 40,
+ child: Image.asset(R.assetsImagesDefaultNorAvatar))),
+ ],
+ )
+ ]);
+ }
+
+ Widget wrapItemWithMenu(item) {
+ List actionsFunc = [];
+ List actions = [
+ I18n.of(context).delete,
+ I18n.of(context).reply,
+ ];
+
+ actionsFunc.add(() {
+ MessageMgr().emit('Delete Select Message', widget.msg);
+ });
+ actionsFunc.add(() {
+ print('发送引用的消息');
+ MessageMgr().emit('Reply Select Message', widget.msg);
+ });
+
+ if (widget.msg.msgType == ChatType.TextChatType.value) {
+ actions.insert(0, I18n.of(context).copy);
+ actionsFunc.insert(0, () {
+ //复制当前的文字
+ print('复制文字 ${textList[curTextType]}');
+ ClipboardData clipboardData =
+ ClipboardData(text: textList[curTextType]);
+ Clipboard.setData(clipboardData);
+ });
+ }
+
+ if (widget.msg.msgType == ChatType.ShortVoiceChatType.value) {
+ var soundPlayMode =
+ Provider.of(context).soundPlayMode;
+
+ actions.add(soundPlayMode
+ ? I18n.of(context).handset_playback
+ : I18n.of(context).speaker_play);
+ actionsFunc.add(() {
+ Provider.of(context)
+ .changeSoundPlayMode(!soundPlayMode);
+ SoundUtils.instance.savePlayModeConfig(soundPlayMode);
+ });
+ }
+
+ return WPopupMenu(
+ child: item,
+ actions: actions,
+ onLongPressStart: () {
+ isLongPressed = true;
+ setState(() {});
+ },
+ onLongPressEnd: () {
+ isLongPressed = false;
+ setState(() {});
+ },
+ onValueChanged: (int value) {
+ print('选择的是$value个菜单');
+ if (value >= 0 && value < actionsFunc.length) {
+ actionsFunc[value]();
+ }
+ },
+ );
+ }
+
+ //用户评价人工翻译,差评
+ rateTranslateResult() async {
+ return await HttpUtil().rateTranslateResult(widget.msg, () {
+ if (mounted) {
+ setState(() {});
+ }
+ });
+ }
+
+ _receiveJIF(MsgModel msg) {
+ var text = utf8.decode(msg.msgContent);
+ return extendedText(text, hideKeyboard: widget.hideKeyboard);
+ }
+
+ double _getTextWidth(String text) {
+ var tp = TextPainter(
+ text: TextSpan(style: TextStyle(fontSize: FontSize), text: text),
+ textAlign: TextAlign.left,
+ textDirection: TextDirection.ltr,
+ textScaleFactor: 1,
+ );
+
+ tp.layout(maxWidth: Screen.width - 140);
+
+ RegExp alterStr = RegExp(r'\[([0-9]+)\]');
+ Iterable matches = alterStr.allMatches(text);
+ print('~~~~~~~~~~~~~~${matches.length}~~~~~~~~~~~~~~~');
+
+ double delta = 0;
+ for (Match m in matches) {
+ print('~~~~~~~~~~~~~~${m.group(1)}~~~~~~~~~~~~~~~');
+ if (int.parse(m.group(1)) > 10) {
+ delta += 20 + 4 - 25;
+ } else {
+ delta += 20 + 4 - 16.8;
+ }
+ }
+
+ return tp.width + delta;
+ }
+
+ _receiveText(MsgModel msg) {
+ List showMsg = [];
+ if (textList.length > 0) {
+ showMsg.add(Container(
+ constraints:
+ BoxConstraints(maxWidth: Screen.width - 140, minHeight: 24),
+ alignment: Alignment.centerLeft,
+ child: extendedText(
+ textList[curTextType],
+ color: Constants.BlackTextColor,
+ hideKeyboard: widget.hideKeyboard,
+ fontSize: FontSize,
+ )));
+ }
+
+ var width = _getTextWidth(textList[curTextType]);
+
+ var minWidth = width;
+ if (msg.transTag != 0) {
+ minWidth = 200;
+ showMsg.add(Padding(
+ padding: EdgeInsets.symmetric(vertical: 5),
+ child: Divider(color: Color(0xFFECECEC), height: 1)));
+ Widget tranWidget = _transProcessWidget(msg.transTag);
+ showMsg.add(tranWidget);
+ }
+
+ ///todo
+ Widget text = Container(
+ width: width + 20,
+ constraints:
+ BoxConstraints(maxWidth: Screen.width - 120, minWidth: minWidth),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start, children: showMsg),
+ decoration: BoxDecoration(
+ border: Border.all(color: ReciveBorderColor, width: 0.5),
+ color: isLongPressed ? Colors.grey[300] : Colors.white,
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ );
+
+ if (msg.refMsgContent != null && msg.refMsgContent.length > 0) {
+ QuoteMsg quoteMsg = QuoteMsg.fromBuffer(msg.refMsgContent);
+
+ return Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ text,
+ SizedBox(height: 2),
+ Container(
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ padding: EdgeInsets.symmetric(vertical: 1, horizontal: 3),
+ child: Text(
+ quoteMsg.content,
+ maxLines: 1,
+ textScaleFactor: 1.0,
+ overflow: TextOverflow.ellipsis,
+ style: TextStyle(fontSize: 12),
+ ),
+ decoration: BoxDecoration(
+ color: Colors.grey[300],
+ borderRadius: BorderRadius.circular(5)),
+ )
+ ],
+ );
+ } else {
+ return text;
+ }
+ }
+
+ _translateItemWidget(int code, String title, Function onTap) {
+ Color color = onTap == null ? Constants.GreyTextColor : Color(0xFF087FF3);
+ return InkWell(
+ onTap: onTap,
+ splashColor: Colors.red,
+ child: Container(
+ width: 80,
+ child: Row(
+ children: [
+ Icon(IconData(code, fontFamily: Constants.IconFontFamily),
+ color: color, size: 20),
+ SizedBox(width: 5),
+ Expanded(
+ child: SizedBox(
+ child: Text(
+ title,
+ style: TextStyle(color: color, fontSize: 10),
+ textScaleFactor: 1.0,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ ),
+ ))
+ ],
+ )));
+ }
+
+ bool isTranslating = false;
+ _transProcessWidget(int transTag) {
+ double width = 160;
+
+ Widget userTranslateWidget;
+ Widget machineTranslateWidget;
+
+ if (transTag == 1) {
+ //机器翻译中
+ userTranslateWidget = _translateItemWidget(0xe670, '人工重译', null);
+
+ machineTranslateWidget =
+ _translateItemWidget(0xe671, I18n.of(context).robotTranslate, null);
+ } else if (transTag == 2) {
+ //人工翻译中
+ userTranslateWidget = _translateItemWidget(0xe670, '人工翻译中', null);
+ machineTranslateWidget = _translateItemWidget(0xe671, '机器重译', () {
+ setState(() {
+ curTextType += 1;
+ curTextType %= textList.length;
+ });
+ });
+ } else if (transTag == 3) {
+ //机器翻译完成
+ userTranslateWidget = _translateItemWidget(
+ 0xe670,
+ '人工重译',
+ isTranslating
+ ? null
+ : () async {
+ isTranslating = true;
+
+ int money =
+ Provider.of(context, listen: false)
+ .money;
+
+ int voucher =
+ Provider.of(context, listen: false)
+ .voucher;
+
+ int needMoney = widget.msg.getNeedMoney();
+
+ if (needMoney > voucher + money) {
+ showToast('翻译券和H币不足');
+ return;
+ }
+ var res = await HttpUtil().getPersonalTranslate(widget.msg);
+ if (res) {
+ print('请求人工翻译成功,进行扣费');
+ setState(() {
+ widget.msg.transTag = 2;
+
+ //优先扣券
+ if (voucher > 0) {
+ int costQuan = min(voucher, needMoney);
+ Provider.of(context,
+ listen: false)
+ .subVoucher(costQuan);
+ }
+
+ //不足的话再扣H币
+ if (needMoney > voucher) {
+ Provider.of(context, listen: false)
+ .subMoney(needMoney - voucher);
+ }
+ });
+ }
+ });
+ machineTranslateWidget = _translateItemWidget(0xe671, '机器重译', () {
+ setState(() {
+ curTextType += 1;
+ curTextType %= textList.length;
+ });
+ });
+ } else if (transTag == 4 || transTag == 10) {
+ //4人工翻译完成,未评论 10人工翻译完成已评论
+ userTranslateWidget = InkWell(
+ onTap: () {
+ setState(() {
+ curTextType = 0;
+ });
+ },
+ child: Container(
+ width: width / 2,
+ child: Row(
+ children: [
+ InkWell(
+ child: Icon(
+ IconData(0xe641, fontFamily: Constants.IconFontFamily),
+ size: 18,
+ color:
+ transTag == 10 ? Colors.grey : Color(0xFF087FF3)),
+ onTap: transTag == 10
+ ? null
+ : () {
+ CustomUI.showIosDialog(
+ context, I18n.of(context).bad_ev, () async {
+ bool isSuccess = await rateTranslateResult();
+ if (isSuccess) {
+ Navigator.of(context).pop(true);
+ showToast(I18n.of(context).success);
+ } else {
+ showToast(I18n.of(context).fail);
+ Navigator.of(context).pop();
+ }
+ }, () {
+ Navigator.of(context).pop();
+ });
+ },
+ ),
+ SizedBox(width: 5),
+ Expanded(
+ child: SizedBox(
+ child: Text(
+ I18n.of(context).over,
+ style: TextStyle(color: Color(0xFF087FF3), fontSize: 10),
+ textScaleFactor: 1.0,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ ),
+ ))
+ ],
+ )));
+ machineTranslateWidget = _translateItemWidget(0xe675, '查看原文', () {
+ setState(() {
+ curTextType = textList.length - 1;
+ });
+ });
+ }
+
+ return Container(
+ height: 26,
+ alignment: Alignment.center,
+ child: Row(
+ children: [
+ userTranslateWidget,
+ Expanded(
+ child: SizedBox(child: VerticalDivider(), height: 20, width: 2)),
+ machineTranslateWidget
+ ],
+ ),
+ );
+ }
+
+ _receiveImg(BuildContext context, List imgData, {String downloadData}) {
+ ImageProvider provider = MemoryImage(Uint8List.fromList(imgData));
+
+ var imgSize = _getImgSize();
+ return GestureDetector(
+ child: Container(
+ width: imgSize.width,
+ height: imgSize.height,
+ child: ClipRRect(
+ child: Image(
+ image: provider ?? AssetImage(R.assetsImagesIcAlbum),
+ ),
+ borderRadius: BorderRadius.circular(5),
+ )),
+ onTap: () async {
+ showFullImg(context, widget.msg);
+ });
+ }
+
+ _receiveVideo(BuildContext context, List imgData,
+ {String downloadData}) {
+ ImageProvider provider = MemoryImage(Uint8List.fromList(imgData));
+ var imgSize = _getImgSize();
+ return InkWell(
+ onTap: () {
+ if (widget.msg.localFile != null) {
+ showVideoPage(context, widget.msg.localFile);
+ }
+ },
+ child: DownloadItem(
+ isAutoDown: false,
+ msg: widget.msg,
+ child: Container(
+ width: imgSize.width,
+ height: imgSize.height,
+ child: ClipRRect(
+ child: Image(
+ image: provider ?? AssetImage(R.assetsImagesIcAlbum),
+ ),
+ borderRadius: BorderRadius.circular(5),
+ ),
+ ),
+ ));
+ }
+
+ showVideoPage(BuildContext context, String filePath) {
+ widget.hideKeyboard();
+ Navigator.push(context,
+ MaterialPageRoute(builder: (BuildContext context) {
+ return VideoPage(videoPath: filePath);
+ }));
+ }
+
+ Widget _receiveFileMsgItem() {
+ return DownloadItem(
+ isAutoDown: false,
+ msg: widget.msg,
+ onComplete: () {
+ if (mounted) {
+ setState(() {});
+ }
+ },
+ child: Container(
+ height: 100,
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ border: Border.all(color: ReciveBorderColor, width: 0.5),
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ child: FileMsgItem(widget.msg)));
+ }
+
+ _receiveSound(BuildContext context, List soundData) {
+ print('收到语音消息');
+
+ MsgModel msg = widget.msg;
+ var time = widget.msg.extraInfo / 1000;
+ if (time > 60) {
+ time = 60.0;
+ }
+ bool isPlaying = false;
+
+ if (curSoundUrl != null) {
+ isPlaying = SoundUtils().isPlaying(curSoundUrl);
+ }
+
+ var soundWidget = InkWell(
+ onTap: () async {
+ bool isLocal = true;
+
+ if (msg.localFile != null) {
+ isLocal = true;
+ curSoundUrl = msg.localFile;
+ } else {
+ isLocal = false;
+ var sessionId = msg.sessionId;
+ curSoundUrl = UploadUtil()
+ .getFullUrl(msg.extraFile, sessionId, msg.channelType);
+ }
+
+ print('当前文件$curSoundUrl 本地?$isLocal');
+ if (isPlaying) {
+ await SoundUtils().pause();
+ } else {
+ print('开始播放');
+
+ if (widget.msg.soundListened == 0) {
+ widget.msg.updateSoundListened();
+ } //设置为已经播放
+ await SoundUtils().play(curSoundUrl, isLocal: isLocal, onPlayed: () {
+ if (mounted) {
+ this.setState(() {});
+ }
+ }, complete: () {
+ if (mounted) {
+ this.setState(() {});
+ }
+ });
+ }
+ },
+ child: Container(
+ width: 130,
+ child: Row(children: [
+ Container(
+ alignment: Alignment.center,
+ padding: EdgeInsets.only(bottom: 2),
+ margin: EdgeInsets.only(right: 10),
+ width: 25.5,
+ height: 25.5,
+ decoration: BoxDecoration(
+ border:
+ Border.all(color: const Color(0xFF1B92C7), width: 0.5),
+ color: const Color(0xFF04A4FE),
+ shape: BoxShape.circle),
+ child: Icon(
+ IconData(isPlaying ? 0xe652 : 0xe653,
+ fontFamily: Constants.IconFontFamily),
+ size: isPlaying ? 15 : 18,
+ color: Colors.white,
+ ),
+ ),
+ isPlaying
+ ? Stack(
+ children: [
+ Container(
+ height: 18,
+ width: 19,
+ ),
+ Positioned(
+ bottom: 0,
+ child: VideoAnim(
+ begin: 18,
+ start: 0.444,
+ end: 4.5,
+ )),
+ Positioned(
+ left: 7,
+ bottom: 0,
+ child: VideoAnim(
+ begin: 4.5,
+ end: 18,
+ )),
+ Positioned(
+ left: 14,
+ bottom: 0,
+ child: VideoAnim(
+ begin: 18,
+ end: 4.5,
+ ))
+ ],
+ )
+ : Stack(
+ children: [
+ Container(
+ height: 18,
+ width: 19,
+ ),
+ Positioned(
+ bottom: 0, child: CustomUI.buildAudioContaniner(12)),
+ Positioned(
+ left: 7,
+ bottom: 0,
+ child: CustomUI.buildAudioContaniner(4.5)),
+ Positioned(
+ left: 14,
+ bottom: 0,
+ child: CustomUI.buildAudioContaniner(18))
+ ],
+ ),
+ Expanded(child: SizedBox()),
+ fixedText(time.toStringAsFixed(0),
+ color: Constants.BlackTextColor, fontSize: 16)
+ ])),
+ );
+
+ List showMsg = [];
+
+ showMsg.add(DownloadItem(
+ msg: widget.msg,
+ child: soundWidget,
+ isShowProgress: false,
+ ));
+
+ double width = 130;
+ double minWidth = 0;
+ if (textList.length > 0) {
+ width = _getTextWidth(textList[curTextType]) + 20;
+ width = min(width, Screen.width - 120);
+
+ showMsg.add(Padding(
+ padding: EdgeInsets.symmetric(vertical: 5),
+ child: Divider(
+ height: 1,
+ )));
+ showMsg.add(Container(
+ child: extendedText(
+ textList[curTextType],
+ color: Constants.BlackTextColor,
+ hideKeyboard: widget.hideKeyboard,
+ fontSize: FontSize,
+ ),
+ alignment: Alignment.centerLeft,
+ constraints:
+ BoxConstraints(maxWidth: Screen.width - 120, minHeight: 22),
+ ));
+ }
+
+ if (msg.transTag != 0) {
+ minWidth = 200;
+ showMsg.add(Divider(color: Color(0xFFECECEC), height: 3));
+ Widget tranWidget = _transProcessWidget(msg.transTag);
+ showMsg.add(tranWidget);
+ }
+
+ return Container(
+ width: width + 20,
+ constraints:
+ BoxConstraints(maxWidth: Screen.width - 120, minWidth: minWidth),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start, children: showMsg),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ border: Border.all(color: ReciveBorderColor, width: 0.5),
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ );
+ }
+
+ void showFullImg(BuildContext context, MsgModel msg) {
+ print('显示图片');
+ Navigator.push(context,
+ MaterialPageRoute(builder: (BuildContext context) {
+ return PhotoPage(msg: msg);
+ }));
+ }
+
+ _reveiveMsg(BuildContext context) {
+ Widget item;
+ switch (ChatType.valueOf(widget.msg.msgType)) {
+ case ChatType.TextChatType:
+ item = _receiveText(widget.msg);
+ break;
+ case ChatType.EmoticonType:
+ item = _receiveJIF(widget.msg);
+ break;
+
+ case ChatType.ImageChatType:
+ if (widget.msg.extraFile != null) {
+ item = _receiveImg(context, widget.msg.msgContent,
+ downloadData: widget.msg.extraFile);
+ } else {
+ item = _receiveImg(context, widget.msg.msgContent);
+ }
+ break;
+ case ChatType.ShortVideoChatType:
+ item = _receiveVideo(context, widget.msg.msgContent,
+ downloadData: widget.msg.extraFile);
+ break;
+ case ChatType.ShortVoiceChatType:
+ item = _receiveSound(context, widget.msg.msgContent);
+ break;
+
+ case ChatType.RedWalletChatType:
+ item = RedBagItem(
+ Key(widget.msg.time.toString()), friendInfo.userId, widget.msg);
+ break;
+ case ChatType.PlaceChatType:
+ item = PlaceItem(isMe: false, placeContent: widget.msg.msgContent);
+ break;
+ case ChatType.GiftChatType:
+ item = GiftMsgItem(widget.msg.msgContent, false);
+ break;
+ case ChatType.FileChatType:
+ item = _receiveFileMsgItem();
+ break;
+ default:
+ }
+
+ return wrapItemWithMenu(item);
+ }
+
+ Widget _getReceivedMessageLayout(BuildContext context) {
+ bool hasHeadImg = true;
+
+ if (friendInfo.headimgurl == null || friendInfo.headimgurl.length == 0) {
+ hasHeadImg = false;
+ }
+
+ bool isShowSoundSate =
+ widget.msg.msgType == ChatType.ShortVoiceChatType.value &&
+ widget.msg.soundListened == 0;
+
+ return Row(crossAxisAlignment: CrossAxisAlignment.start, children: [
+ Container(
+ margin: const EdgeInsets.only(right: 8.0),
+ child: InkWell(
+ child: ClipRRect(
+ borderRadius: BorderRadius.circular(8),
+ child: hasHeadImg
+ ? CachedNetworkImage(
+ imageUrl: friendInfo.headimgurl,
+ width: 40,
+ height: 40,
+ )
+ : SizedBox(
+ width: 40,
+ height: 40,
+ child: Image.asset(R.assetsImagesDefaultNorAvatar))),
+ onTap: () {
+ AppNavigator.pushProfileInfoPage(context, friendInfo.userId,
+ fromWhere: 0);
+ },
+ )),
+ _reveiveMsg(context),
+ isShowSoundSate
+ ? Container(
+ margin: EdgeInsets.only(left: 8),
+ width: 40,
+ height: 40,
+ alignment: Alignment.centerLeft,
+ child: CircleAvatar(
+ radius: 3.5,
+ backgroundColor: Colors.red,
+ ))
+ : Container()
+ ]);
+ }
+}
diff --git a/lib/chat/coin_bag_info.dart b/lib/chat/coin_bag_info.dart
new file mode 100644
index 0000000..061ce8d
--- /dev/null
+++ b/lib/chat/coin_bag_info.dart
@@ -0,0 +1,289 @@
+import 'package:cached_network_image/cached_network_image.dart';
+import 'package:chat/data/UserData.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/models/ChatMsg.dart';
+import 'package:chat/models/UserInfo.dart';
+import 'package:chat/models/ref_name_provider.dart';
+import 'package:chat/proto/all.pbserver.dart';
+import 'package:chat/r.dart';
+import 'package:chat/utils/CustomUI.dart';
+import 'package:chat/utils/HttpUtil.dart';
+import 'package:chat/utils/TokenMgr.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:chat/utils/sql_util.dart';
+import 'package:dio/dio.dart';
+import 'package:flutter/material.dart';
+import 'package:oktoast/oktoast.dart';
+import 'package:provider/provider.dart';
+
+import '../utils/MessageMgr.dart';
+
+class CoinBagInfoPage extends StatefulWidget {
+ final MsgModel msgModel;
+ final String titleStr;
+ CoinBagInfoPage(this.msgModel, {this.titleStr});
+ @override
+ _CoinBagInfoPageState createState() => _CoinBagInfoPageState();
+}
+
+class _CoinBagInfoPageState extends State {
+ UserInfo friendInfo;
+ RedWallet wallet;
+ @override
+ void initState() {
+ super.initState();
+ wallet = RedWallet.fromBuffer(widget.msgModel.msgContent);
+ getInfo();
+ }
+
+ getInfo() async {
+ int sendId = wallet.suId;
+ if (sendId == UserData().basicInfo.userId) {
+ friendInfo = UserData().basicInfo;
+ } else {
+ friendInfo = await HttpUtil().getFriendInfo(sendId);
+ setState(() {});
+ }
+
+ updateRedWalletState();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ var foreColor = const Color(0xEEF9E3B2);
+
+ return Scaffold(
+ backgroundColor: Color(0xFFE86A52),
+ appBar: AppBar(
+ backgroundColor: Color(0xFFE86A52),
+ leading: CustomUI.buildCustomLeading(context),
+ ),
+ body: SafeArea(
+ child: Center(
+ child: friendInfo == null
+ ? CircularProgressIndicator(
+ backgroundColor: Colors.orange,
+ valueColor: AlwaysStoppedAnimation(Colors.orange))
+ : Container(
+ padding:
+ EdgeInsets.symmetric(vertical: 40, horizontal: 20),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Container(
+ padding: EdgeInsets.symmetric(
+ vertical: 60, horizontal: 20),
+ child: Column(
+ children: [
+ ClipRRect(
+ borderRadius: BorderRadius.circular(8),
+ child: CachedNetworkImage(
+ imageUrl: friendInfo.headimgurl,
+ placeholder: (context, url) {
+ return Container(
+ padding: EdgeInsets.all(10),
+ child: CircularProgressIndicator(
+ valueColor:
+ AlwaysStoppedAnimation(
+ foreColor)));
+ },
+ width: 100,
+ height: 100,
+ ),
+ ),
+ fixedText(
+ I18n.of(context).ones_money.replaceFirst(
+ '/s1',
+ Provider.of(context)
+ .getRefName(friendInfo.userId,
+ friendInfo.nickName)),
+ fontSize: 12,
+ color: foreColor),
+ SizedBox(height: 40),
+ Text(
+ widget.titleStr,
+ textScaleFactor: 1.0,
+ textAlign: TextAlign.center,
+ style: TextStyle(
+ fontSize: 24,
+ color: foreColor,
+ fontWeight: FontWeight.w500),
+ ),
+ ],
+ ),
+ ),
+ SizedBox(height: 20),
+ _info(),
+ Expanded(child: SizedBox()),
+ fixedText(I18n.of(context).back_money,
+ fontSize: 12, color: foreColor)
+ ],
+ ),
+ ))));
+ }
+
+ _info() {
+ var myId = UserData().basicInfo.userId;
+ if (wallet.suId != myId) {
+ //不是我发的
+ if (wallet.state == RedWalletState.Uncollected) {
+ return _openBtn();
+ } else {
+ return _getInfo();
+ }
+ } else {
+ return _sendInfo();
+ }
+ }
+
+ _receiveCoinBag() async {
+ Map data = {
+ "userId": UserData().basicInfo.userId,
+ "redNo": wallet.orderId,
+ };
+ data['sign'] = TokenMgr().getSign(data);
+
+ print(DateTime.now());
+ Response res = await HttpUtil().post('red/packet/receive', data: data);
+
+ if (res == null) {
+ return null;
+ }
+ Map resData = res.data;
+
+ if (resData['code'] == 0) {
+ //领取成功
+ print(DateTime.now());
+ wallet.state = RedWalletState.Received;
+ print('获得的金额${resData['data']['price']}');
+ wallet.amount = resData['data']['price'];
+
+ widget.msgModel.msgContent = wallet.writeToBuffer();
+
+ MessageMgr().emit('Update RedWalletState', wallet);
+
+ SqlUtil().updateWalletState(widget.msgModel);
+ setState(() {});
+ } else if (resData['code'] == -4) {
+ //红包已过期
+ showToast(I18n.of(context).money_over);
+ } else if (resData['code'] == -5) {
+ //红包已领过或者领取失败
+ showToast(I18n.of(context).already_money);
+ } else if (resData['code'] == -3) {
+ //红包不存在
+ showToast(I18n.of(context).no_money);
+ } else {
+ showToast(resData['msg']);
+ }
+
+ return null;
+ }
+
+ _openBtn() {
+ return SizedBox(
+ width: 100,
+ height: 100,
+ child: RaisedButton(
+ padding: EdgeInsets.all(10.0),
+ onPressed: _receiveCoinBag,
+ shape: CircleBorder(),
+ elevation: 2.0,
+ child: Text(I18n.of(context).open,
+ style: TextStyle(fontSize: 28),
+ textAlign: TextAlign.center,
+ textScaleFactor: 1.0),
+ textColor: Color(0xFFD84F46),
+ color: Color(0xFFFFE3AF),
+ ));
+ }
+
+ _getInfo() {
+ var infoStr = '';
+ if (wallet.state == RedWalletState.Received) {
+ infoStr = I18n.of(context).already_money;
+ } else {
+ infoStr = I18n.of(context).money_over;
+ }
+
+ return Container(
+ child: Column(
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ Text(wallet.amount.toString(),
+ textScaleFactor: 1.0,
+ style: TextStyle(fontSize: 50, color: Color(0xEEF9E3B2))),
+ Padding(
+ padding: EdgeInsets.only(left: 10, bottom: 15),
+ child: Image.asset(R.assetsImagesCoin, scale: 3))
+ ],
+ ),
+ fixedText(infoStr, color: Color(0xEEF9E3B2)),
+ ],
+ ),
+ );
+ }
+
+ updateRedWalletState() async {
+ Map data = {
+ "userId": UserData().basicInfo.userId,
+ "redNo": wallet.orderId,
+ };
+ data['sign'] = TokenMgr().getSign(data);
+
+ Response res = await HttpUtil().post('red/packet/status', data: data);
+
+ if (res == null) {
+ return;
+ }
+ Map resData = res.data;
+
+ if (resData['code'] == 0) {
+ wallet.state = RedWalletState.valueOf(resData['data']['status']);
+ if (wallet.state != RedWalletState.Uncollected) {
+ if (mounted) {
+ setState(() {});
+ }
+ }
+ }
+ }
+
+ _sendInfo() {
+ var msg;
+ switch (wallet.state) {
+ case RedWalletState.Expire:
+ msg = I18n.of(context).back_user;
+ break;
+ case RedWalletState.Uncollected:
+ msg = I18n.of(context).waiting_user;
+ break;
+ case RedWalletState.Received:
+ msg = I18n.of(context).other_get;
+ break;
+ default:
+ }
+
+ return Container(
+ child: Column(
+ children: [
+ Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ Text(wallet.amount.toString(),
+ textScaleFactor: 1.0,
+ style: TextStyle(fontSize: 50, color: Color(0xEEF9E3B2))),
+ Padding(
+ padding: EdgeInsets.only(left: 10, bottom: 15),
+ child: Image.asset(R.assetsImagesCoin, scale: 3))
+ ],
+ ),
+ fixedText(msg, color: Color(0xEEF9E3B2)),
+ ],
+ ),
+ );
+ }
+}
diff --git a/lib/chat/coin_bag_view.dart b/lib/chat/coin_bag_view.dart
new file mode 100644
index 0000000..5057089
--- /dev/null
+++ b/lib/chat/coin_bag_view.dart
@@ -0,0 +1,237 @@
+import 'package:chat/data/constants.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/models/money_change.dart';
+import 'package:chat/r.dart';
+import 'package:chat/utils/CustomUI.dart';
+import 'package:chat/utils/MessageMgr.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:oktoast/oktoast.dart';
+import 'package:provider/provider.dart';
+
+class CoinBagPage extends StatefulWidget {
+ @override
+ _CoinBagPageState createState() => _CoinBagPageState();
+}
+
+class _CoinBagPageState extends State {
+ final TextEditingController _textCtrl = TextEditingController();
+
+ FocusNode editFocus = FocusNode();
+
+ final TextEditingController _amountCtrl = TextEditingController();
+
+ FocusNode amountFocus = FocusNode();
+
+ var curAmount = 0;
+ var curDesc = '';
+
+ @override
+ void initState() {
+ super.initState();
+ print('CoinBagPage initState');
+ }
+
+ @override
+ void dispose() {
+ _textCtrl.dispose();
+ amountFocus.dispose();
+ _amountCtrl.dispose();
+ editFocus.dispose();
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ if (curDesc == '') {
+ curDesc = I18n.of(context).little;
+ }
+
+ return Scaffold(
+ appBar: AppBar(
+ title: Text(I18n.of(context).red_money),
+ centerTitle: true,
+ leading: CustomUI.buildCustomLeading(context),
+ ),
+ body: SafeArea(
+ child: GestureDetector(
+ onTap: () {
+ if (editFocus.hasFocus) {
+ editFocus.unfocus();
+ }
+
+ if (amountFocus.hasFocus) {
+ amountFocus.unfocus();
+ }
+ },
+ child: SingleChildScrollView(
+ child: Center(
+ child: Column(
+ children: [
+ Container(
+ padding: EdgeInsets.all(20),
+ child: Column(
+ children: [
+ _buildAmountField(),
+ SizedBox(height: 10),
+ _buildTitleTextField(),
+ Padding(
+ padding: EdgeInsets.symmetric(vertical: 30),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Text(
+ '$curAmount',
+ textScaleFactor: 1.0,
+ style: TextStyle(
+ fontWeight: FontWeight.w500,
+ fontSize: 30),
+ ),
+ //SizedBox(width: 5),
+ Text(
+ I18n.of(context).mask_coin,
+ textScaleFactor: 1.0,
+ style: TextStyle(fontSize: 18),
+ ),
+ //Image.asset(R.assetsImagesCoin, scale: 2),
+ ],
+ )),
+ _buildSendBtn(),
+ ],
+ ))
+ ],
+ ),
+ )),
+ )));
+ }
+
+ _buildAmountField() {
+ return Container(
+ padding: const EdgeInsets.fromLTRB(8, 8, 0, 8),
+ height: 40.0,
+ width: Screen.width - 60,
+ alignment: Alignment.center,
+ decoration: BoxDecoration(
+ color: Colors.white, borderRadius: BorderRadius.circular(10.0)),
+ child: TextField(
+ keyboardAppearance: Brightness.light,
+ controller: _amountCtrl,
+ focusNode: amountFocus,
+ textAlign: TextAlign.right,
+ textAlignVertical: TextAlignVertical.center,
+ textInputAction: TextInputAction.done,
+ style: TextStyle(textBaseline: TextBaseline.alphabetic, fontSize: 16),
+ keyboardType: TextInputType.number,
+ inputFormatters: [
+ LengthLimitingTextInputFormatter(10) //限制长度
+ ],
+ onChanged: (String text) {
+ if (text.length == 0) {
+ curAmount = 0;
+ } else {
+ curAmount = int.parse(text);
+ }
+
+ setState(() {});
+ },
+ decoration: InputDecoration(
+ contentPadding: EdgeInsets.only(top: 8, bottom: 8),
+ hintText: curAmount.toString(),
+ hintStyle:
+ TextStyle(fontSize: 16, color: Constants.LightGreyTextColor),
+ prefixIcon: Container(
+ width: 65,
+ alignment: Alignment.centerLeft,
+ child: Text(I18n.of(context).mount),
+ ),
+ border: InputBorder.none,
+ suffixIcon: Container(
+ width: 50,
+ child: Image.asset(R.assetsImagesCoin, scale: 3),
+ alignment: Alignment.center,
+ ),
+ ),
+ ),
+ );
+ }
+
+ _buildTitleTextField() {
+ return Container(
+ padding: const EdgeInsets.fromLTRB(8, 8, 0, 8),
+ height: 100.0,
+ width: Screen.width - 60,
+ alignment: Alignment.center,
+ decoration: BoxDecoration(
+ color: Colors.white, borderRadius: BorderRadius.circular(12.0)),
+ child: TextField(
+ keyboardAppearance: Brightness.light,
+ controller: _textCtrl,
+ focusNode: editFocus,
+ textAlign: TextAlign.center,
+ style: TextStyle(textBaseline: TextBaseline.alphabetic, fontSize: 15),
+ maxLines: 4,
+ minLines: 1,
+ textInputAction: TextInputAction.done,
+ inputFormatters: [
+ LengthLimitingTextInputFormatter(30) //限制长度
+ ],
+ onChanged: (String text) {
+ curDesc = text;
+ },
+ decoration: InputDecoration.collapsed(
+ hintText: curDesc,
+ hintStyle:
+ TextStyle(fontSize: 15, color: Constants.LightGreyTextColor)),
+ ),
+ );
+ }
+
+ _buildSendBtn() {
+ return SizedBox(
+ width: Screen.width * 2 / 3,
+ child: RaisedButton(
+ child: Text(I18n.of(context).put_money,
+ textAlign: TextAlign.center,
+ style: TextStyle(color: Colors.white, fontSize: 20)),
+ color: Color(0xFFdd643e),
+ padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 12),
+ disabledColor: Color(0xFFdd643e).withAlpha(160),
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.all(Radius.circular(8))),
+ onPressed: curAmount > 0 ? _sendCoin : null,
+ ));
+ }
+
+ _sendCoin() {
+ if (curDesc == '') {
+ curDesc = I18n.of(context).little;
+ }
+
+ if (curAmount <= 0) {
+ showToast(I18n.of(context).enter_amount);
+ return;
+ } else {
+ if (curAmount < 10) {
+ showToast(
+ I18n.of(context).little_min.replaceFirst('/s1', 10.toString()));
+ return;
+ }
+ if (curAmount > 999) {
+ showToast(
+ I18n.of(context).more_big.replaceFirst('/s1', 999.toString()));
+ return;
+ }
+ }
+ int curCoin = Provider.of(context).money;
+ if (curCoin >= curAmount) {
+ Provider.of(context).subMoney(curAmount);
+ MessageMgr()
+ .emit('Send CoinBag', {'amount': curAmount, 'title': curDesc});
+ curAmount = 0;
+ Navigator.pop(context);
+ } else {
+ showToast(I18n.of(context).not_enough);
+ }
+ }
+}
diff --git a/lib/chat/company_server_view.dart b/lib/chat/company_server_view.dart
new file mode 100644
index 0000000..c22ff0e
--- /dev/null
+++ b/lib/chat/company_server_view.dart
@@ -0,0 +1,340 @@
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:chat/chat/ChatPageItem.dart';
+import 'package:chat/data/chat_data_mgr.dart';
+import 'package:chat/data/constants.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/models/ChatMsg.dart';
+import 'package:chat/models/UserInfo.dart';
+import 'package:chat/photo/entity/options.dart';
+import 'package:chat/photo/photo.dart';
+import 'package:chat/proto/chat.pb.dart';
+import 'package:chat/r.dart';
+import 'package:chat/utils/CustomUI.dart';
+import 'package:chat/utils/HttpUtil.dart';
+import 'package:chat/utils/image_util.dart';
+import 'package:chat/utils/keyboard_utils.dart';
+import 'package:chat/utils/msgHandler.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:oktoast/oktoast.dart';
+import 'package:photo_manager/photo_manager.dart';
+import 'package:chat/utils/MessageMgr.dart';
+
+class CompanyServerPage extends StatefulWidget {
+ @override
+ _CompanyServerPageState createState() => _CompanyServerPageState();
+}
+
+class _CompanyServerPageState extends State {
+ final TextEditingController _textCtrl = TextEditingController();
+ FocusNode editFocus = NoKeyboardEditableTextFocusNode();
+ bool _isComposingMessage = false;
+
+ double keyboardHeight;
+ KeyboardBloc _bloc = KeyboardBloc();
+
+ ScrollController _scrollCtrl = ScrollController();
+
+ List msgList = [];
+
+ static int companyId = 10000;
+
+ UserInfo companyInfo = UserInfo(
+ userId: companyId,
+ headimgurl: R.assetsImagesServerIcon,
+ nickName: '反馈小助手');
+
+ @override
+ void initState() {
+ super.initState();
+
+ _bloc.start();
+
+ //10000号为服务小助手
+ MsgHandler.updateActiveSesstion(companyId);
+
+ msgList = ChatDataMgr().getRecord();
+
+ MessageMgr().on('New Chat Message', receiveMsg);
+ }
+
+ @override
+ void dispose() {
+ MsgHandler.curActiveSession = 0;
+ _textCtrl.dispose();
+ _bloc.dispose();
+ editFocus.dispose();
+ _scrollCtrl.dispose();
+
+ MessageMgr().off('New Chat Message', receiveMsg);
+ super.dispose();
+ }
+
+ receiveMsg(sessionId) {
+ print('收到反馈助手消息');
+ if (mounted) {
+ setState(() {});
+ if (_scrollCtrl.hasClients) {
+ _scrollCtrl.animateTo(0,
+ duration: new Duration(milliseconds: 500), curve: Curves.ease);
+ }
+ }
+ }
+
+ hideKeyBoard() {
+ editFocus.unfocus();
+ }
+
+ bool checkMessage() {
+ if (_textCtrl.text.length == 0) {
+ showToast(I18n.of(context).msg_not);
+ return false;
+ }
+ return true;
+ }
+
+ Future _textMessageSubmitted(String text) async {
+ if (!checkMessage()) {
+ _textCtrl.clear();
+ return;
+ }
+ _textCtrl.clear();
+
+ _sendMessage(text);
+ }
+
+ _sendTextMessage() {
+ if (!checkMessage()) {
+ return;
+ }
+
+ var sendStr = _textCtrl.text;
+
+ _textCtrl.clear();
+
+ _sendMessage(sendStr);
+ }
+
+ _sendMessage(String messageText) {
+ MsgModel msg = MsgHandler.createSendMsg(ChatType.TextChatType, messageText,
+ friendId: companyId, channelType: ChatChannelType.CSD);
+
+ setState(() {
+ _isComposingMessage = _textCtrl.text.length > 0;
+ });
+
+ sendMsg(msg);
+ }
+
+ sendMsg(MsgModel msg) async {
+ ChatDataMgr().saveCompanyMsg(msg);
+
+ if (mounted) {
+ setState(() {});
+
+ if (_scrollCtrl.hasClients) {
+ _scrollCtrl.animateTo(0,
+ duration: new Duration(milliseconds: 500), curve: Curves.ease);
+ }
+ }
+
+ await HttpUtil().commitInfoToCompany(msg);
+ if (mounted) {
+ setState(() {});
+ }
+ }
+
+ void _openPhotoView() async {
+ var photos = await PhotoPicker.pickAsset(
+ context: context,
+ themeColor: Color(0xFFF0F0F0),
+ textColor: Color(0xFF3F3F3F),
+ pickType: PickType.onlyImage);
+
+ if (photos != null && photos.length > 0) {
+ for (var i = 0; i < photos.length; i++) {
+ AssetEntity photoEntity = photos[i];
+ var file = await photoEntity.file;
+ _sendPhotoFile(file);
+ }
+ }
+ }
+
+ void _sendPhotoFile(File imgFile) async {
+ var imgSize = await imgFile.length();
+
+ print('图片大小:${imgSize / 1024}KB');
+ var sendImg;
+
+ if (imgSize > 33 * 1024 * 1024) {
+ showToast(I18n.of(context).video_more_big);
+ return;
+ }
+ bool isNeedUpload = false;
+ if (imgSize > ImgSizeLimit) {
+ print('图片大于 $ImgSizeLimit,压缩');
+ //发送压缩图
+ sendImg = await WidgetUtil.getCompressImg(imgFile.absolute.path);
+ isNeedUpload = true;
+ } else {
+ sendImg = imgFile.readAsBytesSync();
+ }
+
+ var rect = await WidgetUtil.getImageWH(
+ image: Image.memory(Uint8List.fromList(sendImg)));
+ print('图片大小 Rect : $rect');
+ int aspectRatio = rect.width * 100 ~/ rect.height;
+
+ var msg = MsgHandler.createSendMsg(ChatType.ImageChatType, sendImg,
+ localFile: isNeedUpload ? imgFile.absolute.path : null,
+ extra: aspectRatio,
+ friendId: companyId,
+ channelType: ChatChannelType.CSD);
+
+ sendMsg(msg);
+ }
+
+ _inputBar() {
+ Widget input = Container(
+ child: TextField(
+ keyboardAppearance: Brightness.light,
+ onChanged: (String messageText) {
+ setState(() {
+ _isComposingMessage = _textCtrl.text.length > 0;
+ });
+ },
+ cursorColor: Constants.BlueTextColor,
+ style: TextStyle(
+ fontSize: ScreenUtil().setSp(16),
+ textBaseline: TextBaseline.alphabetic),
+ maxLines: 3,
+ minLines: 1,
+ controller: _textCtrl,
+ textInputAction: TextInputAction.newline,
+ inputFormatters: [
+ LengthLimitingTextInputFormatter(600) //限制长度
+ ],
+ onSubmitted: _textMessageSubmitted,
+ focusNode: editFocus,
+ decoration: InputDecoration(
+ hintText: I18n.of(context).input_content,
+ hintStyle: TextStyle(color: const Color(0xffBDBDBD), fontSize: 16),
+ border: null,
+ hintMaxLines: 1,
+ contentPadding: EdgeInsets.only(left: 5, right: 5, top: 8, bottom: 8),
+ ),
+ ),
+ );
+
+ return GestureDetector(
+ onTap: () {
+ print('放置触控隐藏键盘');
+ },
+ child: Container(
+ width: Screen.width,
+ color: Colors.white,
+ child: Container(
+ padding: EdgeInsets.symmetric(horizontal: 7, vertical: 7),
+ alignment: Alignment.topCenter,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ border: Border(top: BorderSide(color: Color(0xFFDFDFDF)))),
+ child: Row(
+ children: [
+ //输入框
+ Expanded(child: input), SizedBox(width: 10),
+ _isComposingMessage
+ ? InkWell(
+ child: Padding(
+ padding: EdgeInsets.fromLTRB(50, 2, 10, 2),
+ child: Icon(
+ Icons.send,
+ color: Color(0xFF087FF3),
+ size: 28,
+ )),
+ onTap: _sendTextMessage)
+ : InkWell(
+ child: Icon(
+ IconData(0xe60c,
+ fontFamily: Constants.IconFontFamily),
+ color: Color(0xFF797A7C),
+ size: 26,
+ ),
+ onTap: () {
+ _openPhotoView();
+ }),
+ ],
+ ))));
+ }
+
+ Widget _buildMessageList() {
+ return Container(
+ alignment: Alignment.topCenter,
+ child: msgList.length == 0
+ ? Padding(
+ padding: EdgeInsets.all(8),
+ child: Text(
+ '有什么问题都可以反馈给我哦',
+ textAlign: TextAlign.center,
+ textScaleFactor: 1.0,
+ style: TextStyle(color: Colors.grey, fontSize: 12),
+ ))
+ : Scrollbar(
+ child: ListView.builder(
+ reverse: true,
+ shrinkWrap: true,
+ itemCount: msgList.length,
+ controller: _scrollCtrl,
+ padding: EdgeInsets.all(8.0),
+ itemBuilder: _buildItem,
+ )),
+ );
+ }
+
+ Widget _buildItem(BuildContext context, int index) {
+ var lastMsgTime;
+ if (index < msgList.length - 1) {
+ lastMsgTime = msgList[index + 1].time;
+ }
+
+ MsgModel msg = msgList[index];
+
+ return ChatPageItem(
+ key: Key(msg.time.toString()),
+ msg: msg,
+ lastMsgTime: lastMsgTime,
+ friendInfo: companyInfo);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return GestureDetector(
+ onTap: hideKeyBoard,
+ child: Scaffold(
+ backgroundColor: const Color(0xFFE2E9F1),
+ appBar: AppBar(
+ title: Text(
+ '反馈小助手',
+ textScaleFactor: 1.0,
+ style:
+ TextStyle(color: Constants.BlackTextColor, fontSize: 16.47),
+ ),
+ leading: CustomUI.buildCustomLeading(context),
+ titleSpacing: -10,
+ centerTitle: false,
+ elevation: 1,
+ ),
+ body: SafeArea(
+ child: Column(
+ children: [
+ Expanded(child: _buildMessageList()),
+ _inputBar(),
+ ],
+ ))),
+ );
+ }
+}
diff --git a/lib/chat/custom_keyboard.dart b/lib/chat/custom_keyboard.dart
new file mode 100644
index 0000000..d239128
--- /dev/null
+++ b/lib/chat/custom_keyboard.dart
@@ -0,0 +1,15 @@
+import 'package:flutter/material.dart';
+
+class CustomKeyboardWidget extends StatefulWidget {
+ @override
+ _CustomKeyboardWidgetState createState() => _CustomKeyboardWidgetState();
+}
+
+class _CustomKeyboardWidgetState extends State {
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/lib/chat/dollar_text.dart b/lib/chat/dollar_text.dart
new file mode 100644
index 0000000..24ecff4
--- /dev/null
+++ b/lib/chat/dollar_text.dart
@@ -0,0 +1,42 @@
+import 'package:extended_text_library/extended_text_library.dart';
+import 'package:flutter/gestures.dart';
+import 'package:flutter/material.dart';
+
+class DollarText extends SpecialText {
+ static const String flag = "\$";
+ final int start;
+ DollarText(TextStyle textStyle, SpecialTextGestureTapCallback onTap,
+ {this.start})
+ : super(flag, flag, textStyle, onTap: onTap);
+
+ @override
+ InlineSpan finishText() {
+ final String text = getContent();
+
+ return SpecialTextSpan(
+ text: text,
+ actualText: toString(),
+ start: start,
+
+ ///caret can move into special text
+ deleteAll: true,
+ style: textStyle?.copyWith(color: Color(0xff3875E9)),
+ recognizer: TapGestureRecognizer()
+ ..onTap = () {
+ if (onTap != null) onTap(toString());
+ });
+ }
+}
+
+List dollarList = [
+ "\$Dota2\$",
+ "\$Dota2 Ti9\$",
+ "\$CN dota best dota\$",
+ "\$Flutter\$",
+ "\$CN dev best dev\$",
+ "\$UWP\$",
+ "\$Nevermore\$",
+ "\$FlutterCandies\$",
+ "\$ExtendedImage\$",
+ "\$ExtendedText\$",
+];
diff --git a/lib/chat/dots_indicator.dart b/lib/chat/dots_indicator.dart
new file mode 100644
index 0000000..d107f8a
--- /dev/null
+++ b/lib/chat/dots_indicator.dart
@@ -0,0 +1,68 @@
+import 'dart:math';
+
+import 'package:flutter/material.dart';
+
+class DotsIndicator extends AnimatedWidget {
+ DotsIndicator({
+ this.controller,
+ this.itemCount,
+ this.onPageSelected,
+ this.color: Colors.red,
+ }) : super(listenable: controller);
+
+ /// The PageController that this DotsIndicator is representing.
+ final PageController controller;
+
+ /// The number of items managed by the PageController
+ final int itemCount;
+
+ /// Called when a dot is tapped
+ final ValueChanged onPageSelected;
+
+ /// The color of the dots.
+ ///
+ /// Defaults to `Colors.white`.
+ final Color color;
+
+ // The base size of the dots
+ static const double _kDotSize = 8.0;
+
+ // The increase in the size of the selected dot
+ static const double _kMaxZoom = 2.0;
+
+ // The distance between the center of each dot
+ static const double _kDotSpacing = 25.0;
+
+ Widget _buildDot(int index) {
+ double selectedness = Curves.easeOut.transform(
+ max(
+ 0.0,
+ 1.0 - ((controller.page ?? controller.initialPage) - index).abs(),
+ ),
+ );
+ double zoom = 1.0 + (_kMaxZoom - 1.0) * selectedness;
+ return new Container(
+ width: _kDotSpacing,
+ child: new Center(
+ child: new Material(
+ color: color,
+ type: MaterialType.circle,
+ child: new Container(
+ width: _kDotSize * zoom,
+ height: _kDotSize * zoom,
+ child: new InkWell(
+ onTap: () => onPageSelected(index),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ Widget build(BuildContext context) {
+ return new Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: new List.generate(itemCount, _buildDot),
+ );
+ }
+}
\ No newline at end of file
diff --git a/lib/chat/download_item.dart b/lib/chat/download_item.dart
new file mode 100644
index 0000000..f05a832
--- /dev/null
+++ b/lib/chat/download_item.dart
@@ -0,0 +1,138 @@
+import 'package:chat/chat/video_view.dart';
+import 'package:chat/models/ChatMsg.dart';
+import 'package:chat/proto/all.pbserver.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:chat/utils/upload_util.dart';
+import 'package:flutter/material.dart';
+import 'package:percent_indicator/circular_percent_indicator.dart';
+
+class DownloadItem extends StatefulWidget {
+ final MsgModel msg;
+ final Widget child;
+ final bool isShowProgress;
+ final bool isAutoDown;
+ final Function onComplete;
+ DownloadItem(
+ {this.msg,
+ this.child,
+ this.isShowProgress = true,
+ this.isAutoDown = true,
+ this.onComplete});
+ @override
+ _DownloadItemState createState() => _DownloadItemState();
+}
+
+class _DownloadItemState extends State {
+ int downloadState = 0; //0,默认,1进行中,2成功,3失败
+
+ @override
+ void initState() {
+ super.initState();
+
+ if (widget.msg.localFile == null) {
+ if (widget.isAutoDown &&
+ (widget.msg.state != MsgState.Downloading &&
+ widget.msg.state != MsgState.DownloadSuccess)) {
+ downloadRes();
+ }
+ }
+ }
+
+ downloadRes() async {
+ print('开始下载文件${widget.msg.extraFile}');
+ widget.msg.state = MsgState.Downloading;
+
+ if (mounted) {
+ setState(() {});
+ }
+ var filePath = await UploadUtil().downloadFile(widget.msg);
+
+ if (filePath != null) {
+ print('下载完成');
+ if (widget.onComplete != null) {
+ widget.onComplete();
+ }
+ if (mounted) {
+ setState(() {});
+ }
+ } else {
+ print('下载文件失败');
+
+ if (mounted) {
+ setState(() {});
+ }
+ }
+ }
+
+ showVideoPage(BuildContext context, String filePath) {
+ Navigator.push(context,
+ MaterialPageRoute(builder: (BuildContext context) {
+ return VideoPage(videoPath: filePath);
+ }));
+ }
+
+ _downloadWidget() {
+ if (widget.msg.localFile != null) {
+ if (widget.msg.msgType == ChatType.ShortVideoChatType.value) {
+ return Icon(Icons.play_circle_outline, color: Colors.white);
+ }
+ } else {
+ if (widget.msg.state == MsgState.DownloadFailed) {
+ return Container(
+ padding: EdgeInsets.all(5),
+ decoration: BoxDecoration(
+ color: Colors.grey.withAlpha(150),
+ borderRadius: BorderRadius.circular(8)),
+ child: Icon(Icons.refresh, color: Colors.white70),
+ );
+ } else if (widget.msg.state == MsgState.Downloading &&
+ widget.isShowProgress) {
+ return StreamBuilder(
+ stream: UploadUtil().getStream(widget.msg.extraFile).stream,
+ initialData: UploadUtil().streamLastPercentMap[widget.msg.extraFile],
+ builder: (BuildContext context, AsyncSnapshot snapshot) {
+ if (snapshot.data != null) {
+ if (snapshot.data >= 1) {
+ return SizedBox(width: 0, height: 0);
+ }
+
+ return CircularPercentIndicator(
+ radius: 30.0,
+ lineWidth: 2.0,
+ percent: snapshot.data,
+ center: Padding(
+ padding: EdgeInsets.all(2),
+ child: fixedText(
+ "${(snapshot.data * 100).toStringAsFixed(0)}%",
+ fontSize: 9,
+ color: Colors.green)),
+ progressColor: Colors.green,
+ );
+ } else {
+ return SizedBox(width: 0, height: 0);
+ }
+ },
+ );
+ } else if (widget.msg.state < MsgState.Downloading) {
+ if (widget.msg.msgType == ChatType.ShortVideoChatType.value) {
+ return Icon(Icons.play_circle_outline, color: Colors.white);
+ }
+ }
+ }
+
+ return Container(width: 0, height: 0);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ bool isNeedDown = widget.msg.localFile == null &&
+ (widget.msg.state != MsgState.Downloading &&
+ widget.msg.state != MsgState.DownloadSuccess);
+ return InkWell(
+ onTap: isNeedDown ? downloadRes : null,
+ child: Stack(
+ alignment: Alignment.center,
+ children: [widget.child, _downloadWidget()],
+ ));
+ }
+}
diff --git a/lib/chat/emoji_gif_text.dart b/lib/chat/emoji_gif_text.dart
new file mode 100644
index 0000000..3bd0ca8
--- /dev/null
+++ b/lib/chat/emoji_gif_text.dart
@@ -0,0 +1,59 @@
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/utils/LoadingDialog.dart';
+import 'package:extended_text_library/extended_text_library.dart';
+import 'package:flutter/material.dart';
+
+///emoji/image text
+class EmojiGifText extends SpecialText {
+ static const String flag = "<*";
+ final int start;
+ final isShowGif;
+ EmojiGifText(TextStyle textStyle, {this.start,this.isShowGif=true})
+ : super(EmojiGifText.flag, ">", textStyle);
+
+
+ @override
+ InlineSpan finishText() {
+ var key = toString();
+ if (EmojiGifUitl.instance.emojiMap.containsKey(key)) {
+ //fontsize id define image height
+ //size = 30.0/26.0 * fontSize
+ final double size = 118.0;
+
+ ///fontSize 26 and text height =30.0
+ //final double fontSize = 26.0;
+ return isShowGif?ImageSpan(AssetImage(EmojiGifUitl.instance.emojiMap[key]),
+ actualText: key,
+ imageWidth: size,
+ imageHeight: size,
+ start: start,
+ fit: BoxFit.fill,
+ margin: EdgeInsets.only(left: 2.0, top: 2.0, right: 2.0)):SpecialTextSpan(text:'[${I18n.of(LoadingManage.context).emoji}]', actualText: '' );
+
+// return Image.asset(EmojiGifUitl.instance.emojiMap[key]);
+
+ }
+
+ return TextSpan(text: toString(), style: textStyle);
+ }
+}
+
+class EmojiGifUitl {
+ final Map _emojiMap = new Map();
+
+ Map get emojiMap => _emojiMap;
+
+ final String _emojiFilePath = "assets/images/sticker";
+
+ static EmojiGifUitl _instance;
+ static EmojiGifUitl get instance {
+ if (_instance == null) _instance = new EmojiGifUitl._();
+ return _instance;
+ }
+
+ EmojiGifUitl._() {
+ for (int i = 1; i < 31; i++) {
+ _emojiMap[EmojiGifText.flag+"_$i>"] = "$_emojiFilePath/sticker_$i.gif";
+ }
+ }
+}
diff --git a/lib/chat/emoji_keyboard.dart b/lib/chat/emoji_keyboard.dart
new file mode 100644
index 0000000..e69de29
diff --git a/lib/chat/emoji_text.dart b/lib/chat/emoji_text.dart
new file mode 100644
index 0000000..851b454
--- /dev/null
+++ b/lib/chat/emoji_text.dart
@@ -0,0 +1,57 @@
+import 'package:extended_text_library/extended_text_library.dart';
+import 'package:flutter/material.dart';
+
+///emoji/image text
+class EmojiText extends SpecialText {
+ static const String flag = "[";
+ final int start;
+ final double emojiSize;
+ EmojiText(TextStyle textStyle, {this.start, this.emojiSize=20.0})
+ : super(EmojiText.flag, "]", textStyle);
+
+ @override
+ InlineSpan finishText() {
+ var key = toString();
+
+ if (EmojiUitl.instance.emojiMap.containsKey(key)) {
+
+ //fontsize id define image height
+ //size = 30.0/26.0 * fontSize
+ final double size = emojiSize;
+ // ScreenUtil().setWidth(emojiSize);
+ ///fontSize 26 and text height =30.0
+ //final double fontSize = 26.0;
+ return ImageSpan(AssetImage(EmojiUitl.instance.emojiMap[key]),
+ actualText: key,
+ imageWidth: size,
+ imageHeight: size,
+ start: start,
+ fit: BoxFit.contain,
+ margin: EdgeInsets.only(left: 2.0, top: 2.0, right: 2.0));
+ }
+
+ return TextSpan(text: toString(), style: textStyle);
+ }
+}
+
+class EmojiUitl { ///emoji
+ final Map _emojiMap = new Map();
+
+ Map get emojiMap => _emojiMap;
+
+ final String _emojiFilePath = "assets/images/emojiface";
+
+ static EmojiUitl _instance;
+ static EmojiUitl get instance {
+ if (_instance == null) _instance = new EmojiUitl._();
+ return _instance;
+ }
+
+ EmojiUitl._() {
+ for (int i = 1; i < 87; i++) {
+
+ _emojiMap[EmojiText.flag+"$i]"] = "$_emojiFilePath/$i.png";
+ }
+
+ }
+}
diff --git a/lib/chat/file_msg_item.dart b/lib/chat/file_msg_item.dart
new file mode 100644
index 0000000..f77cea2
--- /dev/null
+++ b/lib/chat/file_msg_item.dart
@@ -0,0 +1,115 @@
+import 'package:chat/models/ChatMsg.dart';
+import 'package:chat/proto/chat.pb.dart';
+import 'package:chat/r.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:flutter/material.dart';
+import 'package:open_file/open_file.dart';
+
+class FileMsgItem extends StatelessWidget {
+ final MsgModel msgModel;
+ FileMsgItem(this.msgModel);
+
+ getTypeImage(String type) {
+ type = type.toLowerCase();
+ switch (type) {
+ case 'pdf':
+ return R.assetsImagesExtPdf;
+ break;
+ case 'doc':
+ case 'docx':
+ return R.assetsImagesExtWord;
+ break;
+ case 'ppt':
+ return R.assetsImagesExtPpt;
+ break;
+ case 'xls':
+ case 'xlsx':
+ return R.assetsImagesExtExcel;
+ break;
+ case 'txt':
+ case 'xml':
+ case 'html':
+ case 'htm':
+ case '.h':
+ case '.cpp':
+ case '.conf':
+ case '.c':
+ return R.assetsImagesExtTxt;
+ break;
+ case 'tar':
+ case 'gz':
+ case 'gzip':
+ case 'tgz':
+ case 'zip':
+ return R.assetsImagesExtZip;
+ break;
+ case 'mp3':
+ case 'wav':
+ return R.assetsImagesExtSound;
+ break;
+
+ case 'mp4':
+ case 'avi':
+ case 'mpg':
+ case 'wm':
+ case 'wmv':
+ return R.assetsImagesExtVideo;
+ break;
+ case 'apk':
+ return R.assetsImagesExtApk;
+ break;
+ default:
+ return R.assetsImagesExtUnknown;
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ var fileMsg = FileChat.fromBuffer(msgModel.msgContent);
+ var type = fileMsg.type;
+ var size = fileMsg.size;
+ var name = fileMsg.name;
+
+ var sizeStr = '${(size / 1024).toStringAsFixed(1)}k';
+ if (size > 1024 * 1024) {
+ sizeStr = '${(size / 1024 / 1024).toStringAsFixed(1)}m';
+ }
+ return InkWell(
+ onTap: msgModel.localFile != null
+ ? () {
+ print('打开文件 ${msgModel.localFile}');
+ OpenFile.open(msgModel.localFile);
+ }
+ : null,
+ child: Container(
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Image.asset(getTypeImage(type), width: 45),
+ Padding(
+ padding: EdgeInsets.symmetric(vertical: 5, horizontal: 8),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ child: fixedText(name, fontSize: 13),
+ constraints: BoxConstraints(
+ maxWidth: Screen.width - 120 - 122, maxHeight: 50),
+ ),
+ Expanded(child: SizedBox()),
+ fixedText(sizeStr, fontSize: 12, color: Colors.grey)
+ ],
+ )),
+ msgModel.localFile == null
+ ? Container(
+ constraints: BoxConstraints(
+ maxWidth: 40,
+ ),
+ child: fixedText('未下载', fontSize: 12, color: Colors.grey))
+ : Container()
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/chat/full_img_view.dart b/lib/chat/full_img_view.dart
new file mode 100644
index 0000000..141934d
--- /dev/null
+++ b/lib/chat/full_img_view.dart
@@ -0,0 +1,168 @@
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:chat/chat/download_item.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/models/ChatMsg.dart';
+import 'package:flutter/material.dart';
+import 'package:image_gallery_saver/image_gallery_saver.dart';
+import 'package:oktoast/oktoast.dart';
+
+import '../r.dart';
+
+class PhotoPage extends StatefulWidget {
+ final MsgModel msg;
+ PhotoPage({this.msg});
+ @override
+ _PhotoPageState createState() => _PhotoPageState();
+}
+
+class _PhotoPageState extends State
+ with SingleTickerProviderStateMixin {
+ AnimationController _controller;
+ Animation _animation;
+ Offset _offset = Offset.zero;
+ double _scale = 1.0;
+ Offset _normalizedOffset;
+ double _previousScale;
+ double _kMinFlingVelocity = 600.0;
+
+ ImageProvider provider;
+
+ @override
+ void initState() {
+ super.initState();
+
+ getImgData();
+ _controller = AnimationController(vsync: this);
+ _controller.addListener(() {
+ setState(() {
+ _offset = _animation.value;
+ });
+ });
+ }
+
+ getImgData() {
+ if (widget.msg.localFile != null) {
+ var fileData = File(widget.msg.localFile).readAsBytesSync();
+ provider = MemoryImage(fileData);
+ } else {
+ provider = MemoryImage(Uint8List.fromList(widget.msg.msgContent));
+ }
+ }
+
+ @override
+ void dispose() {
+ _controller.stop();
+ _controller.dispose();
+
+ super.dispose();
+ }
+
+ Offset _clampOffset(Offset offset) {
+ final Size size = context.size;
+ // widget的屏幕宽度
+ final Offset minOffset = Offset(size.width, size.height) * (1.0 - _scale);
+ // 限制他的最小尺寸
+ return Offset(
+ offset.dx.clamp(minOffset.dx, 0.0), offset.dy.clamp(minOffset.dy, 0.0));
+ }
+
+ void _handleOnScaleStart(ScaleStartDetails details) {
+ setState(() {
+ _previousScale = _scale;
+ _normalizedOffset = (details.focalPoint - _offset) / _scale;
+ // 计算图片放大后的位置
+ _controller.stop();
+ });
+ }
+
+ void _handleOnScaleUpdate(ScaleUpdateDetails details) {
+ setState(() {
+ _scale = (_previousScale * details.scale).clamp(1.0, 3.0);
+ // 限制放大倍数 1~3倍
+ _offset = _clampOffset(details.focalPoint - _normalizedOffset * _scale);
+ // 更新当前位置
+ });
+ }
+
+ void _handleOnScaleEnd(ScaleEndDetails details) {
+ final double magnitude = details.velocity.pixelsPerSecond.distance;
+ if (magnitude < _kMinFlingVelocity) return;
+ final Offset direction = details.velocity.pixelsPerSecond / magnitude;
+ // 计算当前的方向
+ final double distance = (Offset.zero & context.size).shortestSide;
+ // 计算放大倍速,并相应的放大宽和高,比如原来是600*480的图片,放大后倍数为1.25倍时,宽和高是同时变化的
+ _animation = _controller.drive(Tween(
+ begin: _offset, end: _clampOffset(_offset + direction * distance)));
+ _controller
+ ..value = 0.0
+ ..fling(velocity: magnitude / 1000.0);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return GestureDetector(
+ onTap: () {
+ Navigator.pop(context);
+ },
+ onScaleStart: _handleOnScaleStart,
+ onScaleUpdate: _handleOnScaleUpdate,
+ onScaleEnd: _handleOnScaleEnd,
+ child: Material(
+ child: DownloadItem(
+ msg: widget.msg,
+ isAutoDown: false,
+ onComplete: () {
+ getImgData();
+ setState(() {});
+ },
+ child: Transform(
+ transform: Matrix4.identity()
+ ..translate(_offset.dx, _offset.dy)
+ ..scale(_scale),
+ child: Stack(
+ children: [
+ Image(
+ fit: BoxFit.fitWidth,
+ image: provider ?? AssetImage(R.assetsImagesIcAlbum),
+ ),
+
+ Positioned(
+ right: 10,
+ bottom: 10,
+ child: InkWell(
+ onTap: saveToGallery,
+ child: Container(
+ padding: EdgeInsets.all(5),
+ decoration: BoxDecoration(
+ color: Colors.grey.withAlpha(150),
+ borderRadius: BorderRadius.circular(8)),
+ child: Icon(Icons.save_alt, color: Colors.white70),
+ )))
+ ],
+ )),
+ )),
+ );
+ }
+
+ saveToGallery() async {
+ if (widget.msg.localFile != null) {
+ var data= File(widget.msg.localFile).readAsBytesSync();
+ ImageGallerySaver.saveImage(data).then((res) {
+ print(res);
+ if (res != null) {
+ showToast(I18n.of(context).successfully_saved);
+ }
+ });
+ } else {
+ ImageGallerySaver.saveImage(Uint8List.fromList(widget.msg.msgContent))
+ .then((res) {
+ print(res);
+ if (res != null) {
+ showToast(I18n.of(context).successfully_saved);
+ }
+ });
+ }
+ }
+}
diff --git a/lib/chat/gift_msg_item.dart b/lib/chat/gift_msg_item.dart
new file mode 100644
index 0000000..c6de421
--- /dev/null
+++ b/lib/chat/gift_msg_item.dart
@@ -0,0 +1,44 @@
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/proto/all.pbserver.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:flutter/material.dart';
+
+class GiftMsgItem extends StatelessWidget {
+ final bool isMe;
+ final List msgContent;
+ GiftMsgItem(this.msgContent, this.isMe);
+ @override
+ Widget build(BuildContext context) {
+ GiftChat giftChat = GiftChat.fromBuffer(msgContent);
+
+ var str = '';
+ if (isMe) {
+ str = I18n.of(context)
+ .send_gift1
+ .replaceFirst('/s1', giftChat.giftAmount.toString());
+ } else {
+ str = I18n.of(context)
+ .receive_gift1
+ .replaceFirst('/s1', giftChat.giftAmount.toString());
+ }
+
+ var imgPath = 'assets/images/gift_${giftChat.giftId}.png';
+
+ return Container(
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ child: Row(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ fixedText(str, fontSize: 14, color: Colors.white),
+ SizedBox(width: 10),
+ Image.asset(imgPath, height: 25, width: 25, fit: BoxFit.contain),
+ ],
+ ),
+ decoration: BoxDecoration(
+ color: Color(0xFFF92222).withAlpha(60),
+ border: Border.all(color: Color(0xFFB9CBD7), width: 0.6),
+ borderRadius: BorderRadius.all(Radius.circular(7.5))),
+ );
+ }
+}
diff --git a/lib/chat/gift_page.dart b/lib/chat/gift_page.dart
new file mode 100644
index 0000000..2c9b0ed
--- /dev/null
+++ b/lib/chat/gift_page.dart
@@ -0,0 +1,46 @@
+import 'dart:math';
+
+import 'package:chat/chat/gift_widget.dart';
+import 'package:chat/models/gift_item_model.dart';
+import 'package:chat/models/gift_select_provider.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+
+class GiftPage extends StatelessWidget {
+ final List giftList;
+ final int pageIndex;
+
+ GiftPage(this.giftList, this.pageIndex);
+
+ @override
+ Widget build(BuildContext context) {
+ int length = giftList.length - pageIndex * 8;
+ length = min(length, 8);
+
+ int curSelectIndex =
+ Provider.of(context).curSelectIndex;
+
+ print('page $pageIndex curSelectIndex $curSelectIndex');
+ return Container(
+ width: Screen.width,
+ height: 150,
+ child: Wrap(
+ direction: Axis.horizontal,
+ runSpacing: 5,
+ spacing: 10,
+ children: List.generate(length, (int i) {
+ int index = pageIndex * 8 + i;
+ return GestureDetector(
+ child: GiftItem(
+ itemModel: giftList[index],
+ isSelected: index == curSelectIndex),
+ onTap: () {
+ if (index != curSelectIndex) {
+ Provider.of(context)
+ .changeSelectIndex(index);
+ }
+ });
+ })));
+ }
+}
diff --git a/lib/chat/gift_select_widget.dart b/lib/chat/gift_select_widget.dart
new file mode 100644
index 0000000..be4be8d
--- /dev/null
+++ b/lib/chat/gift_select_widget.dart
@@ -0,0 +1,277 @@
+import 'package:chat/chat/gift_page.dart';
+import 'package:chat/data/UserData.dart';
+import 'package:chat/data/constants.dart';
+import 'package:chat/data/gift_data_mgr.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/models/gift_item_model.dart';
+import 'package:chat/models/gift_select_provider.dart';
+import 'package:chat/models/money_change.dart';
+import 'package:chat/proto/chat.pb.dart';
+import 'package:chat/r.dart';
+import 'package:chat/utils/ChargeMoney.dart';
+import 'package:chat/utils/HttpUtil.dart';
+import 'package:chat/utils/TokenMgr.dart';
+import 'package:chat/utils/anim_effect_overlay.dart';
+import 'package:chat/utils/msgHandler.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:dio/dio.dart';
+import 'package:flutter/material.dart';
+import 'package:oktoast/oktoast.dart';
+import 'package:provider/provider.dart';
+
+class GiftSelectWidget extends StatefulWidget {
+ final int friendId;
+ final Function sendMsg;
+ GiftSelectWidget(this.friendId, this.sendMsg);
+ @override
+ _GiftSelectWidgetState createState() => _GiftSelectWidgetState();
+}
+
+class _GiftSelectWidgetState extends State {
+ //打赏礼物信息
+ List giftList;
+//礼物数量
+ int curGiftValue = 1;
+
+ @override
+ void initState() {
+ super.initState();
+ getGiftList();
+ }
+
+ getGiftList() async {
+ giftList = await GiftMgr().getGiftList();
+ if (mounted) {
+ setState(() {});
+ }
+ }
+
+ _sendGift(BuildContext context) async {
+ int curSelectIndex =
+ Provider.of(context).curSelectIndex;
+ var curGift = giftList[curSelectIndex];
+
+ int price = curGift.price;
+ int giftId = curGift.id;
+ int total = curGiftValue * price;
+ if (total > Provider.of(context).money) {
+ showToast(I18n.of(context).not_enough);
+ return;
+ }
+
+ int buyCount = 0;
+ if (curGiftValue > curGift.amount) {
+ buyCount = curGiftValue - curGift.amount;
+ }
+ Map data = {
+ "userId": UserData().basicInfo.userId,
+ "rUserId": widget.friendId,
+ "id": giftId,
+ "price": price,
+ "amount": curGiftValue,
+ "totalPrice": total,
+ "payNum": buyCount
+ };
+ data['sign'] = TokenMgr().getSign(data);
+
+ Response res = await HttpUtil().post('reward/gift', data: data);
+ if (res == null) {
+ return;
+ }
+ Map resData = res.data;
+
+ //showToast(resData['msg']);
+
+ if (resData['code'] == 0) {
+ //赠送成功
+ print('赠送金额:${resData['data']}');
+ if (curGift.amount >= curGiftValue) {
+ curGift.amount -= curGiftValue;
+ }
+
+ int receiveAmount = resData['data'];
+
+ Provider.of(context, listen: false).subMoney(total);
+ AnimEffect.showEffect(context, giftId);
+ AnimEffect.showDashangEffect(context, true, curGiftValue, curGift.name);
+
+ var msgContetnt = GiftChat.create();
+ msgContetnt.giftAmount = curGiftValue;
+ msgContetnt.suId = UserData().basicInfo.userId;
+ msgContetnt.tuId = widget.friendId;
+
+ msgContetnt.giftId = giftId;
+ msgContetnt.giftName = curGift.name;
+ msgContetnt.money = receiveAmount;
+
+ var msg = MsgHandler.createSendMsg(
+ ChatType.GiftChatType, msgContetnt.writeToBuffer(),
+ friendId: widget.friendId, channelType: ChatChannelType.Session);
+
+ widget.sendMsg(msg);
+
+ setState(() {});
+ } else {
+ print(resData['msg']);
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Container(
+ height: 320,
+ width: Screen.width,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ ),
+ child: giftList == null
+ ? Center(child: Text(I18n.of(context).no_gift))
+ : Column(
+ children: [
+ Container(
+ padding: EdgeInsets.symmetric(vertical: 5, horizontal: 20),
+ child: Row(
+ children: [
+ Text(I18n.of(context).sent_gift,
+ textScaleFactor: 1.0,
+ style: TextStyle(
+ fontSize: 16,
+ fontWeight: FontWeight.bold,
+ color: Constants.BlackTextColor)),
+ Expanded(
+ child: SizedBox(),
+ ),
+ Image.asset(
+ R.assetsImagesCoin,
+ scale: 2,
+ ),
+ SizedBox(
+ width: 5,
+ ),
+ fixedText(
+ I18n.of(context)
+ .available_balance
+ .replaceFirst('/s1', ''),
+ color: Constants.GreyTextColor),
+ Consumer(
+ builder:
+ (context, MoneyChangeProvider counter, child) =>
+ fixedText(counter.money.toString(),
+ color: Color(0xFFDB305D)),
+ ),
+ fixedText(I18n.of(context).mask_coin,
+ color: Color(0xFFDB305D)),
+ ],
+ ),
+ ),
+ Container(
+ alignment: Alignment.topCenter,
+ padding: EdgeInsets.all(10),
+ height: 150,
+ child: GiftPage(giftList, 0),
+ ),
+ Expanded(child: SizedBox()),
+ Padding(
+ padding: EdgeInsets.symmetric(vertical: 10, horizontal: 20),
+ child: Row(
+ children: [
+ Expanded(
+ child: SizedBox(
+ height: 36,
+ child: RaisedButton(
+ padding: EdgeInsets.symmetric(horizontal: 5),
+ child: Text(
+ I18n.of(context).recharge,
+ textScaleFactor: 1.0,
+ maxLines: 1,
+ style: TextStyle(
+ fontSize: 16, fontWeight: FontWeight.bold),
+ ),
+ elevation: 2.0,
+ color: Colors.orangeAccent,
+ textColor: Colors.white,
+ onPressed: () {
+ ChargeMoney.showChargeSheet(context, () {});
+ },
+ shape: RoundedRectangleBorder(
+ borderRadius:
+ BorderRadius.all(Radius.circular(20)),
+ ),
+ ),
+ )),
+ SizedBox(width: 20),
+ Expanded(
+ flex: 2,
+ child: Container(
+ height: 36,
+ decoration: BoxDecoration(
+ boxShadow: [
+ BoxShadow(
+ blurRadius: 2.0,
+ color: Colors.white24)
+ ],
+ borderRadius:
+ BorderRadius.all(Radius.circular(20)),
+ border: Border.all(color: Colors.red)),
+ child: Row(
+ children: [
+ Expanded(
+ child: DropdownButton(
+ isExpanded: true,
+ underline: Container(),
+ value: curGiftValue,
+ style: TextStyle(fontSize: 16),
+ iconEnabledColor: Colors.redAccent,
+ onChanged: (newValue) {
+ setState(() {
+ curGiftValue = newValue;
+ });
+ },
+ items: [1, 6, 8, 66]
+ .map((v) =>
+ DropdownMenuItem(
+ value: v,
+ child: Container(
+ padding: EdgeInsets.only(
+ left: 20),
+ child: fixedText(
+ v.toString(),
+ color: v ==
+ curGiftValue
+ ? Colors.redAccent
+ : Colors.black))))
+ .toList(),
+ )),
+ Expanded(
+ child: InkWell(
+ child: Container(
+ decoration: BoxDecoration(
+ color: Color(0xFFFD6E8F),
+ borderRadius: BorderRadius.only(
+ topRight: Radius.circular(20),
+ bottomRight: Radius.circular(20)),
+ ),
+ height: 36,
+ alignment: Alignment.center,
+ child: Text(
+ I18n.of(context).give,
+ textScaleFactor: 1.0,
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 16,
+ fontWeight: FontWeight.bold),
+ ),
+ ),
+ onTap: () {
+ _sendGift(context);
+ },
+ ))
+ ],
+ )))
+ ],
+ ),
+ )
+ ],
+ ));
+ }
+}
diff --git a/lib/chat/gift_widget.dart b/lib/chat/gift_widget.dart
new file mode 100644
index 0000000..ab9253c
--- /dev/null
+++ b/lib/chat/gift_widget.dart
@@ -0,0 +1,88 @@
+import 'dart:math';
+
+import 'package:chat/data/constants.dart';
+import 'package:chat/models/gift_item_model.dart';
+import 'package:chat/r.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:flutter/material.dart';
+
+class GiftItem extends StatelessWidget {
+ final GiftItemModel itemModel;
+ final isSelected;
+
+ GiftItem({this.isSelected = false, this.itemModel});
+ @override
+ Widget build(BuildContext context) {
+ var imgPath = 'assets/images/gift_${itemModel.id}.png';
+ if (isSelected) {
+ imgPath = 'assets/images/gift_anim_${itemModel.id}.gif';
+ }
+
+ var curAmount = '0';
+ if (itemModel.amount >= 100) {
+ curAmount = '99+';
+ } else {
+ curAmount = itemModel.amount.toString();
+ }
+ return ClipRRect(
+ borderRadius: BorderRadius.circular(10),
+ child: Container(
+ width: 85,
+ height: 110,
+ decoration: BoxDecoration(
+ color: Colors.transparent,
+ border: Border.all(
+ color: isSelected ? Colors.orangeAccent : Colors.grey[200],
+ width: 1),
+ borderRadius: BorderRadius.circular(10),
+ ),
+ child: Stack(
+ children: [
+ Column(
+ mainAxisAlignment: MainAxisAlignment.spaceAround,
+ children: [
+ SizedBox(height: 10),
+ Image.asset(imgPath,
+ fit: BoxFit.contain, width: 75, height: 40),
+ Text(
+ itemModel.name,
+ textScaleFactor: 1.0,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ style: TextStyle(fontSize: 10),
+ ),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Image.asset(
+ R.assetsImagesCoin,
+ scale: 5,
+ ),
+ SizedBox(width: 3),
+ fixedText(itemModel.price.toString(),
+ color: Constants.GreyTextColor),
+ ],
+ ),
+ SizedBox(height: 5)
+ ],
+ ),
+ Positioned(
+ left: -30,
+ top: 30,
+ child: Container(
+ height: 25,
+ width: 80,
+ transform: Matrix4.rotationZ(-pi / 4),
+ color: Color(0xFFFD6E8F),
+ ),
+ ),
+ Container(
+ width: 25,
+ height: 25,
+ alignment: Alignment.center,
+ child: fixedText(curAmount,
+ fontSize: 12, color: Colors.white)),
+ ],
+ )));
+ }
+}
diff --git a/lib/chat/group_chat_item.dart b/lib/chat/group_chat_item.dart
new file mode 100644
index 0000000..5240342
--- /dev/null
+++ b/lib/chat/group_chat_item.dart
@@ -0,0 +1,1322 @@
+import 'dart:convert';
+import 'dart:math';
+import 'dart:typed_data';
+
+import 'package:cached_network_image/cached_network_image.dart';
+import 'package:chat/chat/download_item.dart';
+import 'package:chat/chat/file_msg_item.dart';
+import 'package:chat/chat/msg_state_widge.dart';
+import 'package:chat/chat/place_item.dart';
+import 'package:chat/chat/redbag_widget.dart';
+import 'package:chat/chat/upload_item.dart';
+import 'package:chat/chat/video_view.dart';
+import 'package:chat/data/UserData.dart';
+import 'package:chat/data/constants.dart';
+import 'package:chat/utils/wpop/w_popup_menu.dart';
+import 'package:flutter/services.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/home/invite_detail_page.dart';
+import 'package:chat/models/ChatMsg.dart';
+import 'package:chat/models/group_info_model.dart';
+import 'package:chat/models/keyboard_provider.dart';
+import 'package:chat/proto/chat.pbenum.dart';
+import 'package:chat/proto/chat.pbserver.dart';
+import 'package:chat/utils/CustomUI.dart';
+import 'package:chat/utils/MessageMgr.dart';
+import 'package:chat/utils/app_navigator.dart';
+import 'package:chat/utils/date_utils.dart';
+import 'package:chat/utils/group_member_model.dart';
+import 'package:chat/utils/msgHandler.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:chat/utils/sound_util.dart';
+import 'package:chat/utils/upload_util.dart';
+import 'package:chat/utils/video_anim.dart';
+import 'package:dio/dio.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:provider/provider.dart';
+import 'package:oktoast/oktoast.dart';
+import 'package:chat/utils/HttpUtil.dart';
+
+import '../r.dart';
+import 'full_img_view.dart';
+import 'upload_item.dart';
+import 'package:chat/models/ref_name_provider.dart';
+import 'package:chat/models/money_change.dart';
+import 'package:chat/models/voucher_change.dart';
+
+const double ChatRadius = 7.5;
+const Color SendMsgBg = Color(0xFFD4F0FF);
+const Color SendMsgText = Colors.black;
+const double TextHeight = 1.2;
+
+const double PaddingLeft = 9.5;
+
+const Color ReciveBorderColor = Color(0xFFDCDCDC);
+
+const double FontSize = 15;
+
+class GroupChatPageItem extends StatefulWidget {
+ final MsgModel msg;
+
+ final int lastMsgTime;
+ final GroupMemberModel memberModel;
+ final Function hideKeyboard;
+ const GroupChatPageItem(
+ {Key key,
+ this.msg,
+ this.lastMsgTime,
+ this.hideKeyboard,
+ this.memberModel})
+ : assert(msg != null),
+ super(key: key);
+
+ @override
+ _GroupChatPageItemState createState() => _GroupChatPageItemState();
+}
+
+class _GroupChatPageItemState extends State
+ with SingleTickerProviderStateMixin {
+ int curTextType = 0; //文字、译文切换索引
+ List textList = [];
+
+ String curSoundUrl;
+
+ CancelToken _cancelToken = CancelToken();
+
+ bool isLongPressed = false;
+
+ @override
+ void initState() {
+ super.initState();
+
+ if (widget.msg.from == UserData().basicInfo.userId &&
+ widget.msg.state == MsgState.None) {
+ print('重新发送消息');
+ MsgHandler.sendChatMsg(widget.msg);
+ }
+
+ textList = widget.msg.getTransTextList();
+
+ MessageMgr().on('Update Translate Message', updateTranslateMsg);
+ MessageMgr().on('Cancel Request', _deleteItem);
+ }
+
+ @override
+ void dispose() {
+ MessageMgr().off('Cancel Request', _deleteItem);
+ MessageMgr().off('Update Translate Message', updateTranslateMsg);
+ super.dispose();
+ }
+
+ _deleteItem(msg) {
+ if (msg == widget.msg) {
+ print(widget.msg.state);
+ if (widget.msg.state == MsgState.Uploading) {
+ print('取消上传');
+ UploadUtil().cancelRequests(_cancelToken);
+ }
+ }
+ }
+
+ updateTextList() {
+ textList.clear();
+ curTextType = 0;
+ textList = widget.msg.getTransTextList();
+ }
+
+ updateTranslateMsg(msg) {
+ if (msg.time == widget.msg.time) {
+ if (mounted) {
+ updateTextList();
+ if (!mounted) {
+ return;
+ }
+ setState(() {
+ print('更新翻译文字');
+ });
+ }
+ }
+ }
+
+ getTodayTime(msgDate) {
+ String showTimeStr;
+
+ var sendTime = widget.msg.time;
+ var today = DateTime.now();
+ //今天
+ if (msgDate.year == today.year &&
+ msgDate.month == today.month &&
+ msgDate.day == today.day) {
+ showTimeStr =
+ DateUtils().getFormartData(timeSamp: sendTime, format: 'HH:mm');
+ } else {
+ showTimeStr = DateUtils()
+ .getFormartData(timeSamp: sendTime, format: 'yyyy/MM/dd HH:mm');
+ }
+
+ return showTimeStr;
+ }
+
+ String getMsgTime() {
+ String showTimeStr;
+
+ var sendTime = widget.msg.time;
+
+ var msgDate = DateTime.fromMillisecondsSinceEpoch(sendTime);
+ if (widget.lastMsgTime == null) {
+ showTimeStr = getTodayTime(msgDate);
+ } else {
+ if (sendTime - widget.lastMsgTime > 3 * 60 * 1000) {
+ showTimeStr = getTodayTime(msgDate);
+ }
+ }
+
+ return showTimeStr;
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ var showTime = getMsgTime();
+
+ return Container(
+ width: Screen.width,
+ margin: const EdgeInsets.symmetric(vertical: 10.0),
+ child: Column(
+ children: [
+ showTime == null
+ ? SizedBox()
+ : Container(
+ decoration: BoxDecoration(
+ color: Color(0xFF2C2F36).withOpacity(0.25),
+ borderRadius: BorderRadius.all(Radius.circular(9.5))),
+ padding:
+ EdgeInsets.only(left: 7, right: 7, top: 3, bottom: 2),
+ child: Text(showTime,
+ textScaleFactor: 1.0,
+ style: TextStyle(fontSize: 10.0, color: Colors.white)),
+ ),
+ SizedBox(height: 10),
+ _msgWidget()
+ ],
+ ),
+ );
+ }
+
+ _msgWidget() {
+ if (widget.msg.from == 0) {
+ return _serverNotifyMsg();
+ } else {
+ if (widget.msg.from == UserData().basicInfo.userId) {
+ return _getSentMessageLayout(context);
+ } else {
+ return _getReceivedMessageLayout(context);
+ }
+ }
+ }
+
+ _serverNotifyMsg() {
+ var type = widget.msg.msgType;
+
+ if (type == ChatType.GroupChatNoticeType.value) {
+ var res = GroupChatNotice.fromBuffer(widget.msg.msgContent);
+
+ var groupInfoModel = Provider.of(context);
+ var optId = res.operatuId;
+ var showStr = MsgHandler.getGroupNoticeMsg(res, groupInfoModel);
+
+ return Container(
+ alignment: Alignment.center,
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ child: extendedText(showStr,
+ color: Constants.GreyTextColor,
+ fontSize: 12, onSpecialTextTap: (dynamic parameter) {
+// print('点击事件 $parameter');
+ if (parameter.startsWith("\$")) {
+// showToast('点击: ${res.operateduId[0]}');
+
+ List list = [];
+
+ for (int k = 0; k < res.operateduId.length; k++) {
+ list.add(GroupMemberModel.fromBaseInfo(res.operateduId[k]));
+ }
+
+ AppNavigator.push(
+ context,
+ InviteDetailPage(
+ originalList: list,
+ opt: GroupMemberModel.fromBaseInfo(optId),
+ groupId: groupInfoModel.sessionId,
+ ));
+ }
+ }),
+ );
+ }
+
+ return Container();
+ }
+
+ _textGif(List msgContent) {
+ var msg = utf8.decode(msgContent);
+ return Container(
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ child: extendedText(
+ msg,
+ selectionEnabled: false,
+ hideKeyboard: widget.hideKeyboard,
+ fontSize: FontSize,
+ color: Colors.black,
+ ),
+ );
+ }
+
+ _textMsg(MsgModel msgModel) {
+ var msg = utf8.decode(msgModel.msgContent);
+ if (msg.contains('[ ')) {
+ msg = msg.replaceAll('[ ', '[');
+ }
+ if (msg.contains(' ]')) {
+ msg = msg.replaceAll(' ]', ']');
+ }
+ Widget text = Container(
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ child: extendedText(
+ msg,
+ hideKeyboard: widget.hideKeyboard,
+ fontSize: FontSize,
+ color: SendMsgText,
+ ),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ decoration: BoxDecoration(
+ color: isLongPressed ? Colors.grey[300] : SendMsgBg,
+ border: Border.all(color: Color(0xFFB9CBD7), width: 0.6),
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ );
+
+ if (msgModel.refMsgContent != null && msgModel.refMsgContent.length > 0) {
+ QuoteMsg quoteMsg = QuoteMsg.fromBuffer(msgModel.refMsgContent);
+
+ return Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ text,
+ SizedBox(height: 2),
+ Container(
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ padding: EdgeInsets.symmetric(vertical: 1, horizontal: 3),
+ child: Text(
+ quoteMsg.content,
+ maxLines: 1,
+ textScaleFactor: 1.0,
+ overflow: TextOverflow.ellipsis,
+ style: TextStyle(fontSize: 12),
+ ),
+ decoration: BoxDecoration(
+ color: Colors.grey[300],
+ borderRadius: BorderRadius.circular(5)),
+ )
+ ],
+ );
+ } else {
+ return text;
+ }
+ }
+
+ _soundMsg() {
+ double time = widget.msg.extraInfo / 1000;
+ if (time > 60) {
+ time = 60.0;
+ }
+ bool isPlaying = false;
+
+ var soundPath = widget.msg.localFile;
+
+ isPlaying = SoundUtils().isPlaying(soundPath);
+
+ var soundWidget = GestureDetector(
+ child: Container(
+ width: 120,
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ Container(
+ alignment: Alignment.center,
+ padding: EdgeInsets.only(bottom: 2),
+ margin: EdgeInsets.only(right: 10),
+ width: 25.5,
+ height: 25.5,
+ decoration: BoxDecoration(
+ border:
+ Border.all(color: const Color(0xFF1B92C7), width: 0.5),
+ color: const Color(0xFF04A4FE),
+ shape: BoxShape.circle),
+ child: Icon(
+ IconData(isPlaying ? 0xe652 : 0xe653,
+ fontFamily: Constants.IconFontFamily),
+ size: isPlaying ? 15 : 18,
+ color: Colors.white,
+ ),
+ ),
+ isPlaying
+ ? Stack(
+ children: [
+ Container(
+ height: 18,
+ width: 19,
+ ),
+ Positioned(
+ bottom: 0,
+ child: VideoAnim(
+ begin: 18,
+ start: 0.444,
+ end: 4.5,
+ )),
+ Positioned(
+ left: 7,
+ bottom: 0,
+ child: VideoAnim(
+ begin: 4.5,
+ end: 18,
+ )),
+ Positioned(
+ left: 14,
+ bottom: 0,
+ child: VideoAnim(
+ begin: 18,
+ end: 4.5,
+ ))
+ ],
+ )
+ : Stack(
+ children: [
+ Container(
+ height: 18,
+ width: 19,
+ ),
+ Positioned(
+ bottom: 0, child: CustomUI.buildAudioContaniner(12)),
+ Positioned(
+ left: 7,
+ bottom: 0,
+ child: CustomUI.buildAudioContaniner(4.5)),
+ Positioned(
+ left: 14,
+ bottom: 0,
+ child: CustomUI.buildAudioContaniner(18))
+ ],
+ ),
+ Expanded(child: SizedBox()),
+ fixedText(time.toStringAsFixed(0), color: SendMsgText, fontSize: 16)
+ ],
+ ),
+ padding: EdgeInsets.symmetric(horizontal: 15, vertical: 12),
+ decoration: BoxDecoration(
+ color: SendMsgBg,
+ border: Border.all(color: Color(0xFFB9CBD7), width: 0.6),
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ ),
+ onTap: () async {
+ print('播放状态 : $isPlaying');
+ print('当前文件$soundPath ');
+ if (isPlaying) {
+ SoundUtils().pause();
+ } else {
+ SoundUtils().play(soundPath, onPlayed: () {
+ if (mounted) {
+ setState(() {});
+ }
+ }, complete: () {
+ if (mounted) {
+ setState(() {});
+ }
+ });
+ }
+ },
+ );
+
+ return UploadImgItem(
+ msg: widget.msg,
+ child: soundWidget,
+ isShowProgress: false,
+ );
+ }
+
+ Size _getImgSize() {
+ double aspectRatio = widget.msg.extraInfo / 100;
+
+ var maxWidth = Screen.width * 0.65;
+ var maxHeight = Screen.height / 4;
+
+ var width, height;
+ if (maxWidth / maxHeight > aspectRatio) {
+ height = maxHeight;
+ width = maxHeight * aspectRatio;
+ } else {
+ width = maxWidth;
+ height = maxWidth / aspectRatio;
+ }
+
+ return Size(width, height);
+ }
+
+ _imgMsg(List imgData) {
+ var imgSize = _getImgSize();
+
+ return GestureDetector(
+ child: ClipRRect(
+ child: UploadImgItem(
+ msg: widget.msg,
+ cancelToken: _cancelToken,
+ child: Container(
+ height: imgSize.height,
+ width: imgSize.width,
+ child: Image(
+ fit: BoxFit.contain,
+ image: MemoryImage(Uint8List.fromList(imgData)),
+ ),
+ )),
+ borderRadius: BorderRadius.circular(5),
+ ),
+ onTap: () async {
+ showFullImg(context, widget.msg);
+ });
+ }
+
+ _videoMsg(BuildContext context, List thumbnail) {
+ var imgSize = _getImgSize();
+ return InkWell(
+ child: ClipRRect(
+ child: Stack(
+ alignment: Alignment.center,
+ children: [
+ UploadImgItem(
+ msg: widget.msg,
+ cancelToken: _cancelToken,
+ child: Container(
+ width: imgSize.width,
+ height: imgSize.height,
+ child: Image(
+ fit: BoxFit.contain,
+ image: MemoryImage(Uint8List.fromList(thumbnail)),
+ ),
+ ))
+ ],
+ ),
+ borderRadius: BorderRadius.circular(5),
+ ),
+ onTap: () {
+ showVideoPage(context, widget.msg.localFile);
+ },
+ );
+ }
+
+ _msgLayout(BuildContext context, MsgModel msg) {
+ Widget item;
+ switch (ChatType.valueOf(msg.msgType)) {
+ case ChatType.TextChatType:
+ item = _textMsg(msg);
+ break;
+
+ case ChatType.EmoticonType:
+ item = _textGif(msg.msgContent);
+ break;
+ case ChatType.ImageChatType:
+ item = _imgMsg(msg.msgContent);
+ break;
+ case ChatType.ShortVideoChatType:
+ item = _videoMsg(context, msg.msgContent);
+ break;
+ case ChatType.ShortVoiceChatType:
+ item = _soundMsg();
+ break;
+ case ChatType.RedWalletChatType:
+ item = RedBagItem(
+ Key(msg.time.toString()), UserData().basicInfo.userId, msg);
+ break;
+ case ChatType.PlaceChatType:
+ item = PlaceItem(isMe: true, placeContent: msg.msgContent);
+ break;
+ case ChatType.FileChatType:
+ item = _fileMsgItem();
+ break;
+ default:
+ }
+
+ return wrapItemWithMenu(item);
+ }
+
+ Widget _fileMsgItem() {
+ return UploadImgItem(
+ msg: widget.msg,
+ cancelToken: _cancelToken,
+ child: Container(
+ height: 100,
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ decoration: BoxDecoration(
+ color: isLongPressed ? Colors.grey[300] : SendMsgBg,
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ child: FileMsgItem(widget.msg)));
+ }
+
+ Widget wrapItemWithMenu(item) {
+ List actionsFunc = [];
+ List actions = [I18n.of(context).delete, I18n.of(context).reply];
+
+ actionsFunc.add(() {
+ MessageMgr().emit('Delete Select Message', widget.msg);
+ });
+ actionsFunc.add(() {
+ print('发送引用的消息');
+ MessageMgr().emit('Reply Select Message', widget.msg);
+ });
+
+ if (widget.msg.msgType == ChatType.TextChatType.value) {
+ actions.insert(0, I18n.of(context).copy);
+ actionsFunc.insert(0, () {
+ //复制当前的文字
+ print('复制文字 ${textList[curTextType]}');
+ ClipboardData clipboardData =
+ ClipboardData(text: textList[curTextType]);
+ Clipboard.setData(clipboardData);
+ });
+ }
+ if (widget.msg.msgType == ChatType.ShortVoiceChatType.value) {
+ var soundPlayMode =
+ Provider.of(context).soundPlayMode;
+
+ actions.add(soundPlayMode
+ ? I18n.of(context).handset_playback
+ : I18n.of(context).speaker_play);
+ actionsFunc.add(() {
+ Provider.of(context)
+ .changeSoundPlayMode(!soundPlayMode);
+ SoundUtils.instance.savePlayModeConfig(soundPlayMode);
+ });
+ }
+
+ return WPopupMenu(
+ child: item,
+ actions: actions,
+ onLongPressStart: () {
+ isLongPressed = true;
+ setState(() {});
+ },
+ onLongPressEnd: () {
+ isLongPressed = false;
+ setState(() {});
+ },
+ onValueChanged: (int value) {
+ print('选择的是$value个菜单');
+ if (value >= 0 && value < actionsFunc.length) {
+ actionsFunc[value]();
+ }
+ },
+ );
+ }
+
+ Widget _getSentMessageLayout(BuildContext context) {
+ bool hasHeadImg = true;
+ if (UserData().basicInfo.headimgurl == null ||
+ UserData().basicInfo.headimgurl.length == 0) {
+ hasHeadImg = false;
+ }
+ return Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.end,
+ children: [
+ MsgStateWidget(widget.msg),
+ SizedBox(width: 3),
+ _msgLayout(context, widget.msg),
+ SizedBox(width: 10),
+ Column(
+ crossAxisAlignment: CrossAxisAlignment.end,
+ children: [
+ ClipRRect(
+ borderRadius: BorderRadius.circular(8),
+ child: hasHeadImg
+ ? CachedNetworkImage(
+ imageUrl: UserData().basicInfo.headimgurl,
+ width: 40,
+ height: 40,
+ )
+ : SizedBox(
+ width: 40,
+ height: 40,
+ child: Image.asset(R.assetsImagesDefaultNorAvatar))),
+ ],
+ )
+ ]);
+ }
+
+ _receiveJIF(MsgModel msg) {
+ var text = utf8.decode(msg.msgContent);
+
+ return Container(
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ child: extendedText(text,
+ selectionEnabled: false, hideKeyboard: widget.hideKeyboard));
+ }
+
+ double _getTextWidth(String text) {
+ var tp = TextPainter(
+ text: TextSpan(
+ style: TextStyle(fontSize: FontSize), text: textList[curTextType]),
+ textAlign: TextAlign.left,
+ textDirection: TextDirection.ltr,
+ textScaleFactor: 1,
+ );
+
+ tp.layout(maxWidth: Screen.width - 140);
+ if (text.contains('[')) {
+ if (text.length < 5 && text.startsWith('[') && text.endsWith(']')) {
+ ///单表情
+ return 25;
+ }
+
+ int length = text.split('[').length;
+ if (length > 1) {
+ ///包含表情
+ int scale = 6;
+
+ if (length > 6) scale = 7;
+
+ double width = tp.width + length * scale;
+ return width > (Screen.width - 140) ? Screen.width - 140 : width;
+ }
+ }
+ return tp.width;
+
+ ///单文字
+ }
+
+ _receiveText(MsgModel msg) {
+ List showMsg = [];
+ if (textList.length > 0) {
+ showMsg.add(Container(
+ constraints:
+ BoxConstraints(maxWidth: Screen.width - 140, minHeight: 22),
+ alignment: Alignment.centerLeft,
+ child: extendedText(
+ textList[curTextType],
+ color: Constants.BlackTextColor,
+ hideKeyboard: widget.hideKeyboard,
+ fontSize: FontSize,
+ )));
+ }
+
+ var width = _getTextWidth(textList[curTextType]);
+
+ var minWidth = width + 20;
+ if (msg.transTag != 0) {
+ minWidth = 200;
+ showMsg.add(Padding(
+ padding: EdgeInsets.symmetric(vertical: 5),
+ child: Divider(color: Color(0xFFECECEC), height: 1)));
+ Widget tranWidget = _transProcessWidget(msg.transTag);
+ showMsg.add(tranWidget);
+ }
+
+ Widget text = Container(
+ width: width + 20,
+ constraints:
+ BoxConstraints(maxWidth: Screen.width - 120, minWidth: minWidth),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start, children: showMsg),
+ decoration: BoxDecoration(
+ border: Border.all(color: ReciveBorderColor, width: 0.5),
+ color: isLongPressed ? Colors.grey[300] : Colors.white,
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ );
+
+ if (msg.refMsgContent != null && msg.refMsgContent.length > 0) {
+ QuoteMsg quoteMsg = QuoteMsg.fromBuffer(msg.refMsgContent);
+
+ return Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ text,
+ SizedBox(height: 2),
+ Container(
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ padding: EdgeInsets.symmetric(vertical: 1, horizontal: 3),
+ child: Text(
+ quoteMsg.content,
+ maxLines: 1,
+ textScaleFactor: 1.0,
+ overflow: TextOverflow.ellipsis,
+ style: TextStyle(fontSize: 12),
+ ),
+ decoration: BoxDecoration(
+ color: Colors.grey[300],
+ borderRadius: BorderRadius.circular(5)),
+ )
+ ],
+ );
+ } else {
+ return text;
+ }
+ }
+
+ //用户评价人工翻译,差评
+ rateTranslateResult() async {
+ return await HttpUtil().rateTranslateResult(widget.msg, () {
+ if (mounted) {
+ setState(() {});
+ }
+ });
+ }
+
+ _translateItemWidget(int code, String title, Function onTap) {
+ Color color = onTap == null ? Constants.GreyTextColor : Color(0xFF087FF3);
+ return InkWell(
+ onTap: onTap,
+ splashColor: Colors.red,
+ child: Container(
+ width: 80,
+ child: Row(
+ children: [
+ Icon(
+ IconData(code, fontFamily: Constants.IconFontFamily),
+ color: color,
+ size: 20,
+ ),
+ SizedBox(width: 5),
+ Expanded(
+ child: SizedBox(
+ child: Text(
+ title,
+ style: TextStyle(color: color, fontSize: 10),
+ textScaleFactor: 1.0,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ ),
+ ))
+ ],
+ )));
+ }
+
+ bool isTranslating = false;
+
+ _transProcessWidget(int transTag) {
+ double width = 160;
+
+ Widget userTranslateWidget;
+ Widget machineTranslateWidget;
+
+ if (transTag == 1) {
+ //机器翻译中
+ userTranslateWidget = _translateItemWidget(0xe670, '人工重译', null);
+
+ machineTranslateWidget =
+ _translateItemWidget(0xe671, I18n.of(context).robotTranslate, null);
+ } else if (transTag == 2) {
+ //人工翻译中
+ userTranslateWidget = _translateItemWidget(0xe670, '人工翻译中', null);
+ machineTranslateWidget = _translateItemWidget(
+ 0xe671,
+ '机器重译',
+ textList.length <= 1
+ ? null
+ : () {
+ setState(() {
+ curTextType += 1;
+ curTextType %= textList.length;
+ });
+ });
+ } else if (transTag == 3) {
+ //机器翻译完成
+ userTranslateWidget = _translateItemWidget(
+ 0xe670,
+ '人工重译',
+ isTranslating
+ ? null
+ : () async {
+ isTranslating = true;
+
+ int money =
+ Provider.of(context, listen: false)
+ .money;
+
+ int voucher =
+ Provider.of(context, listen: false)
+ .voucher;
+
+ int needMoney = widget.msg.getNeedMoney();
+
+ if (needMoney > voucher + money) {
+ showToast('翻译券和H币不足');
+ return;
+ }
+ var res = await HttpUtil().getPersonalTranslate(widget.msg);
+ if (res) {
+ print('请求人工翻译成功,进行扣费');
+ setState(() {
+ widget.msg.transTag = 2;
+
+ //优先扣券
+ if (voucher > 0) {
+ int costQuan = min(voucher, needMoney);
+ Provider.of(context,
+ listen: false)
+ .subVoucher(costQuan);
+ }
+
+ //不足的话再扣H币
+ if (needMoney > voucher) {
+ Provider.of(context, listen: false)
+ .subMoney(needMoney - voucher);
+ }
+ });
+ }
+ });
+ machineTranslateWidget = _translateItemWidget(
+ 0xe671,
+ '机器重译',
+ textList.length <= 1
+ ? null
+ : () {
+ setState(() {
+ curTextType += 1;
+ curTextType %= textList.length;
+ });
+ });
+ } else if (transTag == 4 || transTag == 10) {
+ //4人工翻译完成,未评论 10人工翻译完成已评论
+ userTranslateWidget = InkWell(
+ onTap: () {
+ setState(() {
+ curTextType = 0;
+ });
+ },
+ child: Container(
+ width: width / 2,
+ child: Row(
+ children: [
+ InkWell(
+ child: Icon(
+ IconData(0xe641, fontFamily: Constants.IconFontFamily),
+ size: 18,
+ color:
+ transTag == 10 ? Colors.grey : Color(0xFF087FF3)),
+ onTap: transTag == 10
+ ? null
+ : () {
+ CustomUI.showIosDialog(
+ context, I18n.of(context).bad_ev, () async {
+ bool isSuccess = await rateTranslateResult();
+ if (isSuccess) {
+ Navigator.of(context).pop(true);
+ showToast(I18n.of(context).success);
+ } else {
+ showToast(I18n.of(context).fail);
+ Navigator.of(context).pop();
+ }
+ }, () {
+ Navigator.of(context).pop();
+ });
+ },
+ ),
+ SizedBox(width: 5),
+ Expanded(
+ child: SizedBox(
+ child: Text(
+ I18n.of(context).over,
+ style: TextStyle(color: Color(0xFF087FF3), fontSize: 10),
+ textScaleFactor: 1.0,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ ),
+ ))
+ ],
+ )));
+ machineTranslateWidget = _translateItemWidget(0xe675, '查看原文', () {
+ setState(() {
+ curTextType = textList.length - 1;
+ });
+ });
+ }
+
+ return Container(
+ height: 26,
+ alignment: Alignment.center,
+ child: Row(
+ children: [
+ userTranslateWidget,
+ Expanded(
+ child: SizedBox(child: VerticalDivider(), height: 20, width: 2)),
+ machineTranslateWidget
+ ],
+ ),
+ );
+ }
+
+ _receiveImg(BuildContext context, List imgData, {String downloadData}) {
+ ImageProvider provider = MemoryImage(Uint8List.fromList(imgData));
+
+ var imgSize = _getImgSize();
+ return GestureDetector(
+ child: Container(
+ alignment: Alignment.centerLeft,
+ width: imgSize.width,
+ height: imgSize.height,
+ child: ClipRRect(
+ child: Image(
+ image: provider ?? AssetImage(R.assetsImagesIcAlbum),
+ ),
+ borderRadius: BorderRadius.circular(5),
+ )),
+ onTap: () async {
+ widget.hideKeyboard();
+ showFullImg(context, widget.msg);
+ });
+ }
+
+ _receiveVideo(BuildContext context, List imgData,
+ {String downloadData}) {
+ ImageProvider provider = MemoryImage(Uint8List.fromList(imgData));
+ var imgSize = _getImgSize();
+ return InkWell(
+ onTap: () {
+ if (widget.msg.localFile != null) {
+ widget.hideKeyboard();
+ showVideoPage(context, widget.msg.localFile);
+ }
+ },
+ child: DownloadItem(
+ isAutoDown: false,
+ msg: widget.msg,
+ child: Container(
+ width: imgSize.width,
+ height: imgSize.height,
+ child: ClipRRect(
+ child: Image(
+ image: provider ?? AssetImage(R.assetsImagesIcAlbum),
+ ),
+ borderRadius: BorderRadius.circular(5),
+ ),
+ ),
+ ));
+ }
+
+ showVideoPage(BuildContext context, String filePath) {
+ Navigator.push(context,
+ MaterialPageRoute(builder: (BuildContext context) {
+ return VideoPage(videoPath: filePath);
+ }));
+ }
+
+ _receiveSound(BuildContext context, List soundData) {
+ print(' build 收到的语音消息');
+
+ MsgModel msg = widget.msg;
+ var time = widget.msg.extraInfo / 1000;
+ if (time > 60) {
+ time = 60.0;
+ }
+ bool isPlaying = false;
+
+ if (curSoundUrl != null) {
+ isPlaying = SoundUtils().isPlaying(curSoundUrl);
+ }
+
+ var soundWidget = InkWell(
+ onTap: () async {
+ bool isLocal = true;
+
+ if (msg.localFile != null) {
+ isLocal = true;
+ curSoundUrl = msg.localFile;
+ } else {
+ isLocal = false;
+ var sessionId = msg.sessionId;
+ curSoundUrl = UploadUtil()
+ .getFullUrl(msg.extraFile, sessionId, msg.channelType);
+ }
+
+ print('当前文件$curSoundUrl 本地?$isLocal');
+ if (isPlaying) {
+ await SoundUtils().pause();
+ } else {
+ print('开始播放');
+ if (widget.msg.soundListened == 0) {
+ widget.msg.updateSoundListened();
+ }
+ await SoundUtils().play(curSoundUrl, isLocal: isLocal, onPlayed: () {
+ if (mounted) {
+ this.setState(() {});
+ }
+ }, complete: () {
+ if (mounted) {
+ this.setState(() {});
+ }
+ });
+ }
+ },
+ child: Container(
+ width: 130,
+ child: Row(children: [
+ Container(
+ alignment: Alignment.center,
+ padding: EdgeInsets.only(bottom: 2),
+ margin: EdgeInsets.only(right: 10),
+ width: 25.5,
+ height: 25.5,
+ decoration: BoxDecoration(
+ border:
+ Border.all(color: const Color(0xFF1B92C7), width: 0.5),
+ color: const Color(0xFF04A4FE),
+ shape: BoxShape.circle),
+ child: Icon(
+ IconData(isPlaying ? 0xe652 : 0xe653,
+ fontFamily: Constants.IconFontFamily),
+ size: isPlaying ? 15 : 18,
+ color: Colors.white,
+ ),
+ ),
+ isPlaying
+ ? Stack(
+ children: [
+ Container(
+ height: 18,
+ width: 19,
+ ),
+ Positioned(
+ bottom: 0,
+ child: VideoAnim(
+ begin: 18,
+ start: 0.444,
+ end: 4.5,
+ )),
+ Positioned(
+ left: 7,
+ bottom: 0,
+ child: VideoAnim(
+ begin: 4.5,
+ end: 18,
+ )),
+ Positioned(
+ left: 14,
+ bottom: 0,
+ child: VideoAnim(
+ begin: 18,
+ end: 4.5,
+ ))
+ ],
+ )
+ : Stack(
+ children: [
+ Container(
+ height: 18,
+ width: 19,
+ ),
+ Positioned(
+ bottom: 0, child: CustomUI.buildAudioContaniner(12)),
+ Positioned(
+ left: 7,
+ bottom: 0,
+ child: CustomUI.buildAudioContaniner(4.5)),
+ Positioned(
+ left: 14,
+ bottom: 0,
+ child: CustomUI.buildAudioContaniner(18))
+ ],
+ ),
+ Expanded(child: SizedBox()),
+ fixedText(time.toStringAsFixed(0),
+ color: Constants.BlackTextColor, fontSize: 16)
+ ])),
+ );
+
+ List showMsg = [];
+
+ showMsg.add(DownloadItem(
+ msg: widget.msg,
+ child: soundWidget,
+ isShowProgress: false,
+ ));
+
+ double width = 130;
+ double minWidth = 0;
+ if (textList.length > 0) {
+ width = _getTextWidth(textList[curTextType]) + 20;
+ width = min(width, Screen.width - 120);
+ minWidth = max(width, 150);
+
+ showMsg.add(Padding(
+ padding: EdgeInsets.symmetric(vertical: 5),
+ child: Divider(
+ height: 1,
+ )));
+ showMsg.add(Container(
+ child: extendedText(
+ textList[curTextType],
+ color: Constants.BlackTextColor,
+ hideKeyboard: widget.hideKeyboard,
+ fontSize: FontSize,
+ ),
+ alignment: Alignment.centerLeft,
+ constraints:
+ BoxConstraints(maxWidth: Screen.width - 120, minHeight: 22),
+ ));
+ }
+
+ if (msg.transTag != 0) {
+ minWidth = 200;
+ showMsg.add(Divider(color: Color(0xFFECECEC), height: 3));
+ Widget tranWidget = _transProcessWidget(msg.transTag);
+ showMsg.add(tranWidget);
+ }
+
+ return Container(
+ width: width + 20,
+ constraints:
+ msg.transTag != 0 ? BoxConstraints(minWidth: minWidth) : null,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start, children: showMsg),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ border: Border.all(color: ReciveBorderColor, width: 0.5),
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ );
+ }
+
+ void showFullImg(BuildContext context, MsgModel msg) {
+ print('显示图片');
+ Navigator.push(context,
+ MaterialPageRoute(builder: (BuildContext context) {
+ return PhotoPage(msg: msg);
+ }));
+ }
+
+ _reveiveMsg(BuildContext context) {
+ Widget item;
+ switch (ChatType.valueOf(widget.msg.msgType)) {
+ case ChatType.TextChatType:
+ item = _receiveText(widget.msg);
+ break;
+ case ChatType.EmoticonType:
+ item = _receiveJIF(widget.msg);
+ break;
+
+ case ChatType.ImageChatType:
+ if (widget.msg.extraFile != null) {
+ item = _receiveImg(context, widget.msg.msgContent,
+ downloadData: widget.msg.extraFile);
+ } else {
+ item = _receiveImg(context, widget.msg.msgContent);
+ }
+ break;
+ case ChatType.ShortVideoChatType:
+ item = _receiveVideo(context, widget.msg.msgContent,
+ downloadData: widget.msg.extraFile);
+ break;
+ case ChatType.ShortVoiceChatType:
+ item = _receiveSound(context, widget.msg.msgContent);
+ break;
+
+ case ChatType.PlaceChatType:
+ item = PlaceItem(isMe: false, placeContent: widget.msg.msgContent);
+ break;
+
+ case ChatType.FileChatType:
+ item = _receiveFileMsgItem();
+ break;
+ default:
+ }
+ return wrapItemWithMenu(item);
+ }
+
+ Widget _receiveFileMsgItem() {
+ return DownloadItem(
+ isAutoDown: false,
+ msg: widget.msg,
+ onComplete: () {
+ if (mounted) {
+ setState(() {});
+ }
+ },
+ child: Container(
+ height: 100,
+ constraints: BoxConstraints(maxWidth: Screen.width - 120),
+ padding: EdgeInsets.symmetric(horizontal: 9, vertical: 10.5),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ border: Border.all(color: ReciveBorderColor, width: 0.5),
+ borderRadius: BorderRadius.all(Radius.circular(ChatRadius))),
+ child: FileMsgItem(widget.msg)));
+ }
+
+ Widget _getReceivedMessageLayout(BuildContext context) {
+ bool hasHeadImg = true;
+ var memberModel = widget.memberModel;
+ if (memberModel == null) {
+ return Container();
+ }
+ if (memberModel.avtar == null || memberModel.avtar.length == 0) {
+ hasHeadImg = false;
+ }
+
+ GroupInfoModel infoModel = Provider.of(context);
+
+ var refName = Provider.of(context)
+ .getGroupRefName(infoModel.sessionId, memberModel.memberId);
+
+ bool isShowSoundSate =
+ widget.msg.msgType == ChatType.ShortVoiceChatType.value &&
+ widget.msg.soundListened == 0;
+
+ return Row(crossAxisAlignment: CrossAxisAlignment.start, children: [
+ Container(
+ margin: const EdgeInsets.only(right: 8.0),
+ child: GestureDetector(
+ child: ClipRRect(
+ borderRadius: BorderRadius.circular(8),
+ child: hasHeadImg
+ ? CachedNetworkImage(
+ imageUrl: memberModel.avtar,
+ width: 40,
+ height: 40,
+ )
+ : SizedBox(
+ width: 40,
+ height: 40,
+ child: Image.asset(R.assetsImagesDefaultNorAvatar))),
+ onTap: () {
+ AppNavigator.pushProfileInfoPage(context, memberModel.memberId,
+ fromWhere: 2,addMode: 1);
+ },
+ onLongPress: () {
+ print('long press user');
+ MessageMgr().emit('Alter User Message', memberModel);
+ },
+ )),
+ infoModel.isShowName > 0
+ ? Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ padding: EdgeInsets.only(left: 9),
+ child: fixedText(refName, fontSize: 12, color: Colors.grey),
+ ),
+ SizedBox(height: 2),
+ _reveiveMsg(context),
+ ],
+ )
+ : _reveiveMsg(context),
+ isShowSoundSate
+ ? Container(
+ margin: EdgeInsets.only(
+ left: 8, top: infoModel.isShowName > 0 ? 38 : 20),
+ child: CircleAvatar(
+ radius: 3.5,
+ backgroundColor: Colors.red,
+ ))
+ : Container()
+ ]);
+ }
+}
diff --git a/lib/chat/group_chat_view.dart b/lib/chat/group_chat_view.dart
new file mode 100644
index 0000000..64856ee
--- /dev/null
+++ b/lib/chat/group_chat_view.dart
@@ -0,0 +1,516 @@
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:chat/chat/group_chat_item.dart';
+import 'package:chat/data/UserData.dart';
+import 'package:chat/data/chat_data_mgr.dart';
+import 'package:chat/data/constants.dart';
+import 'package:chat/data/group_data_mgr.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/home/group_setting.dart';
+import 'package:chat/models/ChatMsg.dart';
+import 'package:chat/models/group_info_model.dart';
+import 'package:chat/models/keyboard_provider.dart';
+import 'package:chat/models/money_change.dart';
+import 'package:chat/models/voucher_change.dart';
+import 'package:chat/proto/all.pbserver.dart';
+import 'package:chat/utils/CustomUI.dart';
+import 'package:chat/utils/MessageMgr.dart';
+import 'package:chat/utils/analyze_utils.dart';
+import 'package:chat/utils/msgHandler.dart';
+import 'package:chat/utils/net_state_widget.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:chat/utils/sound_util.dart';
+import 'package:chat/utils/sp_utils.dart';
+import 'package:chat/utils/sql_util.dart';
+import 'package:extended_text/extended_text.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:oktoast/oktoast.dart';
+import 'package:provider/provider.dart';
+import '../r.dart';
+import 'input_bar.dart';
+import 'package:chat/models/ref_name_provider.dart';
+
+
+class GroupChatPage extends StatefulWidget {
+ final GroupInfoModel groupInfoModel;
+ final int enterType; // 0默认 1图片
+ final dynamic enterContent;
+ GroupChatPage(
+ {Key key, this.groupInfoModel, this.enterType = 0, this.enterContent})
+ : super(key: key);
+
+ _GroupChatPageState createState() => _GroupChatPageState();
+}
+
+class _GroupChatPageState extends State {
+ ScrollController _scrollCtrl = ScrollController();
+
+ MessageMgr msgMgr = MessageMgr();
+
+ List msgList;
+
+ KeyboardIndexProvider _keyboardIndexProvider = KeyboardIndexProvider();
+
+ TextEditingController nickNameController = new TextEditingController();
+
+ //统计聊天时长
+ int startTime;
+
+ //子元素的对应偏移量
+ Map itemOffsetMap = {};
+
+ @override
+ void dispose() {
+ var endTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
+ AnalyzeUtils.commitChatDuration(startTime, endTime);
+
+ msgMgr.off('New Chat Message', receiveMsg);
+ msgMgr.off('Keyboard Hide', dealWithKeyboardHide);
+ msgMgr.off('Update Group Info', updateGroupInfo);
+ msgMgr.off('Delete Select Message', _deleteItem);
+ MsgHandler.curActiveSession = 0;
+ SoundUtils().stop();
+ _scrollCtrl.dispose();
+
+ super.dispose();
+ }
+
+ @override
+ void initState() {
+ super.initState();
+ print('init group chat page ${widget.groupInfoModel.sessionId}');
+
+ getDefaultSetting();
+
+ startTime = DateTime.now().millisecondsSinceEpoch ~/ 1000;
+ MsgHandler.updateActiveSesstion(widget.groupInfoModel.sessionId,
+ isGroup: true);
+
+ msgList = ChatDataMgr().getGroupRecord();
+
+
+ for(int k=0;k 33 * 1024 * 1024) {
+ showToast('文件大于33M');
+ return;
+ }
+
+
+ var fileName = file.path.split('/').last;
+ print('fileName $fileName');
+
+ var ext = '';
+ var extList = fileName.split('.');
+ if (extList.length > 1) {
+ ext = extList.last;
+ }
+ print('ext $ext');
+
+ var fileMsg = FileChat.create();
+ fileMsg.type = ext;
+ fileMsg.size = fileSize;
+ fileMsg.name = fileName;
+
+ var msg = MsgHandler.createSendMsg(ChatType.FileChatType, fileMsg.writeToBuffer(),
+ friendId: 0,
+ localFile: file.path,
+ channelType:
+ ChatChannelType.Group);
+
+ sendMsg(msg);
+
+ }
+
+
+ updateGroupInfo(args) {
+ print('更新群信息');
+ if (mounted) {
+ setState(() {});
+ }
+ }
+
+ void getDefaultSetting() async {
+ bool soundPlayMode =
+ (await SPUtils.getBool(Constants.SOUND_PLAY_MODE)) ?? false;
+
+ _keyboardIndexProvider.init(soundPlayMode);
+ }
+
+ dealWithKeyboardHide(args) {
+ if (_keyboardIndexProvider.curKeyboardIndex == 0) {
+ readOnly();
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ List actions = [];
+ actions.add(Row(
+ children: [
+ CustomUI.buildImageLabel("assets/images/voucher.png",
+ Provider.of(context).voucher,
+ imgOpc: 0.5, imgHeight: 13),
+ CustomUI.buildImageLabel(
+ R.assetsImagesCoin, Provider.of(context).money,
+ isLeft: false)
+ ],
+ ));
+ actions.add(widget.groupInfoModel.isInGroup
+ ? IconButton(
+ icon: Icon(Icons.more_horiz),
+ iconSize: 22,
+ onPressed: () {
+ //进入群管理界面
+ hideKeyBoard();
+
+ Navigator.of(context).push(
+ new MaterialPageRoute(
+ builder: (context) {
+ return GroupSetting(
+ groupInfoModel: widget.groupInfoModel,
+ );
+ },
+ ),
+ );
+ },
+ )
+ : IconButton(
+ icon: Icon(Icons.delete),
+ iconSize: 22,
+ color: Colors.redAccent,
+ onPressed: () {
+ //进入群管理界面
+ quiteGroup();
+ },
+ ));
+
+ Map refMap = Provider.of(context).refMap;
+
+ return MultiProvider(
+ providers: [
+ ChangeNotifierProvider(create: (_) => _keyboardIndexProvider),
+ Provider.value(value: true),
+ Provider.value(value: widget.groupInfoModel),
+ ],
+ child: GestureDetector(
+ onTap: hideKeyBoard,
+ child: ExtendedTextSelectionPointerHandler(
+ ///选择文字,消除弹窗
+ builder: (states) {
+ return Listener(
+ child: Scaffold(
+ resizeToAvoidBottomInset: false,
+ backgroundColor: const Color(0xFFE2E9F1),
+ appBar: AppBar(
+ backgroundColor: AppColors.NewAppbarBgColor,
+ title: Text(
+ widget.groupInfoModel.getGroupName(refMap),
+ textScaleFactor: 1.0,
+ style: TextStyle(
+ color: Constants.BlackTextColor,
+ fontSize: 16.47),
+ ),
+ leading: CustomUI.buildCustomLeading(context),
+ titleSpacing: -10,
+ elevation: 1,
+ centerTitle: false,
+ actions: actions),
+ body: SafeArea(
+ child: Column(
+ children: [
+ NetStateWidget(),
+ Expanded(child: _buildMessageList()),
+ InputBar(sendMsg: sendMsg),
+ ],
+ ))),
+ behavior: HitTestBehavior.translucent,
+ onPointerDown: (value) {
+ for (var state in states) {
+ if (!state.containsPosition(value.position)) {
+ //clear other selection
+ state.clearSelection();
+ }
+ }
+ },
+ onPointerMove: (value) {
+ //clear other selection
+ for (var state in states) {
+ if (!state.containsPosition(value.position)) {
+ //clear other selection
+ state.clearSelection();
+ }
+ }
+ },
+ );
+ },
+ )));
+ }
+
+ //更新各个子元素的偏移位置
+ _updateMsgItemOffset() {
+ if (msgList.length == 0) {
+ return;
+ }
+
+ var myId = UserData().basicInfo.userId;
+ double offset = 0;
+ for (var i = 0; i < msgList.length; i++) {
+ MsgModel msg = msgList[i];
+
+ double itemHeight = 40;
+ switch (ChatType.valueOf(msg.msgType)) {
+ case ChatType.TextChatType:
+ if (msg.from == myId) {
+ var text = utf8.decode(msg.msgContent);
+ itemHeight = 21 + _getTextHeight(text);
+ } else {}
+ break;
+ case ChatType.ShortVoiceChatType:
+ if (msg.from == myId) {
+ itemHeight = 22.5 + 24;
+ } else {}
+ break;
+ case ChatType.ImageChatType:
+ itemHeight = _getImgHeight(msg);
+ break;
+ case ChatType.ShortVideoChatType:
+ itemHeight = _getImgHeight(msg);
+ break;
+ case ChatType.EmoticonType:
+ itemHeight = 40;
+ break;
+ case ChatType.RedWalletChatType:
+ print('红包消息');
+ itemHeight = 70;
+ break;
+ case ChatType.PlaceChatType:
+ itemHeight = 100 + 40.0;
+ break;
+ case ChatType.GroupChatNoticeType:
+ itemHeight = 40;
+ break;
+ case ChatType.GiftChatType:
+ itemHeight = 40;
+ break;
+ case ChatType.FileChatType:
+ itemHeight = 80;
+ break;
+ default:
+ }
+
+ itemOffsetMap[i] = offset;
+ offset += itemHeight;
+ }
+ }
+
+ double _getTextHeight(String text) {
+ var tp = TextPainter(
+ text: TextSpan(style: TextStyle(fontSize: 15), text: text),
+ textAlign: TextAlign.left,
+ textDirection: TextDirection.ltr,
+ textScaleFactor: 1,
+ );
+
+ tp.layout(maxWidth: Screen.width - 140);
+
+ return tp.height;
+ }
+
+ double _getImgHeight(MsgModel msg) {
+ double aspectRatio = msg.extraInfo / 100;
+
+ var maxWidth = Screen.width * 0.65;
+ var maxHeight = Screen.height / 4;
+
+ double height;
+ if (maxWidth / maxHeight > aspectRatio) {
+ height = maxHeight;
+ } else {
+ height = maxWidth / aspectRatio;
+ }
+
+ return height;
+ }
+
+ Widget _buildMessageList() {
+ return Container(
+ alignment: Alignment.topCenter,
+ child: msgList.length == 0
+ ? Padding(
+ padding: EdgeInsets.all(10),
+ child: Text(
+ I18n.of(context).chat_tips,
+ textAlign: TextAlign.center,
+ textScaleFactor: 1.0,
+ style: TextStyle(color: Colors.grey),
+ ))
+ : Scrollbar(child: ListView.builder(
+ reverse: true,
+ shrinkWrap: true,
+ itemCount: msgList.length,
+ controller: _scrollCtrl,
+ padding: EdgeInsets.all(8.0),
+ itemBuilder: _buildItem,
+ )),
+ );
+ }
+
+ hideKeyBoard() {
+ _keyboardIndexProvider.changeSelectIndex(-1);
+ }
+
+ readOnly() {
+ _keyboardIndexProvider.changeReadOnlyKey(true);
+ }
+
+ sendMsg(MsgModel msg) {
+ if (!widget.groupInfoModel.isInGroup) {
+ //如果不在该群
+ showToast(I18n.of(context).not_in_group);
+ return;
+ }
+
+ MsgHandler.insertMsgToDB(msg);
+ MsgHandler.sendChatMsg(msg);
+ if (mounted) {
+ setState(() {});
+ }
+
+ if (_scrollCtrl.hasClients) {
+ _scrollCtrl.animateTo(0,
+ duration: new Duration(milliseconds: 500), curve: Curves.ease);
+ }
+ }
+
+ void receiveMsg(args) {
+ if (args != widget.groupInfoModel.sessionId) {
+ return;
+ }
+ if (mounted) {
+ setState(() {});
+ if (_scrollCtrl.hasClients) {
+ _scrollCtrl.animateTo(0,
+ duration: new Duration(milliseconds: 500), curve: Curves.ease);
+ }
+ }
+ }
+
+ _deleteItem(msg) {
+ MessageMgr().emit('Cancel Request', msg);
+ print('#### 开始删除--');
+ msgList.remove(msg);
+ setState(() {});
+ SqlUtil().deleteSigleRecordWith(msg.sessionId, msg.time);
+ }
+
+ Widget _buildItem(BuildContext context, int index) {
+ var lastMsgTime;
+ if (index < msgList.length - 1) {
+ lastMsgTime = msgList[index + 1].time;
+ }
+
+ MsgModel msg = msgList[index];
+
+ if (msg.from == 0) {
+ return GroupChatPageItem(
+ key: Key(msg.time.toString()), msg: msg, lastMsgTime: lastMsgTime);
+ } else {
+ return GroupChatPageItem(
+ key: Key(msg.time.toString()),
+ msg: msg,
+ memberModel: widget.groupInfoModel.getMember(msg.from),
+ hideKeyboard: readOnly,
+ lastMsgTime: lastMsgTime);
+ }
+ }
+
+ quiteGroup() {
+ var function = () {
+ GroupInfoMgr().deleteGroup(widget.groupInfoModel.sessionId);
+ MessageMgr().emit('Quit Group', widget.groupInfoModel.sessionId);
+ Navigator.of(context).popUntil(ModalRoute.withName('/main'));
+ MsgHandler.quitGroup(widget.groupInfoModel.sessionId);
+ };
+
+ showModalBottomSheet(
+ context: context,
+ backgroundColor: Colors.transparent,
+ builder: (BuildContext context) {
+ return Container(
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.only(
+ topLeft: Radius.circular(13), topRight: Radius.circular(13))),
+ height: 225,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ Padding(
+ padding: EdgeInsets.fromLTRB(15, 15, 15, 13),
+ child: Text(
+ I18n.of(context).quit_group_tips,
+ style: TextStyle(fontSize: 12, color: Color(0xff777777)),
+ ),
+ ),
+ Divider(
+ color: Color(0xffE5E5E5),
+ ),
+ InkWell(
+ onTap: function,
+ child: Container(
+ height: 60,
+ alignment: Alignment.center,
+ child: Text(I18n.of(context).determine,
+ style: TextStyle(
+ fontSize: 18, color: Constants.ConfrimButtonColor)),
+ ),
+ ),
+ Container(
+ color: Color(0xffF2F2F2),
+ height: 4,
+ ),
+ InkWell(
+ onTap: () {
+ Navigator.of(context).pop();
+ },
+ child: Container(
+ height: 60,
+ alignment: Alignment.center,
+ child: Text(I18n.of(context).cancel,
+ style: TextStyle(fontSize: 18, color: Color(0xff4B4B4B))),
+ ),
+ )
+ ],
+ ),
+ );
+ },
+ );
+ }
+}
diff --git a/lib/chat/input_bar.dart b/lib/chat/input_bar.dart
new file mode 100644
index 0000000..5790394
--- /dev/null
+++ b/lib/chat/input_bar.dart
@@ -0,0 +1,895 @@
+import 'dart:convert';
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:chat/chat/keyboard_icon.dart';
+import 'package:chat/chat/my_extended_text_selection_controls.dart';
+import 'package:chat/chat/record_view.dart';
+import 'package:chat/chat/util_keyboard.dart';
+import 'package:chat/data/UserData.dart';
+import 'package:chat/data/constants.dart';
+import 'package:chat/generated/i18n.dart';
+import 'package:chat/home/alter_select_view.dart';
+import 'package:chat/models/ChatMsg.dart';
+import 'package:chat/models/group_info_model.dart';
+import 'package:chat/models/keyboard_provider.dart';
+import 'package:chat/photo/entity/options.dart';
+import 'package:chat/photo/photo.dart';
+import 'package:chat/proto/all.pbserver.dart';
+import 'package:chat/utils/CustomUI.dart';
+import 'package:chat/utils/MessageMgr.dart';
+import 'package:chat/utils/group_member_model.dart';
+import 'package:chat/utils/image_util.dart';
+import 'package:chat/utils/keyboard_utils.dart';
+import 'package:chat/utils/msgHandler.dart';
+import 'package:chat/utils/screen.dart';
+import 'package:chat/utils/sound_util.dart';
+import 'package:extended_text_field/extended_text_field.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:oktoast/oktoast.dart';
+import 'package:photo_manager/photo_manager.dart';
+import 'package:provider/provider.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+
+import 'emoji_gif_text.dart';
+import 'emoji_text.dart';
+import 'my_special_text_span_builder.dart';
+
+class InputBar extends StatefulWidget {
+ final Function sendMsg;
+
+ InputBar({this.sendMsg});
+
+ @override
+ InputBarState createState() => InputBarState();
+}
+
+class InputBarState extends State
+ with SingleTickerProviderStateMixin {
+ final TextEditingController _textCtrl = TextEditingController();
+ FocusNode editFocus = NoKeyboardEditableTextFocusNode();
+ bool _isComposingMessage = false;
+
+ PageController pageController;
+
+ double keyboardHeight;
+ KeyboardBloc _bloc = KeyboardBloc();
+ GlobalKey _key = GlobalKey();
+
+ int currentStickersPage = 0;
+
+ //回复相关
+ MsgModel refMsg;
+
+ //@成员数组
+ List alterMemberList = [];
+
+ int lastTxtLen = 0;
+
+ @override
+ void initState() {
+ super.initState();
+
+ print('~~~~~~~~~~inputbar initState~~~~~~~~~~~');
+ pageController = new PageController();
+ getKeyboardHeight();
+ _bloc.start();
+
+ //处理引用事件
+ MessageMgr().on('Reply Select Message', replySelectMsg);
+
+ //处理@事件
+ MessageMgr().on('Alter User Message', alterOtherMember);
+ }
+
+ @override
+ void didChangeDependencies() {
+ super.didChangeDependencies();
+ editFocus?.requestFocus();
+ }
+
+ //获取键盘高度,之前保存的
+ getKeyboardHeight() async {
+ var sp = await SharedPreferences.getInstance();
+ keyboardHeight = sp.getDouble(Constants.KeyboardHeight);
+
+ if (keyboardHeight == null || keyboardHeight < 100) {
+ keyboardHeight = 280;
+ }
+ }
+
+ @override
+ void dispose() {
+ _key = null;
+
+ _textCtrl.dispose();
+ _bloc.dispose();
+ editFocus.dispose();
+ editFocus = null;
+ MessageMgr().off('Reply Select Message', replySelectMsg);
+ MessageMgr().off('Alter User Message', alterOtherMember);
+ super.dispose();
+ }
+
+ //引用某句话
+ replySelectMsg(args) async {
+ refMsg = args;
+ print('处理引用消息');
+
+ setState(() {
+ showKeyBoard();
+ });
+ }
+
+ //快捷@某成员
+ alterOtherMember(memberInfo) {
+ if (!alterMemberList.contains(memberInfo)) {
+ alterMemberList.add(memberInfo);
+ }
+
+ print('选中的成员~~~~~~~~~~~~ ${memberInfo.refName}');
+ String textStr;
+ if (_textCtrl.text.length > 0) {
+ textStr = '${_textCtrl.text} @${memberInfo.refName} ';
+ } else {
+ textStr = '@${memberInfo.refName} ';
+ }
+
+ _textCtrl.value = TextEditingValue(
+ text: textStr,
+ selection:
+ TextSelection.fromPosition(TextPosition(offset: textStr.length)));
+
+ setState(() {
+ showKeyBoard();
+ _isComposingMessage = _textCtrl.text.length > 0;
+ });
+ }
+
+ //显示键盘
+ showKeyBoard() {
+ Provider.of(context, listen: false)
+ .changeSelectIndex(0);
+ editFocus.requestFocus();
+ Provider.of(context, listen: false)
+ .changeReadOnlyKey(false);
+ // SystemChannels.textInput.invokeMethod('TextInput.show');
+ }
+
+ _getRefShortText() {
+ if (refMsg == null) {
+ return null;
+ }
+ String desc = '';
+
+ if (refMsg == null || refMsg.msgType == null) {
+ return '';
+ }
+
+ switch (ChatType.valueOf(refMsg.msgType)) {
+ case ChatType.TextChatType:
+ desc = utf8.decode(refMsg.msgContent);
+ break;
+ case ChatType.EmoticonType:
+ desc = '[${I18n.of(context).emoji}]';
+ break;
+ case ChatType.ImageChatType:
+ desc = '[${I18n.of(context).picture}]';
+ break;
+ case ChatType.ShortVideoChatType:
+ desc = '[${I18n.of(context).video}]';
+ break;
+ case ChatType.PlaceChatType:
+ desc = '[${I18n.of(context).locate}]';
+ break;
+ case ChatType.ShortVoiceChatType:
+ desc = '[${I18n.of(context).voice}]';
+ break;
+
+ case ChatType.GiftChatType:
+ GiftChat giftChat = GiftChat.fromBuffer(refMsg.msgContent);
+
+ if (giftChat.tuId == UserData().basicInfo.userId) {
+ desc = I18n.of(context).you_get;
+ } else {
+ desc = I18n.of(context).you_give;
+ }
+
+ break;
+
+ case ChatType.RedWalletChatType:
+ desc = '[${I18n.of(context).red_money}]';
+ break;
+
+ case ChatType.GroupChatNoticeType:
+ desc = '[${I18n.of(context).msg_notice}]';
+
+ break;
+
+ case ChatType.FileChatType:
+ desc = '[文件]';
+
+ break;
+ default:
+ }
+
+ GroupInfoModel groupInfoModel = Provider.of(context);
+ var member = groupInfoModel.getMember(refMsg.from);
+
+ return '${member.refName}: $desc';
+ }
+
+ bool isReceiver = false;
+
+ @override
+ Widget build(BuildContext context) {
+ int curKeyboardIndex =
+ Provider.of(context).curKeyboardIndex;
+ bool readOnly =
+ Provider.of(context, listen: false).readOnly;
+
+ bool isGroup = Provider.of(context);
+
+ Widget centerWidget;
+
+ Widget input = Container(
+ child: ExtendedTextField(
+ textSelectionControls: MyExtendedMaterialTextSelectionControls(),
+ keyboardAppearance: Brightness.light,
+ onChanged: (String messageText) {
+ if (_textCtrl.text.length > 0) {
+ var last = messageText.substring(_textCtrl.text.length - 1);
+
+ if (last == '@' && _textCtrl.text.length > lastTxtLen) {
+ editFocus.unfocus();
+ _openAlterSelectPage();
+ }
+ }
+ lastTxtLen = _textCtrl.text.length;
+
+ setState(() {
+ _isComposingMessage = _textCtrl.text.length > 0;
+ });
+ },
+ key: _key,
+ readOnly: readOnly,
+ autofocus: true,
+ cursorColor: Constants.BlueTextColor,
+ style: TextStyle(
+ fontSize: ScreenUtil().setSp(16),
+ textBaseline: TextBaseline.alphabetic),
+ maxLines: 3,
+ minLines: 1,
+ specialTextSpanBuilder: MySpecialTextSpanBuilder(
+ showAtBackground: true,
+ ),
+ controller: _textCtrl,
+ textInputAction: TextInputAction.newline,
+ inputFormatters: [
+ LengthLimitingTextInputFormatter(600) //限制长度
+ ],
+ onSubmitted: _textMessageSubmitted,
+ focusNode: editFocus,
+ onTap: () {
+ showKeyBoard();
+ Provider.of(context, listen: false)
+ .changeReadOnlyKey(false);
+ },
+ decoration: InputDecoration(
+ hintText: I18n.of(context).input_content,
+ hintStyle: TextStyle(color: const Color(0xffBDBDBD), fontSize: 16),
+ border: null,
+ hintMaxLines: 1,
+ contentPadding: EdgeInsets.only(left: 5, right: 5, top: 8, bottom: 8),
+ ),
+ ),
+ );
+ if (refMsg == null) {
+ centerWidget = input;
+ } else {
+ var desc = _getRefShortText();
+ centerWidget = Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ child: Row(mainAxisSize: MainAxisSize.min, children: [
+ Container(
+ child: Text(
+ desc,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ textScaleFactor: 1.0,
+ ),
+ constraints: BoxConstraints(maxWidth: Screen.width - 220),
+ ),
+ InkWell(
+ child: Container(
+ child: Icon(Icons.close, size: 10),
+ padding: EdgeInsets.fromLTRB(10, 5, 5, 5),
+ ),
+ onTap: () {
+ refMsg = null;
+ setState(() {});
+ },
+ )
+ ]),
+ padding: EdgeInsets.symmetric(horizontal: 10, vertical: 2),
+ decoration: BoxDecoration(
+ color: Colors.grey[200],
+ border: Border.all(color: Colors.grey),
+ borderRadius: BorderRadius.circular(10))),
+ input
+ ],
+ );
+ }
+ return GestureDetector(
+ onTap: () {
+ print('放置触控隐藏键盘');
+ },
+ child: Container(
+ width: Screen.width,
+ color: Colors.white,
+ child: Column(
+ children: [
+ Container(
+ padding: EdgeInsets.symmetric(horizontal: 7, vertical: 7),
+ alignment: Alignment.topCenter,
+ decoration: BoxDecoration(
+ color: Colors.white,
+ border: Border(top: BorderSide(color: Color(0xFFDFDFDF)))),
+ child: Row(
+ children: [
+ //emoji图标
+ KeyboardIcon(
+ iconCode: 0xe64d,
+ selectIconCode: 0xe651,
+ isSelect: curKeyboardIndex == 1,
+ size: 27,
+ onTap: () {
+ isReceiver = !isReceiver;
+ SoundUtils.instance.setReceiver(isReceiver);
+//
+ if (curKeyboardIndex == 1) {
+ Provider.of(context,
+ listen: false)
+ .changeReadOnlyKey(false);
+ showKeyBoard();
+ } else {
+ Provider.of(context,
+ listen: false)
+ .changeSelectIndex(1);
+
+ currentStickersPage = 0;
+ }
+ }),
+
+ SizedBox(width: 10),
+
+ //输入框
+ Expanded(child: centerWidget), SizedBox(width: 10),
+ _isComposingMessage
+ ? InkWell(
+ child: Padding(
+ padding: EdgeInsets.fromLTRB(50, 2, 10, 2),
+ child: Icon(
+ Icons.send,
+ color: Color(0xFF087FF3),
+ size: 28,
+ )),
+ onTap: _sendTextMessage)
+ : Container(
+ child: Row(
+ children: [
+ KeyboardIcon(
+ iconCode: 0xe64b,
+ isSelect: curKeyboardIndex == 2,
+ size: 28,
+ onTap: () {
+ if (curKeyboardIndex == 2) {
+ showKeyBoard();
+ } else {
+ Provider.of(
+ context,
+ listen: false)
+ .changeSelectIndex(2);
+ }
+ }),
+ SizedBox(width: 10),
+ KeyboardIcon(
+ iconCode: 0xe64f,
+ isSelect: curKeyboardIndex == 3,
+ size: 28,
+ onTap: () {
+ if (curKeyboardIndex == 3) {
+ showKeyBoard();
+ } else {
+ Provider.of(
+ context,
+ listen: false)
+ .changeSelectIndex(3);
+ }
+ }),
+ SizedBox(width: 10),
+ KeyboardIcon(
+ iconCode: 0xe60c,
+ isSelect: curKeyboardIndex == 4,
+ size: 26,
+ onTap: () {
+ _openPhotoView();
+ }),
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ Divider(height: 1, color: const Color(0xffE0E0E0)),
+ StreamBuilder(
+ stream: _bloc.stream,
+ builder: (BuildContext context, AsyncSnapshot snapshot) {
+ double keyHeight = MediaQuery.of(context).viewInsets.bottom;
+ if (keyHeight > 10) {
+ keyboardHeight = keyHeight;
+ UserData().setKeyboardHeight(keyHeight);
+ }
+ return Container(
+ width: double.infinity,
+ color: Colors.white,
+ height: curKeyboardIndex == -1 || curKeyboardIndex == 4
+ ? 0
+ : keyboardHeight,
+ child: curKeyboardIndex >= 1 && curKeyboardIndex < 4
+ ? IndexedStack(
+ children: [
+ Container(
+ color: Colors.white,
+ width: double.infinity,
+ height: double.infinity,
+ child: InkWell(
+ onTap: () {},
+ child: Container(
+ height: keyboardHeight,
+ child: Column(
+ children: [
+ Container(
+ height: keyboardHeight - 50,
+ child: PageView.custom(
+ controller: pageController,
+ onPageChanged: (page) {
+ setState(() {
+ currentStickersPage =
+ page;
+ });
+ },
+ childrenDelegate:
+ new SliverChildBuilderDelegate(
+ (context, index) {
+ return index == 0
+ ? buildEmojiGird()
+ : buildGifGird();
+ },
+ childCount: 2,
+ )),
+ ),
+ Divider(
+ height: 1,
+ color: Color(0xffE0E0E0),
+ ),
+ Container(
+ height: 49,
+ child: Row(
+ children: [
+ InkWell(
+ child: Container(
+ width: 59,
+ padding:
+ EdgeInsets.all(10),
+ color:
+ currentStickersPage ==
+ 0
+ ? const Color(
+ 0xFFEDEDED)
+ : Colors.white,
+ child: Image.asset(
+ 'assets/images/chat/emoji.png'),
+ ),
+ onTap: () {
+ pageController
+ .jumpToPage(0);
+ },
+ ),
+ InkWell(
+ child: Container(
+ padding:
+ EdgeInsets.all(8),
+ width: 59,
+ color:
+ currentStickersPage ==
+ 1
+ ? const Color(
+ 0xFFEDEDED)
+ : Colors.white,
+ child: Image.asset(
+ 'assets/images/chat/onion.png'),
+ ),
+ onTap: () {
+ pageController
+ .jumpToPage(1);
+ },
+ )
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ )),
+ UtilKeyboard(
+ keyboardHeight: keyboardHeight,
+ isGroup: isGroup,
+ sendMsg: widget.sendMsg),
+ RecordView(
+ keyboardHeight: keyboardHeight,
+ sendMsg: _sendSoundMsg),
+ ],
+ index: curKeyboardIndex - 1,
+ )
+ : Container());
+ },
+ )
+ ],
+ )),
+ );
+ }
+
+ Widget buildEmojiGird() {
+ return Container(
+ height: keyboardHeight,
+ child: Stack(
+ children: [
+ Padding(
+ padding: EdgeInsets.fromLTRB(5, 8, 50, 0),
+ child: GridView.builder(
+ controller: new ScrollController(keepScrollOffset: false),
+ gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
+ crossAxisCount: 7, crossAxisSpacing: 0, mainAxisSpacing: 0),
+ itemBuilder: (context, index) {
+ return GestureDetector(
+ child: Container(
+ padding: EdgeInsets.all(7),
+ child: Image.asset(EmojiUitl
+ .instance.emojiMap[EmojiText.flag + "${index + 1}]"]),
+ ),
+ behavior: HitTestBehavior.translucent,
+ onTap: () {
+ insertText(EmojiText.flag + "${index + 1}]", _textCtrl);
+
+ setState(() {
+ _isComposingMessage = _textCtrl.text.length > 0;
+ });
+ },
+ );
+ },
+ itemCount: EmojiUitl.instance.emojiMap.length,
+ padding: EdgeInsets.all(5.0),
+ ),
+ ),
+ Positioned.fill(
+ child: Container(
+ padding: EdgeInsets.fromLTRB(0, 0, 0, 14),
+ alignment: Alignment(1, 1),
+ child: InkWell(
+ onTap: () {
+ deleteText(_textCtrl);
+
+ setState(() {
+ _isComposingMessage = _textCtrl.text.length > 0;
+ });
+ },
+ child: Container(
+ decoration: BoxDecoration(
+ color: Color(0x4d0E0E10),
+ borderRadius: BorderRadius.only(
+ topLeft: Radius.circular(4.0),
+ bottomLeft: Radius.circular(4))),
+ width: 37,
+ height: 28,
+ child: Icon(
+ IconData(
+ 0xe679,
+ fontFamily: 'iconfont',
+ ),
+ size: 16,
+ color: Colors.white,
+ ),
+ ),
+ ),
+ )),
+ ],
+ ),
+ );
+ }
+
+ Widget buildGifGird() {
+ return Container(
+ padding: EdgeInsets.fromLTRB(8, 6, 8, 0),
+ height: keyboardHeight,
+ child: GridView.builder(
+ gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
+ crossAxisCount: 5, crossAxisSpacing: 12.0, mainAxisSpacing: 12.0),
+ itemBuilder: (context, index) {
+ return GestureDetector(
+ child: Image.asset(EmojiGifUitl
+ .instance.emojiMap[EmojiGifText.flag + "_${index + 1}>"]),
+ behavior: HitTestBehavior.translucent,
+ onTap: () {
+ _sendMessage(EmojiGifText.flag + "_${index + 1}>", true);
+ },
+ );
+ },
+ itemCount: EmojiGifUitl.instance.emojiMap.length,
+ padding: EdgeInsets.all(5.0),
+ ),
+ );
+ }
+
+ void _openAlterSelectPage() async {
+ bool isGroup = Provider.of(context);
+
+ if (isGroup) {
+ GroupInfoModel groupInfoModel = Provider.of(context);
+
+ editFocus.unfocus();
+ Provider.of(context, listen: false)
+ .changeReadOnlyKey(true);
+
+ GroupMemberModel member =
+ await AlterSelectPage.pickAlterUser(context, groupInfoModel);
+
+ if (member != null) {
+ print('选中的成员~~~~~~~~~~~~ ${member.refName}');
+ _textCtrl.text = '${_textCtrl.text}${member.refName} ';
+ alterMemberList.add(member);
+ }
+
+ editFocus.requestFocus();
+ Provider.of(context, listen: false)
+ .changeReadOnlyKey(false);
+ }
+ }
+
+ List getAlterUsers(String messageText) {
+ List alterUserList = [];
+ RegExp alterStr = RegExp(r'@+(\S+)');
+ Iterable