Skip to content

Provides a simple API for multi-language systems.

License

Notifications You must be signed in to change notification settings

Tiaansu/JSONLang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JSONLang

sampctl

Dependencies

Installation

Simply install to your project:

sampctl package install Tiaansu/JSONLang

Include in your code and begin using the library:

#include <JSONLang>

Usage

This package works by loading json files from I18n folder in the root directory.

These file should have the same keys, see the I18n directory in the repo for an example.

Loading JSON Languages

To load a language from a json file, use InitJsonLanguageFromFile with just the language filename (including extension), not the full file path. For example InitJsonLanguageFromFile("en-US.lang.json"); loads the I18n/en-US.lang.json file.

You could also combine this with the fsutil plugin and iterate through the I18n directory.

new
    Directory:dir = OpenDir("I18n"),
    entry[256],
    ENTRY_TYPE:type,
    name[64]
;

while (DirNext(dir, type, entry))
{
    if (type == E_REGULAR)
    {
        PathBase(entry, name);

        InitJsonLanguageFromFile(name);
    }
}

CloseDir(dir);

or just by simply using InitJsonLanguages() in OnGameModeInit.

Using JSON Language Strings

Now you've loaded json languages, you can use strings from each json language with the GetJsonLanguageString(json_lang_id, const key[], bool:encode = false) function. The first parameter is the language ID, which you can obtain via name with GetJsonLanguageID.

For Example:

SendClientMessage(playerid, -1, GetJsonLanguageString(GetJsonLanguageID("en-US"), "greet"));

Would send the string from en-US keyed by greet.

Per-Player Language

You can store a language ID for each player with SetPlayerJsonLanguage and retrieve it with GetPlayerJsonLanguage. For example, your server could display a list of languages in a dialog with GetJsonLanguageList and when the player selects a language, call SetPlayerJsonLanguage with their selection and then in future you can use GetPlayerJsonLanguage to obtain the language ID that player selected.

There is also a useful macro @L(playerid, key[]) which you can use to quickly get a string for a player using their assigned language ID.

SendClientMessage(playerid, -1, @L(playerid, "greet"));

Testing

To test, simply run the package:

sampctl package run