javascript - 无法使用节点作为对象上的翻译字符串
问题描述
在我目前正在工作的项目中,我们需要支持多种语言,因此我们最终使用 preact -helmet为每个 App 视图注入标题和相应的元标记,但我无法使其与{{fields}}
占位符一起使用,所以我创建了这个示例项目来演示这个问题。
如何安装和运行示例项目
- 克隆存储库
git clone git@github.com:acangiani/preact-i18n-issue.git
- 安装依赖项:
npm install
- 运行项目
npm run start
第一视角
这个工作正常并正确添加了标题和标题元标记。
这样做curl http://localhost:3000/
,这将输出以下 html:
...
<title>Foo - Bar</title>
<meta name="title" content="Foo - Bar" data-preact-helmet="true">
...
第二种观点
另一方面,在这个视图中,我需要使用{{field}}
占位符,这样做curl http://localhost:3000/test
会输出以下 html:
...
<title>test - Bar</title>
<meta name="title" content="[object Object]" data-preact-helmet="true">
...
我尝试过的事情
- 在
@withText
第二个视图中用作装饰器,但我无法访问道具。 - 试图
withText
用作功能组件包装器以获取翻译后的文本,但我无法使其工作。 - 试图将组件呈现为一个字符串,如:
render(<Text id="second.title" " fields={{ field: props.slug }}>default text</Text>)
但我只获得了默认文本,而不管IntlProvider
.
最重要的是,我需要将翻译后的文本作为字符串获取,但我无法这样做,你能帮忙吗?
解决方案
如此处所述,这是正确的解决方案:
@withText((props) => ({
title: <Text id="second.title" fields={{ field: props.slug }} />
}))
export default class SecondView extends Component {
render(props, state) {
return (
<div>
<Helmet
title={props.title}
meta={[
{name: "title", content: props.title },
]}
/>
</div>
);
}
};
推荐阅读
- cassandra - Cassandra nodetool 状态挂起
- ruby-on-rails - Ruby on Rails - 以一种形式提交评论文本和照片
- jquery - ajax POST 用于包含带有 jQuery 和 Django 的数组的数据
- sql - 根据 SQL 中的日期从同一列的总和中减去
- c# - Azure 函数和 ASP.NET 成员资格
- shell - 删除包含存储在变量中的字符串的行在 sed 中不起作用
- vba - 用户表单在多个 Word 文档中填写书签?
- python - 无头 python 脚本需要 x-server 才能运行
- docker - Dockerize 非 Maven JEE 应用程序
- html - 从文件浏览器中选择多个文件时,HTML 多文件输入挂起