跳转到内容

本地化 ​

查看器界面字符串通过共享的 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 按以下顺序解析键:

  1. 精确语言区域的字典,例如 fr-CA。
  2. 基础语言的字典,例如 fr。
  3. 内置英文字典 translationsEn。
  4. 从键生成的易读标签 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 也从包根入口重新导出。

基于 Apache-2.0 许可证发布