Explorar el Código

1: 全局,控制台入口复杂化处理;改为划2圈.
2: 语言设置,选项顺序调整为:英语、日语、中文.
3: 连接设备页面,中文下,“智能手枪”应改为“智能枪”.
4: 语言选英文,用户个人信息设置页面,字段名“手机号”、“昵称”、“地区”、“性别”、“生日”显示是中文,而语言选中文的情况下,反而这几项变成英文,要改.

slambb hace 5 días
padre
commit
cd595df2d0

+ 2 - 1
Assets/BowArrow/Resources/Prefabs/LogReporter.prefab

@@ -28,6 +28,7 @@ Transform:
   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
   m_Children: []
   m_Father: {fileID: 0}
   m_RootOrder: 0
@@ -80,7 +81,7 @@ MonoBehaviour:
     reporterScrollerSkin: {fileID: 11400000, guid: 1cc68832d00d3284a9324a4dc05be753, type: 2}
   size: {x: 32, y: 32}
   maxSize: 20
-  numOfCircleToShow: 1
+  numOfCircleToShow: 2
   Initialized: 0
 --- !u!114 &3759241526236595414
 MonoBehaviour:

+ 257 - 194
Assets/BowArrow/Scripts/Components/TextAutoLanguage.cs

@@ -3,6 +3,7 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
+using TMPro;
 /* 自定义多语言组件 */
 public class TextAutoLanguage : MonoBehaviour
 {
@@ -87,28 +88,91 @@ public class TextAutoLanguage : MonoBehaviour
             text = String.Format(text, textFormatArgs);
         }
         Text textComp = GetComponent<Text>();
-        textComp.text = text;
-        //如果有指定当前语言的字体大小,就更新字体大小,否则恢复默认字体大小
-        if (defaultFontSize == -1) { //首次记录组件的默认字体大小
-            defaultFontSize = textComp.fontSize;
-        } else {
-            textComp.fontSize = defaultFontSize;
-        }
-        if (languageFontSizes.Length > 0) {
-            foreach (var languageFontSize in languageFontSizes)
+        if (textComp != null)
+        {
+            textComp.text = text;
+            //如果有指定当前语言的字体大小,就更新字体大小,否则恢复默认字体大小
+            if (defaultFontSize == -1)
+            { //首次记录组件的默认字体大小
+                defaultFontSize = textComp.fontSize;
+            }
+            else
+            {
+                textComp.fontSize = defaultFontSize;
+            }
+            if (languageFontSizes.Length > 0)
             {
-                if (languageFontSize.language == currentLanguageEnum) {
-                    textComp.fontSize = languageFontSize.fontSize;
+                foreach (var languageFontSize in languageFontSizes)
+                {
+                    if (languageFontSize.language == currentLanguageEnum)
+                    {
+                        textComp.fontSize = languageFontSize.fontSize;
+                    }
                 }
             }
+            //重置指定节点的布局
+            if (layoutRebuildObject)
+            {
+                LayoutRebuilder.ForceRebuildLayoutImmediate(layoutRebuildObject);
+            }
+            return;
         }
-        //重置指定节点的布局
+
+        ApplyLocalizationToTmpText(text);
         if (layoutRebuildObject)
         {
             LayoutRebuilder.ForceRebuildLayoutImmediate(layoutRebuildObject);
         }
     }
 
+    /// <summary>
+    /// 与 <see cref="TextAutoLanguage2"/> 一致:同物体上的 <see cref="TMP_InputField"/> 优先写 placeholder(提示语)或 textComponent;否则写 <see cref="TextMeshProUGUI"/>。
+    /// </summary>
+    static TMP_Text ResolveTmpTextTarget(TMP_InputField inputField, TextMeshProUGUI tmpOnSameObject)
+    {
+        if (inputField != null)
+        {
+            if (inputField.placeholder != null && inputField.placeholder is TMP_Text placeholderTmp)
+                return placeholderTmp;
+            if (inputField.textComponent != null)
+                return inputField.textComponent;
+            return tmpOnSameObject;
+        }
+        return tmpOnSameObject;
+    }
+
+    void ApplyLocalizationToTmpText(string text)
+    {
+        TMP_InputField tmpInput = GetComponent<TMP_InputField>();
+        TextMeshProUGUI tmpUgUi = GetComponent<TextMeshProUGUI>();
+        TMP_Text tmpTarget = ResolveTmpTextTarget(tmpInput, tmpUgUi);
+        if (tmpTarget == null)
+            return;
+
+        tmpTarget.text = text;
+
+        if (defaultFontSize == -1)
+        {
+            defaultFontSize = (int)tmpTarget.fontSize;
+        }
+        else
+        {
+            tmpTarget.fontSize = defaultFontSize;
+        }
+        if (languageFontSizes.Length > 0)
+        {
+            foreach (var languageFontSize in languageFontSizes)
+            {
+                if (languageFontSize.language == currentLanguageEnum)
+                {
+                    if (languageFontSize.fontSize > 0) tmpTarget.fontSize = languageFontSize.fontSize;
+                    if (languageFontSize.lineSpacing > 0) tmpTarget.lineSpacing = languageFontSize.lineSpacing;
+                    break;
+                }
+            }
+        }
+    }
+
     public int GetTextID()
     {
         return this.textID;
@@ -531,207 +595,206 @@ class LanguageEnglish : LanguageDefault {
 
 class LanguageJapan: LanguageDefault
 {
-    public string text0 = "";
-    public string text1 = "ニックネーム :";
-    public string text2 = "携帯番号 :";
-    public string text3 = "性別 :";
-    public string text4 = "生年月日 :";
-    public string text5 = "国籍 :";
-    public string text6 = "地域 :";
-    public string text7 = "保存";
-    public string text8 = "男性";
-    public string text9 = "女性";
-    public string text10 = "未入力";
-    public string text11 = "ニックネームは必須です";
-    public string text12 = "保存に成功しました";
-    public string text13 = "マイページ";
-    public string text14 = "接続";
-    public string text15 = "接続中";
-    public string text16 = "接続成功";
-    public string text17 = "接続解除";
-    public string text18 = "神弓";
-    public string text19 = "神箭";
-    public string text20 = "設定";
-    public string text21 = "チュートリアル";
-    public string text22 = "ショップ";
-    public string text23 = "デバイス";
-    public string text24 = "アカウント :";
-    public string text25 = "パスワード :";
-    public string text26 = "パスワードを忘れた";
-    public string text27 = "新規登録";
-    public string text28 = "アカウント :";
-    public string text29 = "パスワード :";
-    public string text30 = "パスワード確認 :";
-    public string text31 = "ニックネーム :";
-    public string text32 = "性別 :";
-    public string text33 = "ログイン";
-    public string text34 = "携帯番号 :";
-    public string text35 = "認証コード :";
-    public string text36 = "新しいパスワード :";
-    public string text37 = "確認パスワード :";
-    public string text38 = "取得";
-    public string text39 = "アカウント";
-    public string text40 = "携帯番号";
-    public string text41 = "アカウントを入力してください";
-    public string text42 = "パスワードを入力してください";
-    public string text43 = "ログイン成功";
-    public string text44 = "パスワードが間違っています";
-    public string text45 = "ユーザーが登録されていません";
-    public string text46 = "アカウントは6文字以上必要です";
-    public string text47 = "パスワードは6文字以上必要です";
-    public string text48 = "2回のパスワードが一致しません";
-    public string text49 = "ゲームのニックネームを入力してください";
-    public string text50 = "このユーザーはすでに登録されています";
-    public string text51 = "登録成功";
-    public string text61 = "デバイスを接続してください";
-    public string text62 = "閉じる";
-    public string text63 = "商品";
-    public string text64 = "バッグ";
-    public string text65 = "装備中";
-    public string text66 = "購入";
-    public string text67 = "属性";
-    public string text68 = "操作難易度 : ";
-    public string text69 = "デバイスチュートリアル";
-    public string text70 = "ゲームチュートリアル";
-    public string text71 = "キャラクター選択";
-    public string text72 = "プレイヤー1";
-    public string text73 = "プレイヤー2";
-    public string text74 = "ゲーム開始";
-    public string text87 = "今回のプレイヤー";
-    public string text88 = "続ける";
-    public string text89 = "ホーム";
-    public string text90 = "共有";
-    public string text91 = "もう一度";
-    public string text92 = "フレンド戦";
-    public string text93 = "現在のプレイヤー";
-    public string text94 = "距離を選択";
-    public string text95 = "得点:";
-    public string text96 = "初心者チュートリアル";
-    public string text97 = "ホームへ戻る";
-    public string text98 = "完了";
-    public string text99 = "ステージモード";
-    public string text100 = "タイムアタック";
-    public string text101 = "ランキング";
-    public string text102 = "ゲーム";
-    public string text103 = "連携";
-    public string text104 = "終了";
-    public string text105 = "勝利";
-    public string text106 = "失敗";
-    public string text107 = "売り切れ";
-    public string text108 = "使用";
-    public string text109 = "使用中";
-    public string text110 = "キャンセル";
-    public string text111 = "スコープを装備してください";
-    public string text112 = "射速カードを装備してください";
-    public string text113 = "弓";
-    public string text114 = "矢";
-    public string text115 = "第 {0} ラウンド";
-    public string text117 = "{0}~{1}文字、英数字のみ使用可能";
-    public string text118 = "的が射程外です。引きを強くするか、ショップで射速カードを購入してください!";
-    public string text119 = "{0}~{1}文字、中国語も使用可能";
+    public new string text0 = "";
+    public new string text1 = "ニックネーム :";
+    public new string text2 = "携帯番号 :";
+    public new string text3 = "性別 :";
+    public new string text4 = "生年月日 :";
+    public new string text5 = "国籍 :";
+    public new string text6 = "地域 :";
+    public new string text7 = "保存";
+    public new string text8 = "男性";
+    public new string text9 = "女性";
+    public new string text10 = "未入力";
+    public new string text11 = "ニックネームは必須です";
+    public new string text12 = "保存に成功しました";
+    public new string text13 = "マイページ";
+    public new string text14 = "接続";
+    public new string text15 = "接続中";
+    public new string text16 = "接続成功";
+    public new string text17 = "接続解除";
+    public new string text18 = "神弓";
+    public new string text19 = "神箭";
+    public new string text20 = "設定";
+    public new string text21 = "チュートリアル";
+    public new string text22 = "ショップ";
+    public new string text23 = "デバイス";
+    public new string text24 = "アカウント :";
+    public new string text25 = "パスワード :";
+    public new string text26 = "パスワードを忘れた";
+    public new string text27 = "新規登録";
+    public new string text28 = "アカウント :";
+    public new string text29 = "パスワード :";
+    public new string text30 = "パスワード確認 :";
+    public new string text31 = "ニックネーム :";
+    public new string text32 = "性別 :";
+    public new string text33 = "ログイン";
+    public new string text34 = "携帯番号 :";
+    public new string text35 = "認証コード :";
+    public new string text36 = "新しいパスワード :";
+    public new string text37 = "確認パスワード :";
+    public new string text38 = "取得";
+    public new string text39 = "アカウント";
+    public new string text40 = "携帯番号";
+    public new string text41 = "アカウントを入力してください";
+    public new string text42 = "パスワードを入力してください";
+    public new string text43 = "ログイン成功";
+    public new string text44 = "パスワードが間違っています";
+    public new string text45 = "ユーザーが登録されていません";
+    public new string text46 = "アカウントは6文字以上必要です";
+    public new string text47 = "パスワードは6文字以上必要です";
+    public new string text48 = "2回のパスワードが一致しません";
+    public new string text49 = "ゲームのニックネームを入力してください";
+    public new string text50 = "このユーザーはすでに登録されています";
+    public new string text51 = "登録成功";
+    public new string text61 = "デバイスを接続してください";
+    public new string text62 = "閉じる";
+    public new string text63 = "商品";
+    public new string text64 = "バッグ";
+    public new string text65 = "装備中";
+    public new string text66 = "購入";
+    public new string text67 = "属性";
+    public new string text68 = "操作難易度 : ";
+    public new string text69 = "デバイスチュートリアル";
+    public new string text70 = "ゲームチュートリアル";
+    public new string text71 = "キャラクター選択";
+    public new string text72 = "プレイヤー1";
+    public new string text73 = "プレイヤー2";
+    public new string text74 = "ゲーム開始";
+    public new string text87 = "今回のプレイヤー";
+    public new string text88 = "続ける";
+    public new string text89 = "ホーム";
+    public new string text90 = "共有";
+    public new string text91 = "もう一度";
+    public new string text92 = "フレンド戦";
+    public new string text93 = "現在のプレイヤー";
+    public new string text94 = "距離を選択";
+    public new string text95 = "得点:";
+    public new string text96 = "初心者チュートリアル";
+    public new string text97 = "ホームへ戻る";
+    public new string text98 = "完了";
+    public new string text99 = "ステージモード";
+    public new string text100 = "タイムアタック";
+    public new string text101 = "ランキング";
+    public new string text102 = "ゲーム";
+    public new string text103 = "連携";
+    public new string text104 = "終了";
+    public new string text105 = "勝利";
+    public new string text106 = "失敗";
+    public new string text107 = "売り切れ";
+    public new string text108 = "使用";
+    public new string text109 = "使用中";
+    public new string text110 = "キャンセル";
+    public new string text111 = "スコープを装備してください";
+    public new string text112 = "射速カードを装備してください";
+    public new string text113 = "弓";
+    public new string text114 = "矢";
+    public new string text115 = "第 {0} ラウンド";
+    public new string text117 = "{0}~{1}文字、英数字のみ使用可能";
+    public new string text118 = "的が射程外です。引きを強くするか、ショップで射速カードを購入してください!";
+    public new string text119 = "{0}~{1}文字、中国語も使用可能";
     // デバイスページ
-    public string text500 = "ジャイロ初期化";
-    public string text501 = "地磁気センサー初期化";
-    public string text502 = "視点リセット";
-    public string text503 = "16G加速度計";
-    public string text504 = "64G加速度計";
+    public new string text500 = "ジャイロ初期化";
+    public new string text501 = "地磁気センサー初期化";
+    public new string text502 = "視点リセット";
+    public new string text503 = "16G加速度計";
+    public new string text504 = "64G加速度計";
     // メインページ
-    public string text122 = "ランキング";
-    public string text123 = "フレンド";
-    public string text124 = "ゲーム開始";
-    public string text125 = "オンライン対戦";
+    public new string text122 = "ランキング";
+    public new string text123 = "フレンド";
+    public new string text124 = "ゲーム開始";
+    public new string text125 = "オンライン対戦";
     // マイページ
-    public string text126 = "ID :";
+    public new string text126 = "ID :";
     // ゲーム開始
-    public string text133 = "ゲーム開始";
-    public string text127 = "ステージモード";
-    public string text128 = "タイムアタック";
-    public string text129 = "PKゲーム";
+    public new string text133 = "ゲーム開始";
+    public new string text127 = "ステージモード";
+    public new string text128 = "タイムアタック";
+    public new string text129 = "PKゲーム";
     // PKモード選択
-    public string text132 = "PKモード";
-    public string text130 = "静止ターゲットPK";
-    public string text131 = "ステージPK";
-    public string text401 = "ステージ選択";
+    public new string text132 = "PKモード";
+    public new string text130 = "静止ターゲットPK";
+    public new string text131 = "ステージPK";
+    public new string text401 = "ステージ選択";
     // ステージ選択
-    public string text134 = "ゲームモード";
-    public string text135 = "ウサギステージ";
-    public string text136 = "ニワトリステージ";
-    public string text137 = "オオカミステージ";
+    public new string text134 = "ゲームモード";
+    public new string text135 = "ウサギステージ";
+    public new string text136 = "ニワトリステージ";
+    public new string text137 = "オオカミステージ";
     // 設定ページ
-    public string text302 = "BGM";
-    public string text303 = "効果音";
-    public string text304 = "言語";
-    public string text305 = "簡体字中国語";
-    public string text306 = "クロスヘア";
-    public string text307 = "オン";
-    public string text308 = "オフ";
-    public string text309 = "射撃難易度";
-    public string text310 = "簡単";
-    public string text311 = "普通";
-    public string text312 = "難しい";
-    public string text313 = "実際の矢の重さ";
-    public string text314 = "{0}グラム";
+    public new string text302 = "BGM";
+    public new string text303 = "効果音";
+    public new string text304 = "言語";
+    public new string text305 = "簡体字中国語";
+    public new string text306 = "クロスヘア";
+    public new string text307 = "オン";
+    public new string text308 = "オフ";
+    public new string text309 = "射撃難易度";
+    public new string text310 = "簡単";
+    public new string text311 = "普通";
+    public new string text312 = "難しい";
+    public new string text313 = "実際の矢の重さ";
+    public new string text314 = "{0}グラム";
     // 設定ページその2
-    public string text315 = "ゲーム設定";
-    public string text318 = "初心者ガイド";
-    public string text301 = "私たちについて";
-    public string text316 = "利用規約";
-    public string text317 = "プライバシーポリシー";
-    public string text300 = "ログアウト";
-    public string text400 = "ゲーム終了";
+    public new string text315 = "ゲーム設定";
+    public new string text318 = "初心者ガイド";
+    public new string text301 = "私たちについて";
+    public new string text316 = "利用規約";
+    public new string text317 = "プライバシーポリシー";
+    public new string text300 = "ログアウト";
+    public new string text400 = "ゲーム終了";
     // デバイスキャリブレーション
-    public string text76 = "視点リセット";
-    public string text77 = "前へ";
-    public string text78 = "次へ";
-    public string text79 = "完了";
-    public string text80 = "視点回正";
-    public string text81 = "実際の弓を正面に向け、「視点回正」を押してください。";
-    public string text82 = "初期化開始";
-    public string text83 = "初期化停止";
-    public string text84 = "XYZ三軸の円形ができるまで多角度で回転させてください。";
-    public string text85 = "初期化開始";
-    public string text86 = "キャリブレーション中はデバイスを静止させてください。";
-    public string text116 = "再初期化";
-    public string text120 = "キャリブレーションがうまくいきません。再試行してください!";
-    public string text121 = "初期化をキャンセル";
+    public new string text76 = "視点リセット";
+    public new string text77 = "前へ";
+    public new string text78 = "次へ";
+    public new string text79 = "完了";
+    public new string text80 = "視点回正";
+    public new string text81 = "実際の弓を正面に向け、「視点回正」を押してください。";
+    public new string text82 = "初期化開始";
+    public new string text83 = "初期化停止";
+    public new string text84 = "XYZ三軸の円形ができるまで多角度で回転させてください。";
+    public new string text85 = "初期化開始";
+    public new string text86 = "キャリブレーション中はデバイスを静止させてください。";
+    public new string text116 = "再初期化";
+    public new string text120 = "キャリブレーションがうまくいきません。再試行してください!";
+    public new string text121 = "初期化をキャンセル";
     // ゲーム共通UI
-    public string text200 = "ガイド";
-    public string text201 = "スコープON";
-    public string text202 = "加速";
-    public string text203 = "視点リセット";
-    public string text204 = "的を確認";
-    public string text205 = "閉じる";
+    public new string text200 = "ガイド";
+    public new string text201 = "スコープON";
+    public new string text202 = "加速";
+    public new string text203 = "視点リセット";
+    public new string text204 = "的を確認";
+    public new string text205 = "閉じる";
 
     // ゲームルール
-    public string text1000 = "制限時間内にできるだけ多くの矢を射ちましょう。";
-    public string text1001 = "総得点が徐々に増え、自分の記録に挑戦します。";
-    public string text2000 = "2人で交互に矢を放ち、オリンピックルールで対戦します。";
-    public string text2001 = "最大5ラウンド、各ラウンド3本の矢を交互に射ちます。";
-    public string text2002 = "勝者に2点、引き分けは各1点、敗者は0点です。";
-    public string text2003 = "先に6点を取った方が勝利。5ラウンド終了で同点の場合、1本勝負で決着します。";
+    public new string text1000 = "制限時間内にできるだけ多くの矢を射ちましょう。";
+    public new string text1001 = "総得点が徐々に増え、自分の記録に挑戦します。";
+    public new string text2000 = "2人で交互に矢を放ち、オリンピックルールで対戦します。";
+    public new string text2001 = "最大5ラウンド、各ラウンド3本の矢を交互に射ちます。";
+    public new string text2002 = "勝者に2点、引き分けは各1点、敗者は0点です。";
+    public new string text2003 = "先に6点を取った方が勝利。5ラウンド終了で同点の場合、1本勝負で決着します。";
 
     // アイテム名
-    public string text101000 = "{0}倍スコープ";
-    public string text101001 = "{0}倍射速カード";
-
+    public new string text101000 = "{0}倍スコープ";
+    public new string text101001 = "{0}倍射速カード";
     // アイテム説明
-    public string text111000 = "照準時、視野が{0}倍に拡大されます。";
-    public string text111001 = "矢を射つ速度が{0}倍に上がります。";
+    public new string text111000 = "照準時、視野が{0}倍に拡大されます。";
+    public new string text111001 = "矢を射つ速度が{0}倍に上がります。";
 
     // デバイス名
-    public string text200000 = "リカーブボウ";
-    public string text201000 = "18ポンド リカーブボウ";
-    public string text201001 = "25ポンド リカーブボウ";
-    public string text201002 = "カーボンアロー";
+    public new string text200000 = "リカーブボウ";
+    public new string text201000 = "18ポンド リカーブボウ";
+    public new string text201001 = "25ポンド リカーブボウ";
+    public new string text201002 = "カーボンアロー";
 
     // デバイス説明
-    public string text211000 = "オリンピック競技用のリカーブボウ";
-    public string text211001 = "オリンピック競技用のリカーブボウ";
-    public string text211002 = "オリンピック競技用の矢";
+    public new string text211000 = "オリンピック競技用のリカーブボウ";
+    public new string text211001 = "オリンピック競技用のリカーブボウ";
+    public new string text211002 = "オリンピック競技用の矢";
 
     // 審査用一時テキスト
-    public string text1234560 = "基本設定";
-    public string text1234561 = "アプリ終了";
-    public string text1234562 = "開始";
-    public string text1234563 = "オンライン";
+    public new string text1234560 = "基本設定";
+    public new string text1234561 = "アプリ終了";
+    public new string text1234562 = "開始";
+    public new string text1234563 = "オンライン";
 }

+ 21 - 2
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/Japan.json

@@ -17,7 +17,10 @@
   "common_code": "コード",
   "common_update_successful": "更新成功",
   "common_update_failed": "更新失敗",
-
+  
+  "appui-module-confirm":"続ける",
+  "appui-guest-mode":"ゲストモード",
+	
   "modal-confirm-default": "了解",
 
   "gps_nopermission-tip": "位置承認が失敗、または許可されていません。",
@@ -41,6 +44,10 @@
   "login_placeholder_phone": "電話番号入力",
   "login_password_tip": "確認パスワードが一致しません。再入力してください。",
   "login_forgot_password": "パスワードを入力を忘れましたか?",
+  "appui-email-phone":"EmailまたはPhone",
+  "appui-login-new-user":"新規ユーザー、<b><size=120%>今すぐ登録</size></b>",
+  "appui-login-login-now":"アカウントがあります。<b><size=120%>ログイン</size></b>する",
+  
   "register_title": "サインアップ",
   "register_title_birthday": "生年月日:",
   "register_title_region": "住所:",
@@ -54,7 +61,18 @@
   "register_phone_placeholder": "電話番号をクリック",
   "register_line_tip": "2つのうちの1つを選択する",
   "register_button": "入る",
-
+  "appui-register":"サインアップ",
+  "appui-resend":"OTPを受信していない?<b><size=120%>再送信</size></b> {0} ",
+  
+  "appui-verify-title":"アカウントを確認する",
+  "appui-verify-tip":"登録済みのメールアドレス宛に送信した6桁の認証コードを入力してください。",
+  "appui-verification":"検証",
+   
+  "appui-profile-title1":"プロフィールを初期化",
+  "appui-profile-title2":"詳細なプロフィール設定は後で完了できます。",
+  "appui-profile-name":"ニックネーム(必須)",
+  "appui-profile-avatar":"アバターを選択(任意)",
+  
   "home_loginAuth": "ログインを認証しています...",
   "home_loginAuthRetry": "ログインの認証(ネットワーク・エラー、再試行{0}回)",
   "home_loginAuthFail": "ネットワークが異常ですので、後でもう一度やり直してください。",
@@ -558,6 +576,7 @@
   "PersonalLabelRegion": "地域",
   "PersonalLabelGender": "ジェンダー",
   "PersonalLabelBirthday": "生年月日",
+  "PersonalLabelEmail": "メール",
 
   /**
   好友頁面

+ 25 - 6
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/cn.json

@@ -18,6 +18,9 @@
   "common_update_successful": "更新成功!",
   "common_update_failed": "更新失败!",
 
+  "appui-module-confirm":"继续",
+  "appui-guest-mode":"游客模式",
+  
   "modal-confirm-default": "知道了",
 
   "gps_nopermission-tip": "我们需要您的定位,但获取失败。\n原因:您尚未授予定位权限。",
@@ -41,6 +44,10 @@
   "login_placeholder_phone": "请输入您的手机号",
   "login_password_tip": "两次输入密码不一致,请重新输入",
   "login_forgot_password": "忘记密码?",
+  "appui-email-phone":"电子邮件或电话",
+  "appui-login-new-user":"新用户,立即<b><size=120%>注册</size></b>。",
+  "appui-login-login-now":"我已注册账号,去<b><size=120%>登录</size></b>。",
+	
   "register_title": "注册账号",
   "register_title_birthday": "出生日期:",
   "register_title_region": "所在地区:",
@@ -54,6 +61,17 @@
   "register_phone_placeholder": "点击绑定您的手机号",
   "register_line_tip": "只需要二选一",
   "register_button": "注册",
+  "appui-register":"注册",
+  "appui-resend":"未收到验证码?<b><size=120%>重新发送</size></b> {0} ",
+  
+  "appui-verify-title":"验证您的账户",
+  "appui-verify-tip":"请输入我们发送到您注册邮箱的6位验证码。",
+  "appui-verification":"验证",
+  
+  "appui-profile-title1":"初始化您的个人资料",
+  "appui-profile-title2":"详细的个人资料设置可以稍后完成。",
+  "appui-profile-name":"昵称(必填)",
+  "appui-profile-avatar":"选择头像(可选)",
 
   "home_loginAuth": "正在认证登录。。。",
   "home_loginAuthRetry": "正在认证登录\n(网络出错,重试{0}次)",
@@ -446,7 +464,7 @@
   "Connect_BLE_NotConnected": "未连接",
 
   "Connect_Btn_Archery": "智能弓箭",
-  "Connect_Btn_Gun": "智能枪",
+  "Connect_Btn_Gun": "智能枪",
 
   "Connect_Btn_Screen": "屏幕定位",
   "Connect_Btn": "连接设备",
@@ -509,11 +527,12 @@
   "Personal_RecordTime": "玩了超过 ",
   "Personal_RecordTime2": "{0}时{1}分{2}秒",
 
-  "PersonalLabelMobile": "Mobile",
-  "PersonalLabelNickname": "Nickname",
-  "PersonalLabelRegion": "Region",
-  "PersonalLabelGender": "Gender",
-  "PersonalLabelBirthday": "Birthday",
+  "PersonalLabelMobile": "手机号",
+  "PersonalLabelNickname": "昵称",
+  "PersonalLabelRegion": "地区",
+  "PersonalLabelGender": "性别",
+  "PersonalLabelBirthday": "生日",
+  "PersonalLabelEmail": "邮箱",
 
   /**
   好友頁面

+ 27 - 8
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/Resources/TextAutoLanguage2/en.json

@@ -17,7 +17,10 @@
   "common_code": "Verification code",
   "common_update_successful": "upload successful!",
   "common_update_failed": "upload failed!",
-
+  
+  "appui-module-confirm":"Try Again",
+  "appui-guest-mode":"Guest Mode",
+  
   "modal-confirm-default": "OK",
 
   "gps_nopermission-tip": "We need your positioning, but the acquisition failed.\nReason: You have not granted location permission.",
@@ -41,7 +44,10 @@
   "login_placeholder_phone": "Please Input Your Phone",
   "login_password_tip": "The two passwords entered do not match. Please re-enter",
   "login_forgot_password": "Forgot Password?",
-
+  "appui-email-phone":"Email or Phone",
+  "appui-login-new-user":"New User, <b><size=120%>Sign Up</size></b> Now",
+  "appui-login-login-now":"I Have Account,<b><size=120%>Login </size></b>Now",
+  
   "register_title": "Register An Account",
   "register_title_birthday": "Birthday :",
   "register_title_region": "Region :",
@@ -55,7 +61,19 @@
   "register_phone_placeholder": "Click to bind your mobile number",
   "register_line_tip": "Choose one\nfrom them",
   "register_button": "Register",
-
+  "appui-register":"Sign Up",
+  "appui-resend":"Don't receive OTP? <b><size=120%>RESEND</size></b> {0} ",
+  
+  "appui-verify-title":"Verify Your Account",
+  "appui-verify-tip":"Enter the 6-digit verification code we sent to your registered email.",
+  "appui-verification":"verification",
+  
+  "appui-profile-title1":"Initialize Your Profile",
+  "appui-profile-title2":"Detailed profile settings can be completed later.",
+  "appui-profile-name":"Nickname (Required)",
+  "appui-profile-avatar":"Select a Avatar (Optional)",
+  
+  
   "home_loginAuth": "Authenticating Login ...",
   "home_loginAuthRetry": "Authenticating Login\n(Network error, retry {0} time)",
   "home_loginAuthFail": "The network is abnormal. Please try again later.",
@@ -560,11 +578,12 @@
   "Personal_RecordTime": "played more than ",
   "Personal_RecordTime2": "{0}h{1}m{2}s",
 
-  "PersonalLabelMobile": "手机号",
-  "PersonalLabelNickname": "昵称",
-  "PersonalLabelRegion": "地区",
-  "PersonalLabelGender": "性别",
-  "PersonalLabelBirthday": "生日",
+  "PersonalLabelMobile": "Mobile",
+  "PersonalLabelNickname": "Nickname",
+  "PersonalLabelRegion": "Region",
+  "PersonalLabelGender": "Gender",
+  "PersonalLabelBirthday": "Birthday",
+  "PersonalLabelEmail": "Email",
 
   /**
   好友頁面

+ 52 - 25
Assets/BowArrow/Scripts/Components/TextAutoLanguage2/TextAutoLanguage2.cs

@@ -135,37 +135,64 @@ public class TextAutoLanguage2 : MonoBehaviour
                 LayoutRebuilder.ForceRebuildLayoutImmediate(layoutRebuildObject);
             }
         } else {
-            TextMeshProUGUI textMeshProUGUI = GetComponent<TextMeshProUGUI>();
-            textMeshProUGUI.text = text;
-            //如果是中文,设置一个间距
-            //if (currentLanguageEnum == LanguageEnum.Chinese)
-            //{
-            //   textMeshProUGUI.lineSpacing = 31;
-            //}
+            ApplyLocalizationToTmpText(text);
+        }
+        
+    }
 
-            //如果有指定当前语言的字体大小,就更新字体大小,否则恢复默认字体大小
-            if (defaultFontSize == -1)
-            { //首次记录组件的默认字体大小
-                defaultFontSize = (int)textMeshProUGUI.fontSize;
-            }
-            else
-            {
-                textMeshProUGUI.fontSize = defaultFontSize;
-            }
-            if (languageFontSizes.Length > 0)
+    /// <summary>
+    /// 解析 TMP 文案目标:同物体上的 <see cref="TMP_InputField"/> 使用 placeholder(多为提示语)或 textComponent;
+    /// 否则使用同物体上的 <see cref="TextMeshProUGUI"/>(与普通 TMP 文本行为一致)。
+    /// </summary>
+    static TMP_Text ResolveTmpTextTarget(TMP_InputField inputField, TextMeshProUGUI tmpOnSameObject)
+    {
+        if (inputField != null)
+        {
+            if (inputField.placeholder != null && inputField.placeholder is TMP_Text placeholderTmp)
+                return placeholderTmp;
+            if (inputField.textComponent != null)
+                return inputField.textComponent;
+            return tmpOnSameObject;
+        }
+        return tmpOnSameObject;
+    }
+
+    void ApplyLocalizationToTmpText(string text)
+    {
+        TMP_InputField tmpInput = GetComponent<TMP_InputField>();
+        TextMeshProUGUI tmpUgUi = GetComponent<TextMeshProUGUI>();
+        TMP_Text tmpTarget = ResolveTmpTextTarget(tmpInput, tmpUgUi);
+        if (tmpTarget == null)
+            return;
+
+        tmpTarget.text = text;
+        //如果是中文,设置一个间距
+        //if (currentLanguageEnum == LanguageEnum.Chinese)
+        //{
+        //   tmpTarget.lineSpacing = 31;
+        //}
+
+        //如果有指定当前语言的字体大小,就更新字体大小,否则恢复默认字体大小
+        if (defaultFontSize == -1)
+        { //首次记录组件的默认字体大小
+            defaultFontSize = (int)tmpTarget.fontSize;
+        }
+        else
+        {
+            tmpTarget.fontSize = defaultFontSize;
+        }
+        if (languageFontSizes.Length > 0)
+        {
+            foreach (var languageFontSize in languageFontSizes)
             {
-                foreach (var languageFontSize in languageFontSizes)
+                if (languageFontSize.language == currentLanguageEnum)
                 {
-                    if (languageFontSize.language == currentLanguageEnum)
-                    {
-                        if(languageFontSize.fontSize >0) textMeshProUGUI.fontSize = languageFontSize.fontSize;
-                        if (languageFontSize.lineSpacing > 0) textMeshProUGUI.lineSpacing = languageFontSize.lineSpacing;
-                        break;
-                    }
+                    if (languageFontSize.fontSize > 0) tmpTarget.fontSize = languageFontSize.fontSize;
+                    if (languageFontSize.lineSpacing > 0) tmpTarget.lineSpacing = languageFontSize.lineSpacing;
+                    break;
                 }
             }
         }
-        
     }
 
     public string GetTextKey()

+ 25 - 9
Assets/SmartBow/Resources/SmartBow/Prefabs/Views/Home/PersonalView.prefab

@@ -2316,7 +2316,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: -3.7100048}
+  m_AnchoredPosition: {x: 0, y: -3.710022}
   m_SizeDelta: {x: 32.679565, y: 32.73999}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &4518687568298449161
@@ -7511,6 +7511,7 @@ GameObject:
   - component: {fileID: 7327544348236523235}
   - component: {fileID: 7327544348236523246}
   - component: {fileID: 7327544348236523245}
+  - component: {fileID: 7228468044351796420}
   m_Layer: 5
   m_Name: Label
   m_TagString: Untagged
@@ -7580,6 +7581,21 @@ MonoBehaviour:
     m_VerticalOverflow: 1
     m_LineSpacing: 1
   m_Text: Email
+--- !u!114 &7228468044351796420
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 7327544348236523234}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 0f4efe98aab6c6b41a7ee1f4c49df27b, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  textKey: PersonalLabelEmail
+  layoutRebuildObject: {fileID: 0}
+  languageFontSizes: []
 --- !u!1 &7327544348339659688
 GameObject:
   m_ObjectHideFlags: 0
@@ -8066,7 +8082,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: -3.7100039}
+  m_AnchoredPosition: {x: 0, y: -3.710022}
   m_SizeDelta: {x: 32.67958, y: 32.73999}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &7327544348524453418
@@ -8249,7 +8265,7 @@ RectTransform:
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
   m_AnchoredPosition: {x: 0, y: 0}
-  m_SizeDelta: {x: 16.900024, y: 154.50891}
+  m_SizeDelta: {x: 16.900024, y: 51.85486}
   m_Pivot: {x: 0, y: 1}
 --- !u!114 &7327544348609726811
 MonoBehaviour:
@@ -8819,7 +8835,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: 0.0000076293945}
+  m_AnchoredPosition: {x: 0, y: 0}
   m_SizeDelta: {x: 0, y: -0.000011444092}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &7327544348771883433
@@ -8963,7 +8979,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 14.285, y: -14.4}
+  m_AnchoredPosition: {x: 14.285004, y: -14.400024}
   m_SizeDelta: {x: -28.57, y: -28.8}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &7327544348824070393
@@ -9201,7 +9217,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: -3.7100039}
+  m_AnchoredPosition: {x: 0, y: -3.710022}
   m_SizeDelta: {x: 32.679535, y: 32.73999}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &7327544348930607357
@@ -9826,7 +9842,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: -3.7100039}
+  m_AnchoredPosition: {x: 0, y: -3.710022}
   m_SizeDelta: {x: 32.679535, y: 32.73999}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &7327544349271826859
@@ -11158,7 +11174,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 0, y: -3.7100043}
+  m_AnchoredPosition: {x: 0, y: -3.710022}
   m_SizeDelta: {x: 32.679565, y: 32.73999}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &7327544349732744169
@@ -12037,7 +12053,7 @@ RectTransform:
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 0}
   m_AnchorMax: {x: 1, y: 1}
-  m_AnchoredPosition: {x: 28.57, y: -14.4}
+  m_AnchoredPosition: {x: 28.570007, y: -14.400024}
   m_SizeDelta: {x: -28.57, y: -28.8}
   m_Pivot: {x: 0, y: 0.5}
 --- !u!222 &7327544349934638976

+ 7 - 7
Assets/SmartBow/Resources/SmartBow/Prefabs/Views/Home/SettingsView.prefab

@@ -1744,11 +1744,11 @@ RectTransform:
   - {fileID: 4983345733124840055}
   - {fileID: 4079535887385847280}
   m_Father: {fileID: 3494904712208613346}
-  m_RootOrder: 2
+  m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 846, y: -640}
+  m_AnchoredPosition: {x: 846, y: -440}
   m_SizeDelta: {x: 1512, y: 180}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &5887684685952701246
@@ -7137,9 +7137,9 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_ConstrainProportionsScale: 0
   m_Children:
-  - {fileID: 3494904713469941440}
   - {fileID: 3494904712756068788}
   - {fileID: 838136967067820439}
+  - {fileID: 3494904713469941440}
   m_Father: {fileID: 3494904712772935964}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -10744,11 +10744,11 @@ RectTransform:
   - {fileID: 3494904711847392843}
   - {fileID: 3494904712218110143}
   m_Father: {fileID: 3494904712208613346}
-  m_RootOrder: 1
+  m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 846, y: -440}
+  m_AnchoredPosition: {x: 846, y: -240}
   m_SizeDelta: {x: 1512, y: 180}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &3494904712756068790
@@ -15073,11 +15073,11 @@ RectTransform:
   - {fileID: 3494904712623069742}
   - {fileID: 3494904712074877093}
   m_Father: {fileID: 3494904712208613346}
-  m_RootOrder: 0
+  m_RootOrder: 2
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0, y: 1}
   m_AnchorMax: {x: 0, y: 1}
-  m_AnchoredPosition: {x: 846, y: -240}
+  m_AnchoredPosition: {x: 846, y: -640}
   m_SizeDelta: {x: 1512, y: 180}
   m_Pivot: {x: 0.5, y: 0.5}
 --- !u!222 &3494904713469941442

+ 1 - 1
Assets/SmartBow/Scripts/Views/SettingsViewParts/BoxLanguage.cs

@@ -9,7 +9,7 @@ public class BoxLanguage : MonoBehaviour
     [SerializeField] Sprite spriteItemOff;
     [SerializeField] Transform layoutContent;
 
-    readonly static LanguageEnum[] Languages = { LanguageEnum.Chinese, LanguageEnum.English , LanguageEnum.Japan};
+    readonly static LanguageEnum[] Languages = { LanguageEnum.English , LanguageEnum.Japan , LanguageEnum.Chinese };
 
     void OnEnable()
     {