Changing locale in a NodeJS bot


Back in March we implemented a new feature in the BotBuilder SDK for NodeJS which allows developers to provide simple localization switching in their bots. This means your bot will be able to prompt your users for different language options.

Using the Node SDK’s LocalizedRegExpRecognizer


To add this feature, we included a new recognizer to the core library - LocalizedRegExpRecognizer. This recognizer extends the IntentRecognizer and uses language specific regular expressions specified by the developer on the client side to match intents. As a NodeJS bot developer, you might factor your localization settings like the following example:

File tree with expanded locale/

Our language-specific patterns are defined for english (“en”) and spanish(“es”) in JSON format in index.json separated by different folders for locale.

Below is a sample from the index.json we’re using for English (“en”) localization:

// index.json in "en" locale
{
    "localized_greetingRegExp": "^Hello$|^Good morning$|^Good afternoon$",
    "locale_updated": "Locale Updated!",
    "greeting": ["Hi there!", "Welcome.", "Hello!", "Greetings."],
    "good_bye": ["Good-bye!", "Farewell!", "Bye!", "See you later!"]
}

Here is a sample from the index.json configuration for Spanish (“es”) localization:

// index.json in "es" locale
{
    "localized_greetingRegExp": "^Hola$|^Buenas dias$|^Buenas tardes$",
    "locale_updated": "Locale Updated!",
    "greeting": ["¡Hola!"],
    "good_bye": ["Adiós!", "¡Hasta luego!"]
}

Back in the bot, we can define our LocalizedRegExpRecognizer:

var localeRecog = new builder.LocalizedRegExpRecognizer('Greetings', 
    "localized_greetingRegExp");

The first input "Greetings" is the intent and the second input "localized_greetingRegExp" provisions the key to the regular expression pattern in our index.json files.

As a best practice, bots should initially prompt the user to select their language/locale. After the user sets their locale, their next utterance will trigger the LocalizedRegExpRecognizer to look for a RegExpRecognizer mapped to the current locale. If one doesn’t exist, it will create a RegExpRecognizer.

For example if the preferred locale is "es", our LocalizedRegExpRecognizer looks for localeRecog.recognizers["es"]. If it doesn’t exist, LocalizedRegExpRecognizer will create one using the first two parameters passed to it during its construction.

Included below are screenshots that show an example of an interaction using the LocalizedRegExpRecognizer.

Type something to the chatbot to begin, then select a language:

Start of conversation

Choosing Spanish which corresponds to the locale “es”:

Chooing Spanish

Triggering the next dialog which responds with a greeting and farewell:

Localized Spanish Greeting

Selecting English this time:

Choosing English

Starting the next dialog by uttering “hello”:

Localized English Greeting

And that’s it! We’ve included a simple way to allow prompt users to specify different localizations.

Happy Making!

Steven Gum from the Bot Framework Team