本地化
查看器界面字符串通过共享的 pptx.* 字典解析,内置英文。Svelte 没有官方指定的国际化运行时,因此此绑定通过 pptx-svelte-viewer/i18n 入口提供一个轻量、无依赖的翻译层:按语言查找字典并回退到英文,支持 插值,并为缺失的键生成易读的回退标签。
注册语言
通过 registerTranslations 注册字典或覆盖单个字符串,然后设置 locale 属性:
ts
// e.g. in your app entry, before the viewer mounts
import { registerTranslations } from 'pptx-svelte-viewer/i18n';
registerTranslations('fr', {
'pptx.statusBar.slideOf': 'Diapositive {{current}} sur {{total}}',
'pptx.toolbar.next': 'Suivant',
// ...any subset; unset keys fall back to English
});svelte
<PowerPointViewer source={bytes} locale="fr" />同一语言后注册的内容会合并覆盖之前的内容,因此宿主可以先注册完整字典,再覆盖个别键。请在挂载查看器之前注册,确保首次渲染时标签已经可用。
带类型的字典
TranslationDictionary 是普通的 Record<string, string>。如需编译时检查键,可以使用导出的 TranslationKey 联合类型标注字典:
ts
import type { TranslationKey } from 'pptx-svelte-viewer/i18n';
const fr: Partial<Record<TranslationKey, string>> = {
'pptx.statusBar.slideOf': 'Diapositive {{current}} sur {{total}}',
};
registerTranslations('fr', fr);Svelte 演示通过同一 API 注册完整的法语、西班牙语和德语参考字典。
回退顺序
translate 按以下顺序解析键:
- 精确语言区域的字典,例如
fr-CA。 - 基础语言的字典,例如
fr。 - 内置英文字典
translationsEn。 - 从键生成的易读标签
keyToLabel,避免缺失的键显示为原始点分路径。
插值
消息使用共享的 占位符约定,参数作为翻译函数的第二个实参传入:
ts
import { translate } from 'pptx-svelte-viewer/i18n';
translate('en', 'pptx.statusBar.slideOf', { current: 2, total: 10 });
// "Slide 2 of 10"未知占位符原样保留。
内置语言选择器
“文件 > 选项 > 语言”允许用户在运行时选择语言,由以下三个属性驱动,参见组件属性:
defaultLocale:初始选择,回退为localStorage中持久化的选择,再回退为locale属性。availableLocales:提供的选项(LocaleCatalogEntry[])。默认包含通过registerTranslations注册的所有语言,标签来自共享的LOCALE_CATALOG,其中内置en、fr、es、de标签,其他语言代码直接作为标签。onLocaleChange:携带选中的语言代码触发。提供此回调后由宿主管理持久化;不提供时,选择会自动写入localStorage。
ts
interface LocaleCatalogEntry {
/** BCP-47-ish locale code, e.g. 'en', 'fr'. */
code: string;
/** English display name. */
label: string;
/** The locale's own name for itself, e.g. 'Français'. */
nativeLabel: string;
}选择语言与注册字典是两步
选择器只切换要读取的已注册字典。字典本身需要单独通过 registerTranslations 注册;选择了没有字典的语言时会回退到英文。
辅助函数参考
以下内容均来自 pptx-svelte-viewer/i18n:
| 导出项 | 类型 | 用途 |
|---|---|---|
registerTranslations | 函数 | (locale, dictionary) => void;合并覆盖该语言已有的字典。 |
getRegisteredLocales | 函数 | () => string[];返回 'en' 和所有已注册语言。 |
translate | 函数 | (locale, key, params?) => string;使用完整回退顺序。 |
createTranslator | 函数 | (getLocale) => Translator;绑定到延迟读取语言值的翻译函数。 |
interpolate | 函数 | (message, params?) => string;只执行 替换。 |
translationsEn | 常量 | 完整的共享英文字典。 |
LOCALE_CATALOG | 常量 | 内置语言标签,包括 en、fr、es、de。 |
keyToLabel | 函数 | 将 pptx.* 键转换为易读标签,作为最终回退。 |
TranslationDictionary, Translator, TranslationKey, LocaleCatalogEntry | 类型 | 上面使用的类型。 |
为方便使用,registerTranslations、TranslationDictionary 和 Translator 也从包根入口重新导出。