Browse Source

选择国家时的翻译

main
Mac 2 weeks ago
parent
commit
35a57985e3
  1. 3
      app/screens/CountrySelect.tsx
  2. 2
      app/screens/SearchResultScreen.tsx
  3. 3
      app/screens/loginList/ForgotPhonePassword.tsx
  4. 3
      app/screens/loginList/PhoneLoginModal.tsx
  5. 8
      app/screens/previewOrder/perviewOrder.tsx
  6. 9
      app/screens/productStatus/OrderDatails.tsx
  7. 133
      app/utils/languageUtils.ts

3
app/screens/CountrySelect.tsx

@ -20,6 +20,7 @@ import type { NativeStackNavigationProp } from '@react-navigation/native-stack';
import { RootStackParamList } from '../types/navigation';
import { settingApi } from '../services/api/setting';
import flagMap from '../utils/flagMap';
import { getCountryTransLanguage } from '../utils/languageUtils';
const SELECTED_COUNTRY_KEY = '@selected_country';
@ -87,7 +88,7 @@ export const CountrySelect = () => {
<Text style={[
styles.countryName,
selectedCountry === item.country && styles.selectedText
]}>{item.name_en}</Text>
]}>{getCountryTransLanguage(item)}</Text>
{selectedCountry === item.country && (
<Text style={styles.checkmark}></Text>

2
app/screens/SearchResultScreen.tsx

@ -451,7 +451,7 @@ export const SearchResultScreen = ({ route, navigation }: SearchResultScreenProp
// 处理点击产品
const handleProductPress = useCallback(
(product: Product) => {
if (product.original_min_price === 0 || product.original_min_price === null) {
if (product.min_price === 0 || product.min_price === null) {
Toast.show({
type: "error",
text1: t("productDiscontinued"),

3
app/screens/loginList/ForgotPhonePassword.tsx

@ -20,6 +20,7 @@ import { CountryList } from "../../constants/countries";
import { settingApi } from "../../services/api/setting";
import { VerificationCodeInput } from "./VerificationCodeInput";
import fontSize from "../../utils/fontsizeUtils";
import { getCountryTransLanguage } from "../../utils/languageUtils";
type ForgotPhonePasswordProps = {
visible?: boolean;
@ -171,7 +172,7 @@ export const ForgotPhonePassword = ({
>
<View style={styles.countryItemContent}>
<Text style={styles.countryCode}>+{item.country}</Text>
<Text style={[styles.countryName]}>{item.name_en}</Text>
<Text style={[styles.countryName]}>{getCountryTransLanguage(item)}</Text>
</View>
{/* Add checkmark for selected country */}
{currentCountry && currentCountry.country === item.country && (

3
app/screens/loginList/PhoneLoginModal.tsx

@ -30,6 +30,7 @@ import useBurialPointStore from "../../store/burialPoint";
import {getBurialPointData} from "../../store/burialPoint";
import fontSize from "../../utils/fontsizeUtils";
import { changeLanguage } from "../../i18n";
import { getCountryTransLanguage } from "../../utils/languageUtils";
type RootStackParamList = {
Login: undefined;
@ -195,7 +196,7 @@ const PhoneLoginModal = ({ visible, onClose }: PhoneLoginModalProps) => {
<View style={styles.countryItemContent}>
<Text style={styles.countryCode}>+{item.country}</Text>
{/* <Image source={flagMap.get(item.name_en)} style={styles.flag} /> */}
<Text style={[styles.countryName]}>{item.name_en}</Text>
<Text style={[styles.countryName]}>{getCountryTransLanguage(item)}</Text>
</View>
{/* Add checkmark for selected country */}
{selectedCountry && selectedCountry.country === item.country && (

8
app/screens/previewOrder/perviewOrder.tsx

@ -37,11 +37,13 @@ import fontSize from "../../utils/fontsizeUtils";
import { getBurialPointData } from "../../store/burialPoint";
import useBurialPointStore from "../../store/burialPoint";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { getCountryTransLanguage } from "../../utils/languageUtils";
// 定义本地存储的国家数据类型
interface LocalCountryData {
code: string;
flag: string;
country: number;
name: string;
phoneCode: string;
userCount: number;
@ -302,8 +304,8 @@ export const PreviewOrder = () => {
// 获取显示的国家代码
const getDisplayCountryCode = () => {
if (loadingCountries) return "...";
if (localSelectedCountry?.phoneCode) {
return localSelectedCountry.phoneCode;
if (localSelectedCountry?.country) {
return localSelectedCountry.country;
}
if (selectedCountry?.country) {
return `+${selectedCountry.country}`;
@ -573,7 +575,7 @@ export const PreviewOrder = () => {
styles.selectedCountryItemText,
]}
>
{item.name_en} (+{item.country})
{getCountryTransLanguage(item)} (+{item.country})
</Text>
</TouchableOpacity>
)}

9
app/screens/productStatus/OrderDatails.tsx

@ -55,7 +55,7 @@ import IconComponent from "../../components/IconComponent";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { CountryList } from "../../constants/countries";
import { getOrderTransLanguage,getAttributeTransLanguage,getAttributeNameTransLanguage } from "../../utils/languageUtils";
import { getCountryTransLanguage } from "../../utils/languageUtils";
// 定义选项类型
interface PaymentOption {
@ -76,6 +76,7 @@ interface LocalCountryData {
code: string;
flag: string;
name: string;
country: number | string;
phoneCode: string;
userCount: number;
}
@ -366,8 +367,8 @@ export const OrderDetails = () => {
// 获取显示的国家代码
const getDisplayCountryCode = () => {
if (loadingCountries) return "...";
if (localSelectedCountry?.phoneCode) {
return localSelectedCountry.phoneCode;
if (localSelectedCountry?.country) {
return String(localSelectedCountry.country);
}
if (selectedCountry?.country) {
return `+${selectedCountry.country}`;
@ -1719,7 +1720,7 @@ export const OrderDetails = () => {
styles.currencyButtonTextActive,
]}
>
{item.name_en} (+{item.country})
{getCountryTransLanguage(item)} (+{item.country})
</Text>
</TouchableOpacity>
)}

133
app/utils/languageUtils.ts

@ -1,146 +1,157 @@
import { getCurrentLanguage } from '../i18n';
import { getCurrentLanguage } from "../i18n";
export const getSubjectTransLanguage = <T extends Record<string, any>>(data: T): string => {
export const getSubjectTransLanguage = <T extends Record<string, any>>(
data: T
): string => {
// 获取当前i18n语言
const currentLang = getCurrentLanguage();
console.log('currentLang', currentLang);
console.log("currentLang", currentLang);
// 特殊处理中文
if (currentLang === 'zh' && 'subject' in data) {
if (currentLang === "zh" && "subject" in data) {
return data.subject as string;
}
// 获取所有subject_trans开头的字段
const translationFields = Object.keys(data).filter(key =>
key.startsWith('subject_trans')
const translationFields = Object.keys(data).filter((key) =>
key.startsWith("subject_trans")
);
// 查找匹配的字段
const matchedField = translationFields.find(field => {
const matchedField = translationFields.find((field) => {
// 从字段名中提取语言代码
const langCode = field.replace('subject_trans_', '');
const langCode = field.replace("subject_trans_", "");
// 如果没有后缀,则为法语
return langCode === '' ? currentLang === 'fr' : langCode === currentLang;
return langCode === "" ? currentLang === "fr" : langCode === currentLang;
});
// 返回匹配的翻译值,如果没有匹配则返回法语
return (data[matchedField || 'subject_trans'] as string) || '';
return (data[matchedField || "subject_trans"] as string) || "";
};
export const getAttributeTransLanguage = <T extends Record<string, any>>(data: T): string => {
export const getAttributeTransLanguage = <T extends Record<string, any>>(
data: T
): string => {
// 获取当前i18n语言
const currentLang = getCurrentLanguage();
// 特殊处理中文
if (currentLang === 'zh' && 'value' in data) {
if (currentLang === "zh" && "value" in data) {
return data.value as string;
}
// 获取所有value_trans开头的字段
const translationFields = Object.keys(data).filter(key =>
key.startsWith('value_trans')
const translationFields = Object.keys(data).filter((key) =>
key.startsWith("value_trans")
);
// 查找匹配的字段
const matchedField = translationFields.find(field => {
const matchedField = translationFields.find((field) => {
// 从字段名中提取语言代码
const langCode = field.replace('value_trans_', '');
const langCode = field.replace("value_trans_", "");
// 如果没有后缀,则为法语
return langCode === '' ? currentLang === 'fr' : langCode === currentLang;
return langCode === "" ? currentLang === "fr" : langCode === currentLang;
});
// 返回匹配的翻译值,如果没有匹配则返回法语
return (data[matchedField || 'value_trans'] as string) || '';
return (data[matchedField || "value_trans"] as string) || "";
};
export const getAttributeNameTransLanguage = <T extends Record<string, any>>(data: T): string => {
export const getAttributeNameTransLanguage = <T extends Record<string, any>>(
data: T
): string => {
// 获取当前i18n语言
const currentLang = getCurrentLanguage();
// 特殊处理中文
if (currentLang === 'zh' && 'attribute_name' in data) {
if (currentLang === "zh" && "attribute_name" in data) {
return data.attribute_name as string;
}
// 获取所有attribute_name_trans开头的字段
const translationFields = Object.keys(data).filter(key =>
key.startsWith('attribute_name_trans')
const translationFields = Object.keys(data).filter((key) =>
key.startsWith("attribute_name_trans")
);
// 查找匹配的字段
const matchedField = translationFields.find(field => {
const matchedField = translationFields.find((field) => {
// 从字段名中提取语言代码
const langCode = field.replace('attribute_name_trans_', '');
const langCode = field.replace("attribute_name_trans_", "");
// 如果没有后缀,则为法语
return langCode === '' ? currentLang === 'fr' : langCode === currentLang;
return langCode === "" ? currentLang === "fr" : langCode === currentLang;
});
// 返回匹配的翻译值,如果没有匹配则返回法语
return (data[matchedField || 'attribute_name_trans'] as string) || '';
}
return (data[matchedField || "attribute_name_trans"] as string) || "";
};
export const getSkuTransLanguage = <T extends Record<string, any>>(data: T): string => {
export const getSkuTransLanguage = <T extends Record<string, any>>(
data: T
): string => {
// 获取当前i18n语言
const currentLang = getCurrentLanguage();
// 特殊处理中文
if (currentLang === 'zh' && 'value' in data) {
if (currentLang === "zh" && "value" in data) {
return data.value as string;
}
// 获取所有subject_trans开头的字段
const translationFields = Object.keys(data).filter(key =>
key.startsWith('value_trans')
const translationFields = Object.keys(data).filter((key) =>
key.startsWith("value_trans")
);
// 查找匹配的字段
const matchedField = translationFields.find(field => {
const matchedField = translationFields.find((field) => {
// 从字段名中提取语言代码
const langCode = field.replace('value_trans_', '');
const langCode = field.replace("value_trans_", "");
// 如果没有后缀,则为法语
return langCode === '' ? currentLang === 'fr' : langCode === currentLang;
return langCode === "" ? currentLang === "fr" : langCode === currentLang;
});
// 返回匹配的翻译值,如果没有匹配则返回法语
return (data[matchedField || 'value_trans'] as string) || '';
return (data[matchedField || "value_trans"] as string) || "";
};
export const getOrderTransLanguage = <T extends Record<string, any>>(data: T): string => {
export const getOrderTransLanguage = <T extends Record<string, any>>(
data: T
): string => {
console.log(data);
// 获取当前i18n语言
const currentLang = getCurrentLanguage();
// 特殊处理中文
if (currentLang === 'zh' && 'value' in data) {
if (currentLang === "zh" && "value" in data) {
return data.value as string;
}
// 获取所有subject_trans开头的字段
const translationFields = Object.keys(data).filter(key =>
key.startsWith('product_name')
const translationFields = Object.keys(data).filter((key) =>
key.startsWith("product_name")
);
// 查找匹配的字段
const matchedField = translationFields.find(field => {
const matchedField = translationFields.find((field) => {
// 从字段名中提取语言代码
const langCode = field.replace('product_name_', '');
const langCode = field.replace("product_name_", "");
// 如果没有后缀,则为法语
return langCode === '' ? currentLang === 'fr' : langCode === currentLang;
return langCode === "" ? currentLang === "fr" : langCode === currentLang;
});
// 返回匹配的翻译值,如果没有匹配则返回法语
return (data[matchedField || 'product_name_fr'] as string) || '';
return (data[matchedField || "product_name_fr"] as string) || "";
};
// 国家的字段
export const getCountryTransLanguage = <T extends Record<string, any>>(
data: T
): string => {
const currentLang = getCurrentLanguage();
if (currentLang === "fr") {
return data.name as string;
} else {
return data.name_en as string;
}
};

Loading…
Cancel
Save