我正在尝试使用<Trans>
组件和插值来应用自定义过滤器(用于在土耳其语中添加正确的变形后缀)。问题在于,需要改写的句子的关键部分(用户名)由其自己的组件呈现。有没有办法有条件地将过滤器应用于嵌套组件?
实际上,如果我可以做类似的事情(但这不起作用)会有所帮助
{ // en.json
newMessage: "You got a new message from <1>user</1>"
}
{ // tr.json
newMessage: "Size {{<1>user</1>, ablative_suffix}} yeni bir mesaj geldi"
}
在给定用户名“ Mert”的情况下,我希望呈现诸如“ Size Mert'ten yeni bir mesaj geldi” 之类的内容。还有另一种方法可以完成这样的事情吗?
<User>
const User = ({ user }) => <strong>{user ? user.name: null}</strong>;
const mapStateToProps = (state, { id }) => ({ user: state.users[id] });
export default connect(mapStateToProps);
<NewMessage>
export const NewMessage = ({userId}) =>
<Trans i18nKey="newMessage">
You got a new message from <User id={userId}/>
</Trans>;
答案 0 :(得分:1)
签出此解决方案https://codesandbox.io/s/react-i18next-2w5c2。
我正在提取用户组件上的children
(以怪异的方式)并将其添加为特殊值_1_children
,然后使用其翻译,Trans
会将其注入为{ {1}},因此,children
作为children || 'data'
组件的子代。
从我的所有尝试看来,似乎没有“干净”的方法,我认为最好自行连接到redux存储(您有User
)并通过用户名作为变量,就像我一样。
无论如何,i18next id
组件仅支持将数据从转换中注入到Component中,反之亦然。