@astrojs/starlight
Version:
Build beautiful, high-performance documentation websites with Astro
37 lines (33 loc) • 1.34 kB
text/typescript
import { pluginFramesTexts } from 'astro-expressive-code';
import type { StarlightConfig } from '../../types';
import type { createTranslationSystemFromFs } from '../../utils/translations-fs';
import { localeToLang } from '../shared/localeToLang';
export function addTranslations(config: StarlightConfig, useTranslations: UseTranslations) {
addTranslationsForLocale(config.defaultLocale.locale, config, useTranslations);
if (config.isMultilingual) {
for (const locale in config.locales) {
if (locale === config.defaultLocale.locale || locale === 'root') continue;
addTranslationsForLocale(locale, config, useTranslations);
}
}
}
function addTranslationsForLocale(
locale: string | undefined,
config: StarlightConfig,
useTranslations: UseTranslations
) {
const lang = localeToLang(config, locale);
const t = useTranslations(lang);
const translationKeys = [
'expressiveCode.copyButtonCopied',
'expressiveCode.copyButtonTooltip',
'expressiveCode.terminalWindowFallbackTitle',
] as const;
translationKeys.forEach((key) => {
const translation = t.exists(key) ? t(key) : undefined;
if (!translation) return;
const ecId = key.replace(/^expressiveCode\./, '');
pluginFramesTexts.overrideTexts(lang, { [ecId]: translation });
});
}
type UseTranslations = Awaited<ReturnType<typeof createTranslationSystemFromFs>>;