【问题标题】:Conditional rendering in react for a multi language app in react反应中的多语言应用程序反应中的条件渲染
【发布时间】:2023-03-15 12:40:01
【问题描述】:

我正在开发一个将针对不同国家/地区推出的 React 应用程序。在每个国家/地区,某些组件将相同,但其他组件将有所不同。

France will have
  - Component A
  - Component B
  - Component C

Germany will have
  - Component A
  - Component D

因此,两个网站共享相似的组件,但其中一些是独一无二的。

我们使用全局环境变量来告诉加载哪个站点。 (enfr 等)

值得一提的是,所有网站的 URL 都应该相同(上面的变量应该告诉应用程序显示哪个组件)

处理这种组件差异的最佳方法是什么?

直到今天我想出的想法:

  • 为每个国家/地区创建一个站点。 (大问题,因为太多 DRY。共享的组件很多)
  • 条件渲染(感觉很hacky,因为有几个国家,导致无穷无尽的ifelse
  • 返回父容器组件内所有组件的高阶组件(感觉不错,但不想重新发明轮子,想先在这里问)

是否有 NPM 包可以帮助我将其存档?

我应该从头开始吗?

非常感谢。

【问题讨论】:

  • 您的前 2 个选项对于 SO 的答案来说过于宽泛,而您的第 3 个选项本质上是在寻求外部资源,这两者都是结束问题的原因。如果您有更具体的问题,您可能需要进行更多的自我研究,或者尝试一些事情,然后提出一个新问题。
  • 感谢您回答@TimLewis,同意这一点。我想过在软件工程中提问。但由于问题是与反应相关的,软件工程感觉问的范围很广,但堆栈溢出的范围很窄。
  • 不确定他们是否能提供帮助;我认为 SE 网站上的密切原因非常相似。我喜欢选项 3 的声音,你可以寻找可用于 react 的本地化插件。
  • 这可能由于更多基于意见而关闭,因此我将添加评论而不是回答。这似乎是服务器端渲染的好案例。另一种选择而不是 HOC 可能是考虑创建一个自定义挂钩来处理条件渲染。

标签: javascript reactjs multilingual conditional-rendering


【解决方案1】:

不确定我是否明白这一点(如果是这样的话,抱歉)。 您不需要创建两个站点。您只需要以传递结构(类似于)组织网站内容:

在包含网站内容的文件中:

const frenchData = [
  {
    idKey: 'aboutus',
    textTitel: aboutUsTextTitelFR,
    textField: aboutUsTextFieldFR
  }
];
const englishData = [
  {
    idKey: 'aboutus',
    textTitel: aboutUsTextTitelEN,
    textField: aboutUsTextFieldEN
  }
];


export const aboutusData = {
    'fr': frenchData,
    'en': englishData
}

您可以通过以下几行获取首选语言(从用户的浏览器)。

static async getInitialProps({ req }) { const userAgent = req ? req.headers['accept-language'] : navigator.userAgent; return { userAgent }; }

在对 userAgent 结果进行一些字符串格式化后,您将获得一组首选语言。之后,您需要渲染传递的数据(DE、EN、ES 等)

【讨论】:

  • 感谢@alexis 的回复。您的解决方案提供了一种处理翻译文本的方法。 (这很好,我们也在做同样的事情)。但是当前的问题与翻译的组件有关。这意味着我们不需要返回文本,我们需要根据站点全局语言返回组件。
猜你喜欢
  • 2022-12-10
  • 2022-01-17
  • 2019-03-25
  • 2021-05-01
  • 2018-08-31
  • 2022-01-22
  • 2020-11-02
  • 2021-10-31
相关资源
最近更新 更多