Explorar o código

feat: 多语言文案

XiaodongLin hai 1 ano
pai
achega
9698e81d83
Modificáronse 45 ficheiros con 447 adicións e 103 borrados
  1. 9 3
      app/src/main/java/com/adealink/weparty/module/userlist/HomeUserListFragment.kt
  2. 5 5
      app/src/main/res/layout/dialog_user_filter.xml
  3. 5 0
      app/src/main/res/values-ar/strings.xml
  4. 5 0
      app/src/main/res/values-zh/strings.xml
  5. 7 0
      app/src/main/res/values/strings.xml
  6. 4 3
      module/account/src/main/java/com/adealink/weparty/account/login/phone/PhoneInputActivity.kt
  7. 3 3
      module/account/src/main/java/com/adealink/weparty/account/register/GenderSelectFragment.kt
  8. 4 4
      module/account/src/main/java/com/adealink/weparty/account/setting/AccountSettingActivity.kt
  9. 1 1
      module/account/src/main/res/layout/fragment_gender_select.xml
  10. 50 3
      module/account/src/main/res/values-ar/strings.xml
  11. 47 3
      module/account/src/main/res/values-zh/strings.xml
  12. 7 7
      module/account/src/main/res/values/strings.xml
  13. 4 4
      module/profile/src/main/java/com/adealink/weparty/profile/audioauth/VoiceAuthActivity.kt
  14. 2 1
      module/profile/src/main/java/com/adealink/weparty/profile/edit/EditNickNameActivity.kt
  15. 5 3
      module/profile/src/main/java/com/adealink/weparty/profile/edit/viewcomp/BasicDataViewComponent.kt
  16. 10 10
      module/profile/src/main/java/com/adealink/weparty/profile/edit/viewcomp/MoreInformationViewComponent.kt
  17. 3 2
      module/profile/src/main/java/com/adealink/weparty/profile/edit/viewcomp/PersonalProfileViewComponent.kt
  18. 3 3
      module/profile/src/main/java/com/adealink/weparty/profile/photoselect/UserPhotoSelectActivity.kt
  19. 6 4
      module/profile/src/main/java/com/adealink/weparty/profile/userprofile/ProfileTab.kt
  20. 9 6
      module/profile/src/main/java/com/adealink/weparty/profile/userprofile/view/ProfileAboutMeViewBinder.kt
  21. 1 1
      module/profile/src/main/res/layout/activity_edit_nick_name.xml
  22. 1 1
      module/profile/src/main/res/layout/activity_edit_person_profile.xml
  23. 1 1
      module/profile/src/main/res/layout/activity_profile_voice_auth.xml
  24. 2 2
      module/profile/src/main/res/layout/item_profile_about_me.xml
  25. 1 1
      module/profile/src/main/res/layout/item_profile_privacy_ablum_list.xml
  26. 1 1
      module/profile/src/main/res/layout/item_profile_user_in_room.xml
  27. 1 1
      module/profile/src/main/res/layout/item_user_photo_select.xml
  28. 2 2
      module/profile/src/main/res/layout/layout_complete_state_layout.xml
  29. 13 13
      module/profile/src/main/res/layout/layout_edit_profile_basic_data.xml
  30. 5 5
      module/profile/src/main/res/layout/layout_edit_profile_more_information.xml
  31. 1 1
      module/profile/src/main/res/layout/layout_edit_profile_personal_profile.xml
  32. 1 1
      module/profile/src/main/res/layout/layout_edit_profile_top_layout.xml
  33. 1 1
      module/profile/src/main/res/layout/layout_guide_upload_picture.xml
  34. 2 2
      module/profile/src/main/res/layout/layout_has_record_state_layout.xml
  35. 2 2
      module/profile/src/main/res/layout/layout_init_state_layout.xml
  36. 1 1
      module/profile/src/main/res/layout/layout_recording_state_layout.xml
  37. 102 0
      module/profile/src/main/res/layout/layout_user_profile_basic.xml
  38. 38 0
      module/profile/src/main/res/values-ar/strings.xml
  39. 38 0
      module/profile/src/main/res/values-zh/strings.xml
  40. 36 0
      module/profile/src/main/res/values/strings.xml
  41. 4 1
      module/userprotect/src/main/java/com/adealink/weparty/userprotect/manager/ReportManager.kt
  42. 1 0
      module/userprotect/src/main/res/values-ar/strings.xml
  43. 1 0
      module/userprotect/src/main/res/values-zh/strings.xml
  44. 1 0
      module/userprotect/src/main/res/values/strings.xml
  45. 1 1
      tool/translate/synxml.py

+ 9 - 3
app/src/main/java/com/adealink/weparty/module/userlist/HomeUserListFragment.kt

@@ -3,6 +3,7 @@ package com.adealink.weparty.module.userlist
 import androidx.core.view.updateLayoutParams
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.base.fastLazy
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.router.annotation.RouterUri
@@ -10,7 +11,6 @@ import com.adealink.frame.util.DisplayUtil
 import com.adealink.frame.util.onClick
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.BaseFragment
-import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.recycleview.adapter.BaseTabFragmentStateAdapter
 import com.adealink.weparty.commonui.widget.EmptyFragment
 import com.adealink.weparty.databinding.FragmentHomeUserListBinding
@@ -31,8 +31,14 @@ class HomeUserListFragment : BaseFragment(R.layout.fragment_home_user_list) {
     private val homeUserListViewModel by activityViewModels<HomeUserListViewModel>()
     private val tabList by fastLazy {
         listOf(
-            HomeUserTab(HomeUserTabType.NewUsers, "New") { HomeNewUserListFragment() },
-            HomeUserTab(HomeUserTabType.Online, "Online") { HomeOnLineUserListFragment() }
+            HomeUserTab(
+                HomeUserTabType.NewUsers,
+                getCompatString(R.string.common_new)
+            ) { HomeNewUserListFragment() },
+            HomeUserTab(
+                HomeUserTabType.Online,
+                getCompatString(R.string.profile_user_online)
+            ) { HomeOnLineUserListFragment() }
         )
     }
 

+ 5 - 5
app/src/main/res/layout/dialog_user_filter.xml

@@ -10,7 +10,7 @@
         android:layout_width="wrap_content"
         android:layout_height="48dp"
         android:gravity="center_vertical"
-        android:text="Select"
+        android:text="@string/home_user_filter_select"
         android:textColor="@color/color_222222"
         android:textSize="16sp"
         app:layout_constraintEnd_toEndOf="parent"
@@ -35,7 +35,7 @@
         android:layout_height="40dp"
         android:layout_marginHorizontal="16dp"
         android:gravity="center_vertical"
-        android:text="Want to see the user"
+        android:text="@string/home_user_filter_select_tips"
         android:textColor="@color/color_222222"
         android:textSize="15sp"
         app:layout_constraintTop_toBottomOf="@+id/tv_title" />
@@ -70,7 +70,7 @@
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
                 android:layout_marginStart="4dp"
-                android:text="Male" />
+                android:text="@string/common_male" />
 
         </androidx.appcompat.widget.LinearLayoutCompat>
 
@@ -94,7 +94,7 @@
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
                 android:layout_marginStart="4dp"
-                android:text="FeMale" />
+                android:text="@string/common_female" />
 
         </androidx.appcompat.widget.LinearLayoutCompat>
 
@@ -108,7 +108,7 @@
         android:layout_marginStart="16dp"
         android:layout_marginTop="12dp"
         android:gravity="center_vertical"
-        android:text="Age"
+        android:text="@string/home_user_filter_age"
         android:textColor="@color/color_222222"
         android:textSize="15sp"
         app:layout_constraintStart_toStartOf="parent"

+ 5 - 0
app/src/main/res/values-ar/strings.xml

@@ -597,4 +597,9 @@
     <string name="message_gift_from_others">صديق يقدم لك هدية</string>
     <string name="message_gift_from_self">لقد قدمت لصديقك هدية</string>
     <string name="commonui_no_message">لا يوجد رسالة</string>
+    <string name="common_place_of_birth">مكان الميلاد</string>
+    <string name="common_current_residence">مكان الإقامة الحالي</string>
+    <string name="home_user_filter_select_tips">أريد رؤية المستخدم</string>
+    <string name="home_user_filter_select">يختار</string>
+    <string name="home_user_filter_age">عمر</string>
 </resources>

+ 5 - 0
app/src/main/res/values-zh/strings.xml

@@ -596,4 +596,9 @@
     <string name="message_gift_from_others">朋友送你一份礼物</string>
     <string name="message_gift_from_self">你给朋友送了一份礼物</string>
     <string name="commonui_no_message">没有消息</string>
+    <string name="common_place_of_birth">出生地</string>
+    <string name="common_current_residence">现居住地</string>
+    <string name="home_user_filter_select_tips">想要看到用户</string>
+    <string name="home_user_filter_select">选择</string>
+    <string name="home_user_filter_age">年龄</string>
 </resources>

+ 7 - 0
app/src/main/res/values/strings.xml

@@ -709,4 +709,11 @@
     <string name="message_gift_from_self">you gave friend a gift</string>
     <string name="commonui_no_message">No message</string>
     <string name="common_voice_room">Voice Room</string>
+    <string name="common_kg" translatable="false">%s kg</string>
+    <string name="common_cm" translatable="false">%s cm</string>
+    <string name="common_place_of_birth">Place of Birth</string>
+    <string name="common_current_residence">Current residence</string>
+    <string name="home_user_filter_select">Select</string>
+    <string name="home_user_filter_select_tips">Want to see the user</string>
+    <string name="home_user_filter_age">Age</string>
 </resources>

+ 4 - 3
module/account/src/main/java/com/adealink/weparty/account/login/phone/PhoneInputActivity.kt

@@ -118,7 +118,8 @@ class PhoneInputActivity : BaseLoginActivity() {
 
         if (getVerifyCodeReason == GetVerifyCodeReason.BIND_PHONE.value
             || getVerifyCodeReason == GetVerifyCodeReason.CHANGE_BIND_PHONE.value
-            || getVerifyCodeReason == GetVerifyCodeReason.RESET_PASSWORD.value) {
+            || getVerifyCodeReason == GetVerifyCodeReason.RESET_PASSWORD.value
+        ) {
             binding.tvPhoneLogin.text = getCompatString(R.string.account_mobile_bind_title)
             binding.tvPhoneLoginTips.text = getCompatString(R.string.account_mobile_bind_tips)
         } else {
@@ -281,12 +282,12 @@ class PhoneInputActivity : BaseLoginActivity() {
                         if (it.error is AccountNoRegisterError) {
                             goPhoneRegister(phone)
                         } else if (it.error is AccountHasRegisterWithoutPasswordError) {
-                            showToast("该手机号码已被绑定")
+                            showToast(R.string.account_phone_has_bind)
                         } else {
                             showFailedToast(it)
                         }
                     } else {
-                        showToast("该手机号码已被绑定")
+                        showToast(R.string.account_phone_has_bind)
                     }
                 }
             return

+ 3 - 3
module/account/src/main/java/com/adealink/weparty/account/register/GenderSelectFragment.kt

@@ -230,11 +230,11 @@ class GenderSelectFragment : BaseFragment(R.layout.fragment_gender_select) {
     private fun clickNext() {
         newUserInfo ?: return
         if (avatarPath.isNullOrEmpty() && newUserInfo?.url.isNullOrEmpty()) {
-            showToast("Please select an avatar")
+            showToast(R.string.account_toast_avatar)
             return
         }
         if (!binding.maleLayout.isSelected && !binding.femaleLayout.isSelected) {
-            showToast("Please select a gender")
+            showToast(R.string.account_toast_gender)
             return
         }
 
@@ -250,7 +250,7 @@ class GenderSelectFragment : BaseFragment(R.layout.fragment_gender_select) {
             return
         }
         if (newName.length > 28) {
-            showToast("Nickname cannot exceed 28 characters")
+            showToast(R.string.account_length_tips)
             return
         }
 

+ 4 - 4
module/account/src/main/java/com/adealink/weparty/account/setting/AccountSettingActivity.kt

@@ -5,7 +5,6 @@ import android.os.Bundle
 import android.text.SpannableStringBuilder
 import android.text.style.ForegroundColorSpan
 import android.text.style.StyleSpan
-import android.view.Gravity
 import androidx.activity.viewModels
 import com.adealink.frame.aab.util.getCompatColor
 import com.adealink.frame.aab.util.getCompatDrawable
@@ -80,7 +79,8 @@ class AccountSettingActivity : BaseActivity() {
             try {
                 val phoneNumber =
                     PhoneNumberUtil.getInstance().parse("+${phoneInfo.registPhoneNumber}", null)
-                val formatPhoneNumber = PhoneNumberUtil.getInstance().format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.NATIONAL)
+                val formatPhoneNumber = PhoneNumberUtil.getInstance()
+                    .format(phoneNumber, PhoneNumberUtil.PhoneNumberFormat.NATIONAL)
                 binding.tvPhoneBind.text = formatPhoneNumber
 
                 binding.tvPhoneBind.onClick {
@@ -138,7 +138,7 @@ class AccountSettingActivity : BaseActivity() {
             } else {
                 binding.passwordLayout.onClick {
                     CommonDialog.Builder()
-                        .message("Please bind your phone number first")
+                        .message(getCompatString(R.string.account_bind_phone_first))
                         .negativeText(getCompatString(APP_R.string.commonui_cancel))
                         .positiveText(getCompatString(APP_R.string.commonui_confirm))
                         .onPositive {
@@ -172,7 +172,7 @@ class AccountSettingActivity : BaseActivity() {
         val span = SpannableStringBuilder(
             getCompatString(
                 R.string.account_bind_phone_number_tips,
-                "\n"+currentPhoneNumber
+                "\n" + currentPhoneNumber
             )
         )
         span.safeSetSpan(

+ 1 - 1
module/account/src/main/res/layout/fragment_gender_select.xml

@@ -170,7 +170,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginStart="20dp"
-            android:text="@string/account_nation"
+            android:text="@string/common_place_of_birth"
             android:textColor="@color/color_222222"
             android:textSize="14sp"
             app:layout_constraintBottom_toBottomOf="parent"

+ 50 - 3
module/account/src/main/res/values-ar/strings.xml

@@ -2,7 +2,7 @@
 <resources>
     <string name="account_login_net_error"> فشل طلب الشبكة ، يرجى التحقق من شبكة الانترنت</string>
     <string name="account_auth_error">فشل التفويض ، يرجى تجربة طريقة تسجيل دخول أخرى أو الاتصال بـ vpn والمحاولة مرة أخرى</string>
-    <string name="account_user_agreement_tips">بتسجيل الدخول ، أنت توافق على %1$s و %2$s</string>
+    <string name="account_user_agreement_tips">تسجيل الدخول يعني أنك توافق على %1$s و%2$s.</string>
     <string name="account_privacy_policy">سياسة الخصوصية</string>
     <string name="account_service_terms">شروط الخدمة</string>
     <string name="account_fb">Facebook</string>
@@ -30,8 +30,8 @@
     <string name="account_sign_up_or_login">تسجيل الدخول / تسجيل حساب جديد</string>
     <string name="account_login">تسجيل الدخول</string>
     <string name="account_enter_password_tip">الرجاء إدخال كلمة المرور المرتبطة بـ</string>
-    <string name="account_password">كلمه المرور</string>
-    <string name="account_forget_password">نسيت كلمة المرور</string>
+    <string name="account_password">الرجاء إدخال كلمة المرور</string>
+    <string name="account_forget_password">هل نسيت كلمة السر؟</string>
     <string name="account_enter_verify_code">أدخل رمز التأكيد</string>
     <string name="account_send_verify_code">أرسل رمز التحقق إلى</string>
     <string name="account_set_password">ضبط كلمة مرور</string>
@@ -99,4 +99,51 @@
     <string name="account_select_account_mes">لقد أنشأ حسابك على Facebook %1$s %2$s الحسابين التاليين، يرجى تحديد الحساب الذي تريد تسجيل الدخول إليه</string>
     <string name="account_select_account_title">تسجيل الدخول مع الفيسبوك</string>
     <string name="account_last_used">آخر استخدام</string>
+    <string name="account_bind_phone_number_tips">رقم هاتف الحساب الملزم الحالي: %s</string>
+    <string name="account_phone_binding">ربط الهاتف</string>
+    <string name="account_mobile_bind_title">ربط رقم الهاتف المحمول</string>
+    <string name="account_user_notices_list">١. بمجرد إلغاء حسابك، لا يمكن استعادته. بعد نجاح الإلغاء، ستفقد إمكانية الوصول إلى حسابك والتحكم فيه. سيتم فقدان جميع المحتويات والرسائل والأصول المرتبطة به نهائيًا. في حال تسجيلك مرة أخرى، ستحصل على حساب جديد فقط.
+
+٢. باختيارك الطوعي إلغاء حسابك، فإنك توافق على التنازل عن جميع الحقوق المرتبطة به، بما في ذلك المعلومات الشخصية والمحتوى المنشور والعملات والماس، بالإضافة إلى مزايا الأصول الافتراضية مثل وضعية VIP ومستوى الثروة ومستوى السحر.
+
+٣. في حال اكتشاف أي نزاعات أو مشكلات لم يتم حلها (مثل الشكاوى أو البلاغات أو مخالفات القوانين واللوائح) أثناء عملية الإلغاء، نحتفظ بالحق في رفض الإلغاء دون طلب موافقتك.
+
+٤. عند اكتمال عملية الإلغاء، سيتعامل تطبيق Yoki مع معلوماتك الشخصية وفقًا للمتطلبات القانونية، والتي قد تشمل الحذف أو إخفاء الهوية ما لم تقتضي القوانين واللوائح المعمول بها خلاف ذلك.</string>
+    <string name="account_enter_old_password">الرجاء إدخال كلمة المرور القديمة</string>
+    <string name="account_delete_dialog_tips">هل أنت متأكد من حذف الحساب؟ إذا تم حذف الحساب، فسيتم مسح جميع بياناتك، ولن تتمكن من تسجيل الدخول إلى الأبد، يرجى المتابعة بحذر!!!</string>
+    <string name="account_enter_your_passowrd">الرجاء إدخال كلمة المرور الخاصة بك</string>
+    <string name="account_no_protection">لا يوجد حماية</string>
+    <string name="account_delete_btn">حذف الحساب</string>
+    <string name="account_upload_avatar_tips">قم بتحميل أفضل صورة شخصية لديك لتسهيل عملية التواصل مع الأصدقاء</string>
+    <string name="account_bind_phone_first">يرجى ربط رقم هاتفك أولاً</string>
+    <string name="account_delete_title">إلغاء الحساب</string>
+    <string name="account_send_to_phone_tips">لقد تم إرسال رمز التحقق إلى هاتفك</string>
+    <string name="account_length_tips">لا يمكن أن يتجاوز الاسم المستعار 28 حرفًا</string>
+    <string name="account_toast_birthday">الرجاء تحديد تاريخ ميلادك</string>
+    <string name="account_toast_nickname">الرجاء إدخال اللقب</string>
+    <string name="account_paassword_modification">تعديل كلمة المرور</string>
+    <string name="account_toast_country">الرجاء تحديد بلدك</string>
+    <string name="account_management">إدارة الحسابات</string>
+    <string name="account_and_security">الحساب والأمان</string>
+    <string name="account_toast_nickname_illegal">يحتوي الاسم المستعار على رموز غير قانونية، يرجى تعديله وحفظه</string>
+    <string name="account_send_to_whatsapp_tips">تم إرسال رمز التحقق إلى الواتساب</string>
+    <string name="account_complete_information_title">معلومات كاملة</string>
+    <string name="account_toast_gender">يرجى تأكيد جنسك</string>
+    <string name="account_enter_new_password">الرجاء إدخال كلمة المرور الجديدة</string>
+    <string name="account_date_of_birth">عيد ميلاد</string>
+    <string name="account_login_name_input">أدخل اسمك</string>
+    <string name="account_password_setting">إعداد كلمة المرور</string>
+    <string name="account_toast_gender_tips">لا يمكن تغيير الجنس بعد تعديل الحساب.</string>
+    <string name="account_user_id">معرف المستخدم</string>
+    <string name="account_enter_your_passowrd_again">الرجاء إدخال كلمة المرور الخاصة بك مرة أخرى</string>
+    <string name="account_phone_has_bind">لقد تم ربط رقم الهاتف هذا بالفعل.</string>
+    <string name="account_mobile_login_tips">سيتم تسجيل أرقام الهواتف المحمولة غير المسجلة تلقائيًا</string>
+    <string name="account_change_mobile_phone">تغيير هاتفك المحمول</string>
+    <string name="account_mobile_bind_tips">لضمان أمان حسابك، يرجى ربط رقم هاتفك المحمول في أقرب وقت ممكن.</string>
+    <string name="account_user_notices">إشعار المستخدم</string>
+    <string name="account_mobile_login_title">تسجيل الدخول برقم الهاتف المحمول</string>
+    <string name="account_toast_avatar">الرجاء اختيار الصورة الرمزية</string>
+    <string name="account_binding">ربط الحساب</string>
+    <string name="account_delete_tips">عزيزي %s، أنت على وشك بدء عملية إلغاء الحساب</string>
+    <string name="account_change">يتغير</string>
 </resources>

+ 47 - 3
module/account/src/main/res/values-zh/strings.xml

@@ -2,7 +2,7 @@
 <resources>
     <string name="account_login_net_error">网络异常,请检查网络</string>
     <string name="account_auth_error">授权失败,请尝试其他登录方式或连接vpn后重试</string>
-    <string name="account_user_agreement_tips">登录即代表你同意%1$s和%2$s</string>
+    <string name="account_user_agreement_tips">登录即表示您同意%1$s和%2$s。</string>
     <string name="account_privacy_policy">隐私政策</string>
     <string name="account_service_terms">服务条款</string>
     <string name="account_fb">Facebook</string>
@@ -30,8 +30,8 @@
     <string name="account_sign_up_or_login">注册/登录</string>
     <string name="account_login">登录</string>
     <string name="account_enter_password_tip">请输入密码</string>
-    <string name="account_password">密码</string>
-    <string name="account_forget_password">忘记密码?</string>
+    <string name="account_password">请输入密码</string>
+    <string name="account_forget_password">忘记密码</string>
     <string name="account_enter_verify_code">输入验证码</string>
     <string name="account_send_verify_code">发送验证码到</string>
     <string name="account_set_password">设置密码</string>
@@ -98,4 +98,48 @@
     <string name="account_select_account_mes">您的 Facebook 帐户 %1$s %2$s 已创建以下 2 个帐户,请选择您要登录的帐户</string>
     <string name="account_select_account_title">使用 Facebook 登录</string>
     <string name="account_last_used">上次使用</string>
+    <string name="account_bind_phone_number_tips">当前绑定账号的手机号:%s</string>
+    <string name="account_phone_binding">手机绑定</string>
+    <string name="account_mobile_bind_title">手机号绑定</string>
+    <string name="account_user_notices_list">1、账号一旦注销,便无法再恢复使用。注销成功后,您将失去登录、操作该账号的权限,同时该账号内所有的内容、消息和资产也都将无法找回,重新注册只能得到一个全新账号;
+2、您主动选择注销账号即表示自愿放弃与之相关的一切权益,包括个人信息、发布内容、金币、钻石,以及VIP、财富等级、魅力等级等虚拟资产权益;
+3、在注销处理期间,若发现您的账号存在未解决的争议或纠纷(例如投诉、举报或涉嫌违反法律法规等),我们有权拒绝继续注销,而无需再次征求您的同意;
+4、注销流程结束后,Yoki APP将依据法律规定对您的个人信息进行处理,可能会予以删除或匿名化,除非相关法规另有要求。</string>
+    <string name="account_enter_old_password">请输入您的旧密码</string>
+    <string name="account_delete_dialog_tips">确定删除账号?若删除账号,您的所有数据将被清除,永久无法登录,请谨慎操作!!!</string>
+    <string name="account_enter_your_passowrd">请输入您的密码</string>
+    <string name="account_no_protection">没有保护</string>
+    <string name="account_delete_btn">删除帐户</string>
+    <string name="account_upload_avatar_tips">上传您最好的自拍照,让好友更轻松</string>
+    <string name="account_bind_phone_first">请先绑定您的手机号</string>
+    <string name="account_delete_title">帐户取消</string>
+    <string name="account_send_to_phone_tips">验证码已发送至您的手机</string>
+    <string name="account_length_tips">昵称不能超过28个字符</string>
+    <string name="account_toast_birthday">请选择你的生日</string>
+    <string name="account_toast_nickname">请输入昵称</string>
+    <string name="account_paassword_modification">修改密码</string>
+    <string name="account_toast_country">请选择您的国家</string>
+    <string name="account_management">帐户管理</string>
+    <string name="account_and_security">帐户和安全</string>
+    <string name="account_toast_nickname_illegal">昵称包含非法符号,请修改并保存</string>
+    <string name="account_send_to_whatsapp_tips">验证码已发送至 WhatsApp</string>
+    <string name="account_complete_information_title">完整信息</string>
+    <string name="account_toast_gender">请确认您的性别</string>
+    <string name="account_enter_new_password">请输入您的新密码</string>
+    <string name="account_date_of_birth">生日</string>
+    <string name="account_login_name_input">输入您的姓名</string>
+    <string name="account_password_setting">密码设置</string>
+    <string name="account_toast_gender_tips">账号修改后性别不可更改。</string>
+    <string name="account_user_id">用户身份</string>
+    <string name="account_enter_your_passowrd_again">请再次输入您的密码</string>
+    <string name="account_phone_has_bind">该电话号码已经绑定。</string>
+    <string name="account_mobile_login_tips">未注册的手机号码将自动注册</string>
+    <string name="account_change_mobile_phone">更换手机</string>
+    <string name="account_mobile_bind_tips">为了保证您的账户安全,请尽快绑定您的手机号码。</string>
+    <string name="account_user_notices">用户须知</string>
+    <string name="account_mobile_login_title">手机号登录</string>
+    <string name="account_toast_avatar">请选择头像</string>
+    <string name="account_binding">账户绑定</string>
+    <string name="account_delete_tips">尊敬的 %s,您即将开始帐户取消流程</string>
+    <string name="account_change">改变</string>
 </resources>

+ 7 - 7
module/account/src/main/res/values/strings.xml

@@ -106,7 +106,7 @@
     <string name="account_last_used">Last used</string>
     <string name="account_select_account_title">Login with Facebook</string>
     <string name="account_select_account_mes">Your Facebook account %1$s %2$s has created the following 2 accounts, please select the account you want to login</string>
-
+    <string name="account_phone_has_bind">This phone number has already been bind.</string>
     <string name="account_mobile_login_title">Mobile number login</string>
     <string name="account_mobile_login_tips">Unregistered mobile numbers will be automatically registered</string>
     <string name="account_complete_information_title">Complete information</string>
@@ -114,7 +114,7 @@
     <string name="account_login_name_input">Input your name</string>
     <string name="account_date_of_birth">Birthday</string>
     <string name="account_nation">Place of Birth</string>
-
+    <string name="account_length_tips">Nickname cannot exceed 28 characters</string>
     <string name="account_toast_avatar">Please select an avatar</string>
     <string name="account_toast_nickname">Please enter a nickname</string>
     <string name="account_toast_nickname_illegal">nickname contains illegal symbols, please modify and save</string>
@@ -136,10 +136,10 @@
     <string name="account_delete_title">Account cancellation</string>
     <string name="account_delete_tips">Dear %s, you are about to start the account cancellation process</string>
     <string name="account_user_notices">User notice</string>
-    <string name="account_user_notices_list">1.	Once your account is canceled, it cannot be recovered. After a successful cancellation, you will lose access to and control over the account. All content, messages, and assets associated with the account will be permanently lost. If you register again, you will only obtain a new account.\n
-	2.	By voluntarily choosing to cancel your account, you agree to forfeit all associated rights, including personal information, published content, coins, diamonds, as well as virtual asset benefits such as VIP status, wealth level, and charm level.\n
-	3.	If any unresolved disputes or issues (such as complaints, reports, or violations of laws and regulations) are detected during the cancellation process, we reserve the right to refuse the cancellation without seeking your further consent.\n
-	4.	Upon completion of the cancellation process, Yoki APP will handle your personal information in accordance with legal requirements, which may include deletion or anonymization unless otherwise required by applicable laws and regulations.</string>
+    <string name="account_user_notices_list">1.Once your account is canceled, it cannot be recovered. After a successful cancellation, you will lose access to and control over the account. All content, messages, and assets associated with the account will be permanently lost. If you register again, you will only obtain a new account.\n
+2.By voluntarily choosing to cancel your account, you agree to forfeit all associated rights, including personal information, published content, coins, diamonds, as well as virtual asset benefits such as VIP status, wealth level, and charm level.\n
+3.If any unresolved disputes or issues (such as complaints, reports, or violations of laws and regulations) are detected during the cancellation process, we reserve the right to refuse the cancellation without seeking your further consent.\n
+4.Upon completion of the cancellation process, Yoki APP will handle your personal information in accordance with legal requirements, which may include deletion or anonymization unless otherwise required by applicable laws and regulations.</string>
     <string name="account_delete_dialog_tips">Sure to delete account?If the account is deleted, all your data is clear, you can\'t login forever, please proceed with caution!!!</string>
     <string name="account_delete_btn">Delete Account</string>
     <string name="account_enter_old_password">Please enter your old password</string>
@@ -150,5 +150,5 @@
     <string name="account_send_to_phone_tips">The verification code has been sent to your phone</string>
     <string name="account_mobile_bind_title">Mobile number bind</string>
     <string name="account_mobile_bind_tips">To ensure the security of your account, please bind your mobile number as soon as possible.</string>
-
+    <string name="account_bind_phone_first">Please bind your phone number first</string>
 </resources>

+ 4 - 4
module/profile/src/main/java/com/adealink/weparty/profile/audioauth/VoiceAuthActivity.kt

@@ -245,7 +245,7 @@ class VoiceAuthActivity : BaseActivity() {
             PermissionUtils.requestPermissionWithRetry(
                 this,
                 Manifest.permission.RECORD_AUDIO,
-                "请授予录音权限,以便你能发语音",
+                getCompatString(R.string.profile_record_permission_tips),
                 0,
             ) { granted, _ ->
                 if (granted) {
@@ -467,9 +467,9 @@ class VoiceAuthActivity : BaseActivity() {
             finish()
         } else {
             CommonDialog.Builder()
-                .title("温馨提示")
-                .message("您有尚未保存的录音变更,是否保存?")
-                .negativeText("不,多谢")
+                .title(getCompatString(R.string.profile_photo_dialog_title))
+                .message(getCompatString(R.string.profile_record_change_tips))
+                .negativeText(getCompatString(R.string.profile_photo_dialog_button))
                 .onNegative {
                     finish()
                 }

+ 2 - 1
module/profile/src/main/java/com/adealink/weparty/profile/edit/EditNickNameActivity.kt

@@ -6,6 +6,7 @@ import android.text.TextWatcher
 import android.widget.Toast
 import androidx.activity.viewModels
 import com.adealink.frame.aab.util.getCompatColor
+import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.base.fastLazy
 import com.adealink.frame.mvvm.view.viewBinding
@@ -85,7 +86,7 @@ class EditNickNameActivity : BaseActivity() {
         binding.btnSave.onClick {
             val newName = binding.etInput.text.toString().trim()
             if (newName.isEmpty()) {
-                showToast("昵称不能为空")
+                showToast(getCompatString(R.string.profile_nick_name_empty_tips))
                 return@onClick
             }
             val newUserInfo = ProfileModule.getMyUserInfo()?.copy(name = newName) ?: return@onClick

+ 5 - 3
module/profile/src/main/java/com/adealink/weparty/profile/edit/viewcomp/BasicDataViewComponent.kt

@@ -1,6 +1,7 @@
 package com.adealink.weparty.profile.edit.viewcomp
 
 import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.router.Router
 import com.adealink.frame.util.getBirthStr
 import com.adealink.frame.util.onClick
@@ -8,6 +9,7 @@ import com.adealink.weparty.commonui.widget.wheel.WheelBirthdayPickerDialogFragm
 import com.adealink.weparty.module.profile.Profile
 import com.adealink.weparty.module.profile.ProfileModule
 import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.R
 import com.adealink.weparty.profile.country.SOURCE_SELECT_CURRENT_PLACE
 import com.adealink.weparty.profile.country.SOURCE_SELECT_PLACE_OF_BIRTH
 import com.adealink.weparty.profile.country.SelectCountryLifecycleObserver
@@ -65,7 +67,7 @@ class BasicDataViewComponent(
         if (userInfo.birthday > 0) {
             binding.tvBirthday.text = getBirthStr(userInfo.birthday)
         } else {
-            binding.tvBirthday.text = "please select"
+            binding.tvBirthday.text = getCompatString(R.string.profile_please_select)
         }
 
         binding.tvBirthday.onClick {
@@ -88,12 +90,12 @@ class BasicDataViewComponent(
         if (userInfo.country?.isNotEmpty() == true) {
             binding.tvPlaceOfBirth.text = userInfo.country
         } else {
-            binding.tvPlaceOfBirth.text = "please select"
+            binding.tvPlaceOfBirth.text = getCompatString(R.string.profile_please_select)
         }
         if (userInfo.liveCountry?.isNotEmpty() == true) {
             binding.tvCurrentResidence.text = userInfo.liveCountry
         } else {
-            binding.tvCurrentResidence.text = "please select"
+            binding.tvCurrentResidence.text = getCompatString(R.string.profile_please_select)
         }
     }
 

+ 10 - 10
module/profile/src/main/java/com/adealink/weparty/profile/edit/viewcomp/MoreInformationViewComponent.kt

@@ -1,13 +1,16 @@
 package com.adealink.weparty.profile.edit.viewcomp
 
 import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.router.Router
 import com.adealink.frame.util.onClick
 import com.adealink.weparty.commonui.dialogfragment.WheelSimpleListStringDialogFragment
 import com.adealink.weparty.module.profile.Profile
 import com.adealink.weparty.module.profile.ProfileModule
 import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.R
 import com.adealink.weparty.profile.databinding.LayoutEditProfileMoreInformationBinding
+import com.adealink.weparty.R as APP_R
 
 /**
  * Created by XiaoDongLin.
@@ -38,30 +41,27 @@ class MoreInformationViewComponent(
 
     override fun updateUI(userInfo: UserInfo) {
         if (userInfo.getUserVoiceIntroduction().isNotEmpty()) {
-            binding.tvVoiceIntroduction.text = "Recorded"
+            binding.tvVoiceIntroduction.text = getCompatString(R.string.profile_recorded)
         } else {
-            binding.tvVoiceIntroduction.text = "Go to record"
+            binding.tvVoiceIntroduction.text = getCompatString(R.string.profile_goto_record)
         }
 
         if (userInfo.job?.isNotEmpty() == true) {
             binding.tvOccuption.text = userInfo.job
         } else {
-            binding.tvOccuption.text = "Please select"
+            binding.tvOccuption.text = getCompatString(R.string.profile_please_select)
         }
         if (userInfo.height != 0) {
-            binding.tvHeight.text = "${userInfo.height}CM"
+            binding.tvHeight.text = getCompatString(APP_R.string.common_cm, userInfo.height)
         } else {
-            binding.tvHeight.text = "Please select"
+            binding.tvHeight.text = getCompatString(R.string.profile_please_select)
         }
         if (userInfo.weight != 0) {
-            binding.tvWeight.text = "${userInfo.weight}kg"
+            binding.tvWeight.text = getCompatString(APP_R.string.common_kg, userInfo.weight)
         } else {
-            binding.tvWeight.text = "Please select"
+            binding.tvWeight.text = getCompatString(R.string.profile_please_select)
         }
 
-//        binding.tvHeight.text = getCompatString(R.string.profile_height_cm, userInfo.height)
-//        binding.tvWeight.text = getCompatString(R.string.profile_weight_kg, userInfo.weight)
-
     }
 
     private fun showHeightSelectDialog() {

+ 3 - 2
module/profile/src/main/java/com/adealink/weparty/profile/edit/viewcomp/PersonalProfileViewComponent.kt

@@ -2,10 +2,12 @@ package com.adealink.weparty.profile.edit.viewcomp
 
 import androidx.lifecycle.LifecycleOwner
 import com.adealink.frame.aab.util.getCompatColor
+import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.router.Router
 import com.adealink.frame.util.onClick
 import com.adealink.weparty.module.profile.Profile
 import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.R
 import com.adealink.weparty.profile.databinding.LayoutEditProfilePersonalProfileBinding
 import com.adealink.weparty.R as APP_R
 
@@ -27,8 +29,7 @@ class PersonalProfileViewComponent(
 
     override fun updateUI(userInfo: UserInfo) {
         if (userInfo.profile.isNullOrEmpty()) {
-            binding.tvProfile.text =
-                "Fill in your self-introduction to make others more interested in you!"
+            binding.tvProfile.text = getCompatString(R.string.profile_profile_empty_tips)
             binding.tvProfile.setTextColor(getCompatColor(APP_R.color.color_AAAAAA))
         } else {
             binding.tvProfile.text = userInfo.profile

+ 3 - 3
module/profile/src/main/java/com/adealink/weparty/profile/photoselect/UserPhotoSelectActivity.kt

@@ -333,9 +333,9 @@ class UserPhotoSelectActivity : BaseActivity(),
             finish()
         } else {
             CommonDialog.Builder()
-                .title("温馨提示")
-                .message("您有尚未保存的档案变更,是否保存?")
-                .negativeText("不,多谢")
+                .title(getCompatString(R.string.profile_photo_dialog_title))
+                .message(getCompatString(R.string.profile_photo_dialog_message))
+                .negativeText(getCompatString(R.string.profile_photo_dialog_button))
                 .onNegative {
                     finish()
                 }

+ 6 - 4
module/profile/src/main/java/com/adealink/weparty/profile/userprofile/ProfileTab.kt

@@ -1,9 +1,11 @@
 package com.adealink.weparty.profile.userprofile
 
+import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.router.Router
 import com.adealink.weparty.commonui.BaseFragment
 import com.adealink.weparty.commonui.widget.EmptyFragment
 import com.adealink.weparty.module.profile.Profile
+import com.adealink.weparty.profile.R
 
 /**
  * Created by XiaoDongLin.
@@ -24,22 +26,22 @@ data class ProfileTab(
 
 var PERSONAL_TAB = ProfileTab(
     EProfileTab.Personal,
-    "Personal"
+    getCompatString(R.string.profile_personal_tab)
 ) { Router.getRouterInstance<BaseFragment>(Profile.Profile.PATH) ?: EmptyFragment() }
 
 var HONOR_TAB = ProfileTab(
     EProfileTab.Honor,
-    "Honor"
+    getCompatString(R.string.profile_honor_tab)
 ) {
     EmptyFragment()
 }
 var MOMENT_TAB = ProfileTab(
-    EProfileTab.Moment, "Moment"
+    EProfileTab.Moment, getCompatString(R.string.profile_moment_tab)
 ) {
     EmptyFragment()
 }
 var RELATION_TAB = ProfileTab(
-    EProfileTab.Relation, "Relation"
+    EProfileTab.Relation, getCompatString(R.string.profile_relation_tab)
 ) {
     EmptyFragment()
 }

+ 9 - 6
module/profile/src/main/java/com/adealink/weparty/profile/userprofile/view/ProfileAboutMeViewBinder.kt

@@ -6,6 +6,7 @@ import android.text.TextUtils
 import android.view.LayoutInflater
 import android.view.ViewGroup
 import android.widget.TextView
+import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.util.DisplayUtil
 import com.adealink.frame.util.ONE_DAY
 import com.adealink.frame.util.ONE_MONTH
@@ -21,6 +22,7 @@ import com.adealink.weparty.profile.R
 import com.adealink.weparty.profile.databinding.ItemProfileAboutMeBinding
 import com.adealink.weparty.profile.userprofile.data.ProfileAboutMeData
 import com.facebook.common.util.UriUtil
+import com.adealink.weparty.R as APP_R
 
 /**
  * Created by XiaoDongLin.
@@ -74,7 +76,8 @@ class ProfileAboutMeViewBinder :
                 showIntroduction(textView, text, btnExpand)
             }
             btnExpand.show()
-            btnExpand.text = if (isExpanded) "Pack up" else "More"
+            btnExpand.text =
+                if (isExpanded) getCompatString(R.string.profile_pack_up) else getCompatString(APP_R.string.common_more)
         } else {
             textView.maxLines = Int.MAX_VALUE
             textView.ellipsize = null
@@ -128,7 +131,7 @@ class ProfileAboutMeViewBinder :
                     TagsLayout.Tag(
                         ProfileInformationTagId.Register.id,
                         UriUtil.getUriForResourceId(R.drawable.profile_star_ic).toString(),
-                        "Join YOKI | 1 day",
+                        getCompatString(R.string.profile_join_yoki_days, 1),
                         false
                     )
                 )
@@ -139,7 +142,7 @@ class ProfileAboutMeViewBinder :
                     TagsLayout.Tag(
                         ProfileInformationTagId.Register.id,
                         UriUtil.getUriForResourceId(R.drawable.profile_star_ic).toString(),
-                        "Join YOKI | $year year",
+                        getCompatString(R.string.profile_join_yoki_days, year),
                         false
                     )
                 )
@@ -149,7 +152,7 @@ class ProfileAboutMeViewBinder :
                     TagsLayout.Tag(
                         ProfileInformationTagId.Register.id,
                         UriUtil.getUriForResourceId(R.drawable.profile_star_ic).toString(),
-                        "Join YOKI | $day day",
+                        getCompatString(R.string.profile_join_yoki_days, day),
                         false
                     )
                 )
@@ -171,7 +174,7 @@ class ProfileAboutMeViewBinder :
                 TagsLayout.Tag(
                     ProfileInformationTagId.Weight.id,
                     UriUtil.getUriForResourceId(R.drawable.profile_star_ic).toString(),
-                    "${userInfo.weight}kg",
+                    getCompatString(APP_R.string.common_kg, userInfo.weight),
                     false
                 )
             )
@@ -181,7 +184,7 @@ class ProfileAboutMeViewBinder :
                 TagsLayout.Tag(
                     ProfileInformationTagId.Height.id,
                     UriUtil.getUriForResourceId(R.drawable.profile_star_ic).toString(),
-                    "${userInfo.height}cm",
+                    getCompatString(APP_R.string.common_cm, userInfo.height),
                     false
                 )
             )

+ 1 - 1
module/profile/src/main/res/layout/activity_edit_nick_name.xml

@@ -11,7 +11,7 @@
         android:layout_width="match_parent"
         android:layout_height="44dp"
         app:layout_constraintTop_toTopOf="parent"
-        app:top_bar_title="Edit nickName" />
+        app:top_bar_title="@string/profile_edit_nick_name" />
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/btn_save"

+ 1 - 1
module/profile/src/main/res/layout/activity_edit_person_profile.xml

@@ -11,7 +11,7 @@
         android:layout_width="match_parent"
         android:layout_height="44dp"
         app:layout_constraintTop_toTopOf="parent"
-        app:top_bar_title="Edit Profile" />
+        app:top_bar_title="@string/profile_edit_profile_title" />
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/btn_save"

+ 1 - 1
module/profile/src/main/res/layout/activity_profile_voice_auth.xml

@@ -11,7 +11,7 @@
         android:layout_width="match_parent"
         android:layout_height="44dp"
         app:layout_constraintTop_toTopOf="parent"
-        app:top_bar_title="Voice Authentication" />
+        app:top_bar_title="@string/profile_voice_auth_title" />
 
 
     <include

+ 2 - 2
module/profile/src/main/res/layout/item_profile_about_me.xml

@@ -19,7 +19,7 @@
             android:layout_height="36dp"
             android:layout_marginTop="8dp"
             android:gravity="center_vertical"
-            android:text="Information"
+            android:text="@string/profile_information"
             android:textColor="@color/color_222222"
             android:textSize="16sp"
             app:layout_constraintStart_toStartOf="parent"
@@ -39,7 +39,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginTop="4dp"
-            android:text="More"
+            android:text="@string/common_more"
             android:textColor="#8260B8"
             android:textSize="14sp"
             android:visibility="gone"

+ 1 - 1
module/profile/src/main/res/layout/item_profile_privacy_ablum_list.xml

@@ -18,7 +18,7 @@
             android:layout_height="36dp"
             android:layout_marginTop="8dp"
             android:gravity="center_vertical"
-            android:text="Privacy album"
+            android:text="@string/profile_privacy_album"
             android:textColor="@color/color_222222"
             android:textSize="16sp"
             app:layout_constraintStart_toStartOf="parent"

+ 1 - 1
module/profile/src/main/res/layout/item_profile_user_in_room.xml

@@ -79,7 +79,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginStart="2dp"
-            android:text="Room"
+            android:text="@string/common_room"
             android:textColor="@color/white"
             android:textSize="12sp" />
 

+ 1 - 1
module/profile/src/main/res/layout/item_user_photo_select.xml

@@ -72,7 +72,7 @@
         android:drawablePadding="2dp"
         android:gravity="center_vertical"
         android:paddingHorizontal="4dp"
-        android:text="Avatar"
+        android:text="@string/profile_avatar"
         android:textColor="@color/white"
         android:textSize="10sp"
         app:layout_constraintBottom_toBottomOf="parent"

+ 2 - 2
module/profile/src/main/res/layout/layout_complete_state_layout.xml

@@ -46,7 +46,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
-        android:text="Recording completed"
+        android:text="@string/profile_record_completed"
         android:textColor="@color/color_FF777777"
         android:textSize="13sp"
         app:layout_constraintEnd_toEndOf="parent"
@@ -97,7 +97,7 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
         android:gravity="center_horizontal"
-        android:text="Re-recording"
+        android:text="@string/profile_re_record"
         android:textColor="@color/color_FF777777"
         android:textSize="13sp"
         app:layout_constraintEnd_toEndOf="@+id/btn_re_recording_voice"

+ 13 - 13
module/profile/src/main/res/layout/layout_edit_profile_basic_data.xml

@@ -18,7 +18,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Basic data"
+            android:text="@string/profile_edit_basic_data"
             android:textColor="@color/color_222222"
             android:textSize="14sp"
             android:textStyle="bold" />
@@ -52,7 +52,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Nickname"
+            android:text="@string/profile_nickname"
             android:textColor="@color/color_222222"
             android:textSize="14sp" />
 
@@ -61,9 +61,9 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:drawableEnd="@drawable/profile_edit_ic_arrow"
-            android:text="HelloWorld"
             android:textColor="@color/color_AAAAAA"
-            android:textSize="11sp" />
+            android:textSize="11sp"
+            tools:text="HelloWorld" />
 
 
     </androidx.appcompat.widget.LinearLayoutCompat>
@@ -80,7 +80,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Birthday"
+            android:text="@string/profile_birthday"
             android:textColor="@color/color_222222"
             android:textSize="14sp" />
 
@@ -89,9 +89,9 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:drawableEnd="@drawable/profile_edit_ic_arrow"
-            android:text="HelloWorld"
             android:textColor="@color/color_AAAAAA"
-            android:textSize="11sp" />
+            android:textSize="11sp"
+            tools:text="HelloWorld" />
 
 
     </androidx.appcompat.widget.LinearLayoutCompat>
@@ -108,7 +108,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Place of Birth"
+            android:text="@string/common_place_of_birth"
             android:textColor="@color/color_222222"
             android:textSize="14sp" />
 
@@ -117,9 +117,9 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:drawableEnd="@drawable/profile_edit_ic_arrow"
-            android:text="HelloWorld"
             android:textColor="@color/color_AAAAAA"
-            android:textSize="11sp" />
+            android:textSize="11sp"
+            tools:text="HelloWorld" />
 
 
     </androidx.appcompat.widget.LinearLayoutCompat>
@@ -136,7 +136,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Current residence"
+            android:text="@string/common_current_residence"
             android:textColor="@color/color_222222"
             android:textSize="14sp" />
 
@@ -145,9 +145,9 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:drawableEnd="@drawable/profile_edit_ic_arrow"
-            android:text="HelloWorld"
             android:textColor="@color/color_AAAAAA"
-            android:textSize="11sp" />
+            android:textSize="11sp"
+            tools:text="HelloWorld" />
     </androidx.appcompat.widget.LinearLayoutCompat>
 
     <View

+ 5 - 5
module/profile/src/main/res/layout/layout_edit_profile_more_information.xml

@@ -17,7 +17,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="More information"
+            android:text="@string/profile_more_information"
             android:textColor="@color/color_222222"
             android:textSize="14sp"
             android:textStyle="bold" />
@@ -51,7 +51,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Voice introduction"
+            android:text="@string/profile_voice_introduction"
             android:textColor="@color/color_222222"
             android:textSize="14sp" />
 
@@ -79,7 +79,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Occupation"
+            android:text="@string/profile_occupation"
             android:textColor="@color/color_222222"
             android:textSize="14sp" />
 
@@ -107,7 +107,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Height"
+            android:text="@string/profile_height"
             android:textColor="@color/color_222222"
             android:textSize="14sp" />
 
@@ -135,7 +135,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Weight"
+            android:text="@string/profile_weight"
             android:textColor="@color/color_222222"
             android:textSize="14sp" />
 

+ 1 - 1
module/profile/src/main/res/layout/layout_edit_profile_personal_profile.xml

@@ -17,7 +17,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:layout_weight="1"
-            android:text="Personal profile"
+            android:text="@string/profile_personal_profile"
             android:textColor="@color/color_222222"
             android:textSize="14sp"
             android:textStyle="bold" />

+ 1 - 1
module/profile/src/main/res/layout/layout_edit_profile_top_layout.xml

@@ -61,7 +61,7 @@
         android:layout_marginHorizontal="22dp"
         android:layout_marginTop="8dp"
         android:layout_marginBottom="20dp"
-        android:text="Data completeness"
+        android:text="@string/profile_edit_data_completeness"
         android:textColor="@color/color_AAAAAA"
         android:textSize="12sp"
         app:layout_constraintBottom_toBottomOf="parent"

+ 1 - 1
module/profile/src/main/res/layout/layout_guide_upload_picture.xml

@@ -12,7 +12,7 @@
         android:background="@drawable/common_66000000_radius_4_bg"
         android:paddingHorizontal="8dp"
         android:paddingVertical="6dp"
-        android:text="Upload pictures to Instagram for more exposure"
+        android:text="@string/profile_upload_pic_guide"
         android:textColor="@color/white"
         android:textSize="12sp"
         app:layout_constraintBottom_toBottomOf="parent"

+ 2 - 2
module/profile/src/main/res/layout/layout_has_record_state_layout.xml

@@ -84,7 +84,7 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
         android:gravity="center_horizontal"
-        android:text="Re-recording"
+        android:text="@string/profile_re_record"
         android:textColor="@color/color_FF777777"
         android:textSize="13sp"
         app:layout_constraintEnd_toEndOf="@+id/btn_re_recording_voice"
@@ -107,7 +107,7 @@
         android:layout_marginTop="8dp"
         android:drawablePadding="8dp"
         android:gravity="center_horizontal"
-        android:text="Delete"
+        android:text="@string/common_delete"
         android:textColor="@color/color_FF777777"
         android:textSize="13sp"
         app:layout_constraintEnd_toEndOf="@+id/btn_delete_voice"

+ 2 - 2
module/profile/src/main/res/layout/layout_init_state_layout.xml

@@ -12,7 +12,7 @@
         android:layout_marginHorizontal="40dp"
         android:layout_marginTop="290dp"
         android:gravity="center"
-        android:text="Record a piece of your own voice~"
+        android:text="@string/profile_voice_record_tips"
         android:textColor="@color/color_222222"
         android:textSize="18sp"
         app:layout_constraintTop_toTopOf="parent" />
@@ -22,7 +22,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginBottom="25dp"
-        android:text="Hold to speek"
+        android:text="@string/profile_voice_hold_to_speek"
         android:textColor="@color/color_FF777777"
         android:textSize="13sp"
         app:layout_constraintBottom_toBottomOf="parent"

+ 1 - 1
module/profile/src/main/res/layout/layout_recording_state_layout.xml

@@ -51,7 +51,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="8dp"
-        android:text="Recording"
+        android:text="@string/profile_recording"
         android:textColor="@color/color_FF777777"
         android:textSize="13sp"
         app:layout_constraintEnd_toEndOf="parent"

+ 102 - 0
module/profile/src/main/res/layout/layout_user_profile_basic.xml

@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="93dp"
+    android:background="@drawable/profile_content_head"
+    android:paddingHorizontal="16dp">
+
+    <com.adealink.weparty.module.profile.view.UserNameTextView
+        android:id="@+id/user_name_text_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dp"
+        android:ellipsize="end"
+        android:maxLines="1"
+        android:textColor="@color/color_000000"
+        android:textSize="18sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintEnd_toStartOf="@+id/voice_layout"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="Hello" />
+
+    <androidx.appcompat.widget.LinearLayoutCompat
+        android:id="@+id/user_tag_layout"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="4dp"
+        android:gravity="center_vertical"
+        android:orientation="horizontal"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/user_name_text_view">
+
+        <com.adealink.weparty.module.profile.view.UserCountryView
+            android:id="@+id/user_country_view"
+            android:layout_width="20dp"
+            android:layout_height="20dp" />
+
+        <com.adealink.weparty.module.profile.view.UserSexView
+            android:id="@+id/user_sex_view"
+            android:layout_width="wrap_content"
+            android:layout_height="16dp"
+            android:layout_marginStart="4dp"
+            tools:text="Sex" />
+    </androidx.appcompat.widget.LinearLayoutCompat>
+
+    <com.adealink.weparty.module.profile.view.UserIdView
+        android:id="@+id/user_id_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="12dp"
+        app:id_text_color="@color/color_FF777777"
+        app:id_text_size="12sp"
+        app:layout_constraintStart_toStartOf="@+id/user_name_text_view"
+        app:layout_constraintTop_toBottomOf="@id/user_tag_layout"
+        app:show_copy_btn="true" />
+
+
+    <androidx.appcompat.widget.LinearLayoutCompat
+        android:id="@+id/voice_layout"
+        android:layout_width="105dp"
+        android:layout_height="28dp"
+        android:layout_marginTop="16dp"
+        android:background="@drawable/common_195252fc_radius_14_bg"
+        android:gravity="center_vertical"
+        android:paddingStart="4dp"
+        android:paddingEnd="8dp"
+        android:visibility="gone"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:visibility="visible">
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/btn_play_voice"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/ic_profile_play_voice" />
+
+        <com.opensource.svgaplayer.WenextSvgaView
+            android:id="@+id/svga_playing"
+            android:layout_width="42dp"
+            android:layout_height="16dp"
+            android:layout_marginHorizontal="5dp"
+            app:autoPlay="false"
+            app:source="profile_voice_playing_bar.svga" />
+
+        <com.adealink.weparty.commonui.widget.MediumTextView
+            android:id="@+id/tv_voice_duration"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:textColor="#BA90FD"
+            android:textSize="12sp"
+            tools:text="16s" />
+
+    </androidx.appcompat.widget.LinearLayoutCompat>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>
+
+

+ 38 - 0
module/profile/src/main/res/values-ar/strings.xml

@@ -335,4 +335,42 @@
     <string name="profile_change_cover_title">اعداد الغطاء</string>
     <string name="profile_change_multi_cover_tips">يمكن فقط للمستخدمين الذين لديهم LV%s أو أعلى رفع صور متعددة.</string>
     <string name="profile_special_attention_bubble_title">وظيفة جديدة</string>
+    <string name="profile_personal_tab">شخصي</string>
+    <string name="profile_personal_profile">الملف الشخصي</string>
+    <string name="profile_record_permission_tips">يرجى منح الإذن بالتسجيل حتى تتمكن من إرسال الرسائل الصوتية.</string>
+    <string name="profile_edit_data_completeness">اكتمال البيانات</string>
+    <string name="profile_photo_select_replace">صورة بديلة</string>
+    <string name="profile_record_completed">تم التسجيل</string>
+    <string name="profile_edit_profile_title">تعديل الملف الشخصي</string>
+    <string name="profile_relation_tab">العلاقة</string>
+    <string name="profile_voice_introduction">مقدمة صوتية</string>
+    <string name="profile_edit_nick_name">تعديل اللقب</string>
+    <string name="profile_honor_tab">شرف</string>
+    <string name="profile_join_yoki_days">انضم إلى YOKI | %s يوم</string>
+    <string name="profile_photo_dialog_button">ًلا شكرا</string>
+    <string name="profile_please_select">الرجاء الاختيار</string>
+    <string name="profile_weight">وزن</string>
+    <string name="profile_information">معلومة</string>
+    <string name="profile_recording">تسجيل</string>
+    <string name="profile_pack_up">حزم أمتعتك</string>
+    <string name="profile_recorded">مسجل</string>
+    <string name="profile_record_change_tips">لديك تغييرات تسجيل غير محفوظة. هل تريد حفظها؟</string>
+    <string name="profile_more_information">مزيد من المعلومات</string>
+    <string name="profile_photo_dialog_title">تذكير ودي</string>
+    <string name="profile_privacy_album">ألبوم الخصوصية</string>
+    <string name="profile_edit_basic_data">البيانات الأساسية</string>
+    <string name="profile_goto_record">انتقل إلى السجل</string>
+    <string name="profile_moment_tab">لحظة</string>
+    <string name="profile_re_record">إعادة التسجيل</string>
+    <string name="profile_profile_empty_tips">قم بإدخال نفسك في المقدمة لتجعل الآخرين مهتمين بك أكثر!</string>
+    <string name="profile_upload_pic_guide">قم بتحميل الصور إلى Instagram لمزيد من التعرض</string>
+    <string name="profile_voice_auth_title">المصادقة الصوتية</string>
+    <string name="profile_photo_dialog_message">لديك تغييرات غير محفوظة. هل تريد حفظها؟</string>
+    <string name="profile_height">ارتفاع</string>
+    <string name="profile_join_yoki_years">انضم إلى YOKI | %s سنة</string>
+    <string name="profile_voice_record_tips">سجل قطعة من صوتك الخاص~</string>
+    <string name="profile_voice_hold_to_speek">امسك للتحدث</string>
+    <string name="profile_photo_select_title">جدار الصور</string>
+    <string name="profile_occupation">إشغال</string>
+    <string name="profile_nick_name_empty_tips">لا يمكن أن يكون الاسم المستعار فارغًا.</string>
 </resources>

+ 38 - 0
module/profile/src/main/res/values-zh/strings.xml

@@ -333,4 +333,42 @@
     <string name="profile_change_cover_title">编辑封面</string>
     <string name="profile_change_multi_cover_tips">只有用户等级LV%s 以上,才可上传多张</string>
     <string name="profile_special_attention_bubble_title">新功能上线</string>
+    <string name="profile_personal_tab">个人资料</string>
+    <string name="profile_personal_profile">個人資料</string>
+    <string name="profile_record_permission_tips">请授予录音权限,以便您可以发送语音消息。</string>
+    <string name="profile_edit_data_completeness">数据完整性</string>
+    <string name="profile_photo_select_replace">更换图片</string>
+    <string name="profile_record_completed">录制完成</string>
+    <string name="profile_edit_profile_title">編輯資料</string>
+    <string name="profile_relation_tab">关系</string>
+    <string name="profile_voice_introduction">语音介绍</string>
+    <string name="profile_edit_nick_name">修改昵称</string>
+    <string name="profile_honor_tab">荣誉</string>
+    <string name="profile_join_yoki_days">加入 YOKI | %s 天</string>
+    <string name="profile_photo_dialog_button">不,谢谢</string>
+    <string name="profile_please_select">请选择</string>
+    <string name="profile_weight">重量</string>
+    <string name="profile_information">信息</string>
+    <string name="profile_recording">记录</string>
+    <string name="profile_pack_up">打包</string>
+    <string name="profile_recorded">已录制</string>
+    <string name="profile_record_change_tips">您有未保存的录音更改。要保存它们吗?</string>
+    <string name="profile_more_information">更多信息</string>
+    <string name="profile_photo_dialog_title">温馨提示</string>
+    <string name="profile_privacy_album">隐私相册</string>
+    <string name="profile_edit_basic_data">基础数据</string>
+    <string name="profile_goto_record">前往录音</string>
+    <string name="profile_moment_tab">动态</string>
+    <string name="profile_re_record">重新录制</string>
+    <string name="profile_profile_empty_tips">填写你的自我介绍,让别人对你更感兴趣!</string>
+    <string name="profile_upload_pic_guide">将照片上传至 Instagram 以获得更多曝光</string>
+    <string name="profile_voice_auth_title">语音认证</string>
+    <string name="profile_photo_dialog_message">您有未保存的更改。要保存它们吗?</string>
+    <string name="profile_height">高度</string>
+    <string name="profile_join_yoki_years">加入 YOKI | %s 年</string>
+    <string name="profile_voice_record_tips">录一段自己的声音吧~</string>
+    <string name="profile_voice_hold_to_speek">按住说话</string>
+    <string name="profile_photo_select_title">照片墙</string>
+    <string name="profile_occupation">职业</string>
+    <string name="profile_nick_name_empty_tips">昵称不能为空。</string>
 </resources>

+ 36 - 0
module/profile/src/main/res/values/strings.xml

@@ -339,4 +339,40 @@
     <string name="profile_tab_personal">Personal</string>
     <string name="profile_photo_select_replace">Replacement picture</string>
     <string name="profile_photo_select_title">Photo wall</string>
+    <string name="profile_edit_profile_title">Edit Profile</string>
+    <string name="profile_personal_tab">Personal</string>
+    <string name="profile_honor_tab">Honor</string>
+    <string name="profile_moment_tab">Moment</string>
+    <string name="profile_relation_tab">Relation</string>
+    <string name="profile_privacy_album">Privacy album</string>
+    <string name="profile_information">Information</string>
+    <string name="profile_pack_up">Pack up</string>
+    <string name="profile_join_yoki_days">Join YOKI | %s day</string>
+    <string name="profile_join_yoki_years">Join YOKI | %s year</string>
+    <string name="profile_photo_dialog_title">Friendly Reminder</string>
+    <string name="profile_photo_dialog_message">You have unsaved changes. Do you want to save them?</string>
+    <string name="profile_photo_dialog_button">No,Thanks</string>
+    <string name="profile_edit_data_completeness">Data completeness</string>
+    <string name="profile_edit_basic_data">Basic data</string>
+    <string name="profile_personal_profile">Personal profile</string>
+    <string name="profile_more_information">More information</string>
+    <string name="profile_voice_introduction">Voice introduction</string>
+    <string name="profile_occupation">Occupation</string>
+    <string name="profile_height">Height</string>
+    <string name="profile_weight">Weight</string>
+    <string name="profile_nick_name_empty_tips">Nickname cannot be empty.</string>
+    <string name="profile_edit_nick_name">Edit nickName</string>
+    <string name="profile_please_select">Please select</string>
+    <string name="profile_recorded">Recorded</string>
+    <string name="profile_goto_record">Go to record</string>
+    <string name="profile_profile_empty_tips">Fill in your self-introduction to make others more interested in you!</string>
+    <string name="profile_upload_pic_guide">Upload pictures to Instagram for more exposure</string>
+    <string name="profile_voice_auth_title">Voice Authentication</string>
+    <string name="profile_voice_record_tips">Record a piece of your own voice~</string>
+    <string name="profile_voice_hold_to_speek">Hold to speek</string>
+    <string name="profile_recording">Recording</string>
+    <string name="profile_record_completed">Recording completed</string>
+    <string name="profile_re_record">Re-recording</string>
+    <string name="profile_record_permission_tips">Please grant recording permission so you can send voice messages.</string>
+    <string name="profile_record_change_tips">You have unsaved recording changes. Do you want to save them?</string>
 </resources>

+ 4 - 1
module/userprotect/src/main/java/com/adealink/weparty/userprotect/manager/ReportManager.kt

@@ -270,7 +270,10 @@ class ReportManager : BaseFrame<IListener>(), IReportManager {
         val builder = CommonTextActionDialog.Builder()
 
         if (showUnFollowAction){
-            builder.addItem(R.id.key_profile_user_follow, "Unfollow")
+            builder.addItem(
+                R.id.key_profile_user_follow,
+                getCompatString(R.string.profile_unfollow)
+            )
         }
         if (showSpecialFollowAction) {
             if (!isSpecialFollowed) {

+ 1 - 0
module/userprotect/src/main/res/values-ar/strings.xml

@@ -51,4 +51,5 @@
     <string name="user_protect_note_nickname">سجل لقب الصديق</string>
     <string name="nickname_input_hint">أدخل لقب الصديق</string>
     <string name="nickname_input_limit">يمكن إدخال %s حرفًا كحد أقصى.</string>
+    <string name="profile_unfollow">إلغاء المتابعة</string>
 </resources>

+ 1 - 0
module/userprotect/src/main/res/values-zh/strings.xml

@@ -51,4 +51,5 @@
     <string name="user_protect_note_nickname">记下好友昵称</string>
     <string name="nickname_input_hint">输入Ta的昵称</string>
     <string name="nickname_input_limit">最多输入 %s 个字符</string>
+    <string name="profile_unfollow">取消关注</string>
 </resources>

+ 1 - 0
module/userprotect/src/main/res/values/strings.xml

@@ -51,4 +51,5 @@
     <string name="user_protect_note_nickname">Note friend nickname</string>
     <string name="nickname_input_limit">Enter up to %s characters</string>
     <string name="nickname_input_hint">Enter nickname about Ta</string>
+    <string name="profile_unfollow">Unfollow</string>
 </resources>

+ 1 - 1
tool/translate/synxml.py

@@ -31,7 +31,7 @@ ios_root_directory = os.path.abspath(os.path.join(os.getcwd(), os.pardir, os.par
 ios_languages = ['ar', 'en', 'hi', 'ta', 'te', 'th', 'tr', 'zh-Hans']
 #andorid_language = ['', '-ar', '-hi', '-ta', '-te', '-th', '-tr', '-zh']
 # andorid_language = ['', '-ar','-hi','-bn','-es','-in','-ms','-pt','-th','-tl','-tr','-ur','-vi','-zh','-zh-TW']ru	kk	ky	tk	tg	uz
-andorid_language = ['','-zh', '-ar', '-bn', '-es', '-hi', '-in', '-ms', '-pt', '-ta', '-te', '-th', '-tl', '-tr', '-ur', '-vi', '-zh-TW', '-ru','-kk','-ky','-tk','-tg','-uz']
+andorid_language = ['','-zh', '-ar']
 
 #xml对CDATA解析有点问题, CDATA 数据需要在这里添加key手动处理
 andorid_contian_cdata_keys = ['room_high_potential_conversion_reward','ludo_exit_game_tip','message_follow',