Set up a project
Fink finds your translations through an inlang project: a folder whose name ends in .inlang, usually project.inlang, with a settings.json inside. The file lists your languages and tells the format plugin where your translation files are. Commit it to the repository like any other config file.
i18next projects
If your app uses i18next with JSON files, the i18next CLI can create the project for you:
npx i18next-cli init --inlang
Or create project.inlang/settings.json by hand. Paths are relative to the folder that contains project.inlang:
{
"$schema": "https://inlang.com/schema/project-settings",
"baseLocale": "en",
"locales": ["en", "de", "fr"],
"modules": [
"https://cdn.jsdelivr.net/npm/@inlang/plugin-i18next@6/dist/index.js"
],
"plugin.inlang.i18next": {
"pathPattern": "./locales/{locale}.json"
}
}
With namespaces (several files per language), use one entry per namespace. See i18next.
"plugin.inlang.i18next": {
"pathPattern": {
"common": "./public/locales/{locale}/common.json",
"settings": "./public/locales/{locale}/settings.json"
}
}
next-intl projects
Create project.inlang/settings.json next to your app's package.json, with the locales of your next-intl routing:
{
"$schema": "https://inlang.com/schema/project-settings",
"baseLocale": "en",
"locales": ["en", "de"],
"modules": [
"https://cdn.jsdelivr.net/npm/@inlang/plugin-next-intl@2/dist/index.js"
],
"plugin.inlang.nextIntl": {
"pathPattern": "./messages/{locale}.json"
}
}
With one file per namespace, use one entry per namespace. See next-intl.
Paraglide JS projects
npx @inlang/paraglide-js@latest init creates project.inlang with the inlang message format plugin. Its settings look like this:
{
"$schema": "https://inlang.com/schema/project-settings",
"baseLocale": "en",
"locales": ["en", "de"],
"modules": [
"https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js",
"https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js"
],
"plugin.inlang.messageFormat": {
"pathPattern": "./messages/{locale}.json"
}
}
See Paraglide JS.
Rules Fink checks
baseLocalemust be set and included inlocales. Older projects that usesourceLanguageTagandlanguageTagsmust be migrated first.- Configure exactly one format plugin:
plugin.inlang.i18next,plugin.inlang.nextIntlorplugin.inlang.messageFormat, with apathPattern. Fink reports any other format plugin as unsupported. See Supported formats. pathPatternmust be relative and stay inside the repository.- Fink uses its own pinned copies of these plugins. It never runs code from the
modulesURLs in your repository. Keepmodulesfor other inlang tools, such as the Paraglide compiler or the inlang CLI.
Several projects in one repository
A monorepo can have several .inlang folders, for example apps/web/project.inlang and apps/admin/project.inlang. Fink lists them all when you open the repository, and you can switch between them from the Fink menu.
Learn more about inlang
inlang is the open project format behind Fink and Paraglide JS. Read the inlang documentation for the full settings reference.