只创建一个始终使用 react-i18next 翻译其内容的文本组件是个坏主意吗?
Is it a bad idea to just create a Text component that always translated its contents with react-i18next?
在翻译一个小型 RN 应用程序(完成 50%)的过程中,我注意到 React Native 上的大部分字符串都是通过 Text
组件显示的。所以我写了下面的 class 并用它代替了 React Native 的 Text
:
import {Text as RNText} from 'react-native';
import {useTranslation} from 'react-i18next';
export default ({children, style}) => {
const {t} = useTranslation();
if (Array.isArray(children)) {
const translated = children.map((el) => t(el));
return <RNText style={style}>{translated}</RNText>;
}
const translated = t(children);
return <RNText style={style}>{translated}</RNText>;
};
这在我的案例中非常有效并且非常实用,我想知道它是否是一个坏主意 - 否则我觉得它会在文档中被引用为使用 react-i18next
的好方法。
我是不是漏掉了什么?
如果这适合您,那就太好了!你绝对应该继续使用这个组件。
由于多种原因,react-i18next
中可能未记录此用法:
图书馆让用户完全自由地使用它是件好事。我更希望 react-i18next
的维护者专注于改进翻译方面,而不是使用资源来维护这些组件;
用户自己编写这样一个组件来支持他们的特定用例是微不足道的,就像你所做的那样;
这样的组件并不能处理所有边缘情况,所以在你的代码库中可能有一些情况你不使用该组件但你仍然使用 Text
方法。考虑一个字符串,其中包含您需要传递给的一些变量:
<Text>{t('key', { value: this.state.value })}</Text>
许多开发人员可能更愿意每次都重复 t()
一些额外的冗长内容,以换取适合所有边缘情况的更好的标准行为。
在翻译一个小型 RN 应用程序(完成 50%)的过程中,我注意到 React Native 上的大部分字符串都是通过 Text
组件显示的。所以我写了下面的 class 并用它代替了 React Native 的 Text
:
import {Text as RNText} from 'react-native';
import {useTranslation} from 'react-i18next';
export default ({children, style}) => {
const {t} = useTranslation();
if (Array.isArray(children)) {
const translated = children.map((el) => t(el));
return <RNText style={style}>{translated}</RNText>;
}
const translated = t(children);
return <RNText style={style}>{translated}</RNText>;
};
这在我的案例中非常有效并且非常实用,我想知道它是否是一个坏主意 - 否则我觉得它会在文档中被引用为使用 react-i18next
的好方法。
我是不是漏掉了什么?
如果这适合您,那就太好了!你绝对应该继续使用这个组件。
由于多种原因,react-i18next
中可能未记录此用法:
图书馆让用户完全自由地使用它是件好事。我更希望
react-i18next
的维护者专注于改进翻译方面,而不是使用资源来维护这些组件;用户自己编写这样一个组件来支持他们的特定用例是微不足道的,就像你所做的那样;
这样的组件并不能处理所有边缘情况,所以在你的代码库中可能有一些情况你不使用该组件但你仍然使用
Text
方法。考虑一个字符串,其中包含您需要传递给的一些变量:
<Text>{t('key', { value: this.state.value })}</Text>
许多开发人员可能更愿意每次都重复 t()
一些额外的冗长内容,以换取适合所有边缘情况的更好的标准行为。