i

inlang message format

Plugin

The easiest "storage" plugin for inlang

The Inlang Message Format is a simple storage plugin for the Inlang ecosystem. It allows you to store simple messages in a JSON file per language.

The message files contain key-value pairs of the message ID and the translation. You can add variables in your message by using curly braces.

//messages/en.json
{
  "hello_world": "Hello World!",
  "greeting": "Good morning {name}!"
}

//messages/de.json
{	
  //the $schema key is automatically ignored
  "hello_world": "Hallo Welt!",
  "greeting": "Guten Tag {name}!"
}

Installation

Install the plugin in your Inlang Project by adding it to your "modules" in project.inlang/settings.json. You will also need to provide a pathPattern for the plugin.

// project.inlang/settings.json
{
  "modules" : [
+    "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@latest/dist/index.js"
  ],
+ "plugin.inlang.messageFormat": {
+   "pathPattern": "./messages/{locale}.json" 
+ }
}

Configuration

Configuration happens in project.inlang/settings.json under the "plugin.inlang.messageFormat" key.

pathPattern

The path pattern defines where the plugin will be looking for your message files. The default is ./messages/{locale}.json. The {locale} placeholder will be replaced with the language tag for each of your languages.

// project.inlang/settings.json
{
  "modules": [ ... ],
  "plugin.inlang.messageFormat": {
		"pathPattern": "./messages/{locale}.json"
	}
}

Variants (pluralization, gendering, A/B testing)

The message below will match the following conditions:

PlatformUser GenderMessage
androidmale{username} has to download the app on his phone from the Google Play Store.
iosfemale{username} has to download the app on her iPhone from the App Store.
**The person has to download the app.
{
	"jojo_mountain_day": {
		"match": {
			"platform=android, userGender=male": "{username} has to download the app on his phone from the Google Play Store.",
			"platform=ios, userGender=female": "{username} has to download the app on her iPhone from the App Store.",
			"platform=*, userGender=*": "The person has to download the app."
		}
	}
}

Pluralization is also supported. You can define a variable in your message and then use it in the selector.

InputsConditionMessage
count=1countPlural=oneThere is one cat.
count>1countPlural=otherThere are many cats.
Read the `local countPlural = count: plural` syntax as "create a local variable `countPlural` that equals `plural(count)`".
{
"some_happy_cat": {
    "declarations": ["input count", "local countPlural = count: plural"],
    "selectors": ["countPlural"],
    "match": {
      "countPlural=one": "There is one cat.",
      "countPlural=other": "There are many cats.",
    },
  }
}

Nesting is not supported and likely won't be.