【问题标题】:Next-i18next translation on the flyNext-i18next 即时翻译
【发布时间】:2021-08-14 21:27:02
【问题描述】:

有没有办法使用next-i18next 库翻译某些内容而不用router.push 更改语言环境?

我有 3 个语言环境:['en', 'de', 'fr'],默认为 de。当我尝试做类似的事情时:

import {useTranslation} from 'next-i18next'

const Component = () => {
  const { t } = useTranslation("common");
  console.log(t('word', { lng: 'fr' }));
}

虽然我当前的语言环境是de,但它返回的是de 的翻译版本,而不是fr

【问题讨论】:

    标签: javascript reactjs next.js next-i18next


    【解决方案1】:

    如果参考此文档https://react.i18next.com/latest/usetranslation-hook,如果不更改整个系统语言就不可能翻译某些内容,您可以使用两种方式更改系统语言:

    你描述的一个router.push

    另一个是:

    const { t, i18n } = useTranslation();
    
    i18n.changeLanguage('de');
    console.log( t('word') );
    i18n.changeLanguage('en-US');
    

    但是这个解决方案非常难看,因为你会为非常小的日志切换整个系统语言。

    如果您将描述真实案例,可能会帮助您找到真正的解决方案。真实案例意味着为什么你需要在 DE 上记录翻译词等等。

    【讨论】:

    • 我尝试了changeLanguage 的解决方案,但仍然无法正常工作。为什么我需要这样做是为了翻译URLs。为了做到这一点,我必须先翻译整个 URL,然后将其作为asPath 发送到router.push。我遇到的问题是,据我估计,next-i18next 只允许我访问当前语言环境和默认语言,而忽略 locales 数组中的其他语言。
    • 您能否提供一个原始网址的示例(没有翻译)以及您希望如何翻译它
    • en: /london/results -> fr: /londres/resultats
    • 任何带有翻译链接的数组都应该保存在后端,而不是前端。喜欢{ 'some.article', slug: { en: 'SomeArticle', fr: 'LaFranceArticle' } }。在 FE 上,您应该只使用已经翻译的 slug 作为您未来的 URL
    • 我知道你是对的,但问题是我们有大约 7k 个链接
    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 2021-06-06
    • 2020-04-25
    • 1970-01-01
    • 2012-10-27
    • 2015-11-04
    • 1970-01-01
    • 2021-06-26
    相关资源
    最近更新 更多