wuthery-l10n
v0.3.0
Published
Typescript package to interact with Wuthery's localization files.
Readme
l10n
Storage of localization files for Wuthery services, with Python and TS packages to interact with the data
Setting up the development environment
Python
# Clone the repo
git clone https://github.com/Wuthery/l10n
# Install the dependencies
cd l10n
poetry install --with dev --no-root
# If you want to run the tests locally
poetry install --with test --no-root
# Install pre-commit
pre-commit installTypescript
# Clone the repo
git clone https://github.com/Wuthery/l10n
# Install the dependencies
cd wuthery-l10n
npm iUsage
Python Package
# Install the package
poetry add wuthery.l10nfrom wuthery.l10n import Translator, Language
async with Translator() as translator:
translation = translator.translate(2, Language.EN_US, variable="Wuthery")TypeScript Package
# Install the package
npm i wuthery-l10nOn server side (layout.tsx):
import { I18nProvider, Language } from 'wuthery-l10n/client';
import {
LANGUAGE_KEY,
detectReqLanguage,
fetchTranslation,
} from 'wuthery-l10n/server';
import { getCookie } from 'cookies-next';
import { headers, cookies } from 'next/headers';
const Layout = async ({
children,
}: Readonly<{
children: React.ReactNode;
}>) => {
let language = getCookie(LANGUAGE_KEY, { cookies }) as Language || undefined;
if (!language) {
const reqHeaders = headers();
language = detectReqLanguage(reqHeaders.get('accept-language') || '');
}
const translation = await fetchTranslation(language);
return (
<I18nProvider
initialLanguage={language}
initialTranslations={{[language]: translation}}
>
<html>
<body>
{children}
</body>
</html>
</I18nProvider>
);
};
export default Layout;In component:
'use client';
import { useTranslation, Language } from 'wuthery-l10n/client';
const Component = () => {
const { changeLanguage, t, language } = useTranslation();
return (
<div>
<h1>{t('test_str', {'variable': 0})}</h1>
<button onClick={() => changeLanguage(language == Language.ZH_TW ? Language.EN_US : Language.ZH_TW)}>Change language</button>
</div>
);
};
export default Component;String conventions
- Use
-instead of_to seperate words, e.g.test-strinstead oftest_str - Use
/to seperate scopes, e.g.scope/test-str
