You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Svelte Derived Store报错:Cannot find name '$t' 求助

问题原因

Svelte里的$前缀是组件专属的语法糖,只有.svelte文件会被Svelte编译器处理,自动把$store转换成订阅store的逻辑。但普通.ts文件没有这个编译过程,TypeScript本身不认识$t这种写法,所以会报“找不到名称”的错误。

解决办法

方法1:用get函数同步获取store值

从svelte/store导入get,直接获取store的当前值:

import { get } from 'svelte/store';
import { t } from './你的store文件路径';

// 先获取翻译函数,再调用
const translate = get(t);
const loginText = translate("account.login");

方法2:用subscribe订阅store(适合响应更新的场景)

如果需要监听locale变化自动更新翻译结果,用subscribe方法:

import { t } from './你的store文件路径';

// 订阅store,每次locale变化都会触发回调
const unsubscribe = t.subscribe(translateFn => {
  const loginText = translateFn("account.login");
  // 这里处理翻译后的文本
});

// 不需要监听时记得取消订阅(比如函数结束、组件销毁时)
unsubscribe();

方法3:封装工具函数简化调用

如果TS文件里频繁用到翻译,可以封装一个工具函数:

// src/utils/translate.ts
import { get } from 'svelte/store';
import { t } from '../stores/你的store文件';

export const translate = (key: string, vars = {}) => {
  return get(t)(key, vars);
};

之后在TS文件里直接导入使用:

import { translate } from './utils/translate';

const loginText = translate("account.login");

内容的提问来源于stack exchange,提问作者qYUUU

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:14:57