Vin*_*aux 5 svelte svelte-component
我在我的项目中使用 Svelte i18n,它在我的 Svelte 组件中完美运行。
但我有一些 JS 文件(例如常量),我想使用 i18n 来翻译一些键,例如 (in /services/constants.js
) :
import { _ } from 'svelte-i18n'
export const STATUS_OK = 1;
export const STATUS_PENDING = 2;
export const STATUS_ERROR = 3;
export const STATUS_INACTIVE = 4;
export const STATUS_PRICE_NOT_FOUND = 5;
export const STATUTES = {
[STATUS_OK]: {
text: _('urls.statutes.ok'),
class: 'text-green-500',
},
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误,我可以_
在 JS 文件中使用函数吗?或者我应该创建一种简洁的组件来处理我的常量?
Ste*_*aes 11
如果我理解正确的工作方式svelte-i18n
,_
就是一个store,这就是为什么你可以在组件中执行以下操作
<p>{$_('urls.statuses.ok')}</p>
Run Code Online (Sandbox Code Playgroud)
创建$
订阅并获取商店的当前值,您可以在该值上执行函数来获取给定的密钥。
在您的代码中,您执行_('urls.statuses.ok')
的是您尝试在store上执行的函数,而不是在store 的值上执行的函数。而正是这个“价值”才真正为你提供了国际化的功能。
但您不能在 javascript 文件中使用$
,因此这里您有两个选择:
使用 get()
您可以import { get } from 'svelte/store'
为您提供一个返回商店当前值的函数,这意味着您可以将代码更改为如下所示:
text: get(_)('urls.statuses.ok')
Run Code Online (Sandbox Code Playgroud)
这样做的一个缺点是它不会创建订阅,或者换句话说,如果语言发生变化,这个常量不会改变,因为get
不会再次运行,它只运行一次。
从文本返回一个函数
另一个选择是一个更大的改变,即重新定义text
为函数
text: _ => _('urls.statuses.ok')
Run Code Online (Sandbox Code Playgroud)
在这里,我们将存储从外部传递到函数内部,将其直接导入到 javascript 文件中。用法是
<p>{STATUTES.STATUS_OK($_)}</p>
Run Code Online (Sandbox Code Playgroud)
如您所见,我们将存储的值传递到函数中,这意味着在函数内部我们可以按预期使用我们的存储,因为当语言更改时,该块将被重新评估,它将始终获取当前语言就像我们得到的第一个一样get
。
归档时间: |
|
查看次数: |
1176 次 |
最近记录: |