daimond113/lexi
Localisation for Vide, simplified.
lexi
Localisation for Vide, simplified.
Lexi allows you to define your text and get typed sources for use with Vide. It is designed with cloud translations in mind, and so has a CLI with pushing functionality, allowing your code to be the source of truth for text in your games.
As it uses manual translation, it is important to disable AutoLocalize
on
your text.
Installation
Lexi and the CLI are available on pesde.
pesde add -t roblox daimond113/lexi
pesde add -d -t lune daimond113/lexi_cli
Only the library is available on npm for roblox-ts.
npm i @rbxts/lexi
Example
Lexi is designed for use with the new solver. Additionally, it is highly
recommended to use FFlagDebugLuauStringSingletonBasedOnQuotes
, otherwise you
will need to cast your strings to singletons.
Because Lexi runs your module, it is required that you define your lexicon in its own module.
local lexi = require(game:GetService("ReplicatedStorage").roblox_packages.lexi)
local lexicon = lexi.lexicon
local context = lexi.context
return lexicon("en-us", {
hello = 'Hello there',
pets = {
hamster = context 'This is my ugly old hamster' "The speaker loves the hamster."
},
goodbye_player = 'Goodbye {player}, it is sad to leave you at {when:datetime}',
})
create "TextLabel" {
AutoLocalize = false,
Text = lexicon.hello,
}
create "TextLabel" {
AutoLocalize = false,
Text = lexicon.pets.hamster,
}
create "TextLabel" {
AutoLocalize = false,
Text = function()
return lexicon.goodbye_player({ player = local_player.Name, when = time_source() })
end,
}
import { lexicon, context } from "@rbxts/lexi"
export = lexicon("en-us", {
hello: 'Hello there',
pets: {
hamster: context('This is my ugly old hamster')("The speaker still loves the hamster.")
},
goodbyePlayer: 'Goodbye {player}, it is sad to leave you at {when:datetime}',
})
<textlabel
AutoLocalize={false}
Text={lexicon.hello}
/>
<textlabel
AutoLocalize={false}
Text={lexicon.pets.hamster}
/>
<textlabel
AutoLocalize={false}
Text={() => lexicon.goodbyePlayer({ player: localPlayer.Name, when: timeSource() })}
/>