仅创建一个始终使用react-i18next转换其内容的Text组件是一个坏主意吗?

问题描述

在翻译一个较小的RN应用程序(已完成50%)的过程中,我注意到 React Native 上的大多数字符串都是通过Text组件显示的。因此,我编写了以下类,并用它代替了 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中可能未记录此用法:

  1. 对于图书馆来说,让用户完全自由使用它是一个好习惯。我希望react-i18next的维护者专注于改进翻译方面,而不是使用资源维护那些类型的组件;

  2. 像您一样,用户自己编写支持特定用例的组件很简单;

  3. 这种组合无法处理所有极端情况,因此在您的代码库中,可能有些情况下您不使用组件,但仍然以旧的方式使用Text。考虑一个带有一些需要传递给以下变量的字符串:

<Text>{t('key',{ value: this.state.value })}</Text>

许多开发人员可能更愿意保留一些多余的详细信息,以便每次都重复t(),以换取适合所有极端情况的更好的标准行为。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...