feat: Add multi-language support

- Create Chinese, English, Japanese, Korean string resources
- Add LanguageManager for language management
- Add language selection dropdown in Settings
- Update all layouts to use string resources
- Support app restart prompt for language change
This commit is contained in:
2026-05-24 13:29:16 +08:00
parent 48fbf1564d
commit f5789e0d7d
10 changed files with 426 additions and 35 deletions
@@ -28,7 +28,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Data Collection"
android:text="@string/data_collection"
android:textSize="18sp"
android:textStyle="bold" />
@@ -43,7 +43,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="GPS Data" />
android:text="@string/gps_data_label" />
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/switchGps"
@@ -55,7 +55,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="GPS Sampling Rate (Hz)" />
android:text="@string/gps_sampling_rate" />
<com.google.android.material.slider.Slider
android:id="@+id/sliderGpsRate"
@@ -76,7 +76,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Sensor Data" />
android:text="@string/sensor_data_label" />
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/switchSensor"
@@ -88,7 +88,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Sensor Sampling Rate (Hz)" />
android:text="@string/sensor_sampling_rate" />
<com.google.android.material.slider.Slider
android:id="@+id/sliderSensorRate"
@@ -117,7 +117,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Display"
android:text="@string/display"
android:textSize="18sp"
android:textStyle="bold" />
@@ -132,7 +132,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Map Display" />
android:text="@string/map_display" />
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/switchMap"
@@ -163,7 +163,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Default Map Type" />
android:text="@string/default_map_type" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
@@ -175,7 +175,26 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none"
android:hint="Select Map Type" />
android:hint="@string/select_map_type" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/language" />
<com.google.android.material.textfield.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp">
<com.google.android.material.textfield.AutoCompleteTextView
android:id="@+id/tvLanguage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none"
android:hint="@string/select_language" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
@@ -196,7 +215,7 @@
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="About"
android:text="@string/about"
android:textSize="18sp"
android:textStyle="bold" />