diff --git a/app/screens/CountrySelect.tsx b/app/screens/CountrySelect.tsx index 2e864d2..44368ec 100644 --- a/app/screens/CountrySelect.tsx +++ b/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 = () => { {item.name_en} + ]}>{getCountryTransLanguage(item)} {selectedCountry === item.country && ( diff --git a/app/screens/SearchResultScreen.tsx b/app/screens/SearchResultScreen.tsx index 99c46d5..2250cb4 100644 --- a/app/screens/SearchResultScreen.tsx +++ b/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"), diff --git a/app/screens/loginList/ForgotPhonePassword.tsx b/app/screens/loginList/ForgotPhonePassword.tsx index 12adbc9..d5e4c1b 100644 --- a/app/screens/loginList/ForgotPhonePassword.tsx +++ b/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 = ({ > +{item.country} - {item.name_en} + {getCountryTransLanguage(item)} {/* Add checkmark for selected country */} {currentCountry && currentCountry.country === item.country && ( diff --git a/app/screens/loginList/PhoneLoginModal.tsx b/app/screens/loginList/PhoneLoginModal.tsx index 7803231..b2bc253 100644 --- a/app/screens/loginList/PhoneLoginModal.tsx +++ b/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) => { +{item.country} {/* */} - {item.name_en} + {getCountryTransLanguage(item)} {/* Add checkmark for selected country */} {selectedCountry && selectedCountry.country === item.country && ( diff --git a/app/screens/previewOrder/perviewOrder.tsx b/app/screens/previewOrder/perviewOrder.tsx index a5745e1..94c3267 100644 --- a/app/screens/previewOrder/perviewOrder.tsx +++ b/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}) )} diff --git a/app/screens/productStatus/OrderDatails.tsx b/app/screens/productStatus/OrderDatails.tsx index 48ed77e..70ebe74 100644 --- a/app/screens/productStatus/OrderDatails.tsx +++ b/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}) )} diff --git a/app/utils/languageUtils.ts b/app/utils/languageUtils.ts index 403199e..faff238 100644 --- a/app/utils/languageUtils.ts +++ b/app/utils/languageUtils.ts @@ -1,146 +1,157 @@ -import { getCurrentLanguage } from '../i18n'; +import { getCurrentLanguage } from "../i18n"; -export const getSubjectTransLanguage = >(data: T): string => { +export const getSubjectTransLanguage = >( + 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 = >(data: T): string => { +export const getAttributeTransLanguage = >( + 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 = >(data: T): string => { +export const getAttributeNameTransLanguage = >( + 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 = >(data: T): string => { +export const getSkuTransLanguage = >( + 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 = >(data: T): string => { +export const getOrderTransLanguage = >( + 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 = >( + data: T +): string => { + const currentLang = getCurrentLanguage(); + if (currentLang === "fr") { + return data.name as string; + } else { + return data.name_en as string; + } };