Beginning with Profound Version 5, Fix Pack 10.0, all Jumpstart messages or strings are configurable for different languages or cultures.  You can customize these strings yourself, or even define new languages with configuration options.

Configuring a Language

Settings File

To configure language support for Jumpstart, options need to be set in a custom JavaScript file. See Custom JavaScript Files for more.

The configuration options set in the Jumpstart settings.js file apply only to Jumpstart. If you want to configure languages for Genie or Rich Display sessions, see Language Support.

Settings

To set the language, specify a value for pui.language in your Jumpstart settings.js file. For example, to set the language to "French, France", you would code the following:

pui.language = "fr_FR";

The following languages are provided with Jumpstart:

Customizing a Language

Any of the strings that are provided in the language dictionary of Atrium may be customized. To do that, you can define a string as follows:

pui[dictionary-name][language][message id] = "The New String";

For example, to customize the message that occurs when the generator completes:

pui["jumpstartMsg"]["en_US"]["app generated"] = "Your application has finished generating!";

This can be set separately for each language. 

You can find a list of the possible dictionary and message id values under "Defining a new language", below.

Defining a New Language

If Jumpstart does not come with your preferred language already defined, you can add a new language yourself by coding all of the needed strings as configuration settings. To do that, your settings file should set the language you wish to use.  You can pick any string you like for the language name. Then, define empty objects for the runtimeMsg and runtimeText dictionaries, as follows:

pui["language"] = "MyLanguage";
if(!pui["jumpstartMsg"]["MyLanguage"]) pui["jumpstartMsg"]["MyLanguage"] = {};
if(!pui["jumpstartText"]["MyLanguage"]) pui["jumpstartText"]["MyLanguage"] = {};

Then, define a message for each message ID in each dictionary.  Here is a list of all of the messages you can define:

pui["jumpstartMsg"]["MyLanguage"]["app generated"] = "Application Generated.";
pui["jumpstartMsg"]["MyLanguage"]["generation time x"] = "Generation time: &1 second(s).";
pui["jumpstartMsg"]["MyLanguage"]["creating x dspf"] = "Creating &1 Display File. Please wait...";
pui["jumpstartMsg"]["MyLanguage"]["dspf name reqd"] = "Display File Name is required.";
pui["jumpstartMsg"]["MyLanguage"]["retrieving x dspf"] = "Retrieving &1 Display File template. Please wait...";
pui["jumpstartMsg"]["MyLanguage"]["unable retrieve x dspf"] = "Unable to retrieve &1 Display File template.";
pui["jumpstartMsg"]["MyLanguage"]["creating rpg pgm"] = "Creating RPG Program. Please wait...";
pui["jumpstartMsg"]["MyLanguage"]["creating pjs pgm"] = "Creating ProfoundJS Program. Please wait...";
pui["jumpstartMsg"]["MyLanguage"]["creating php script"] = "Creating PHP Script. Please wait...";
pui["jumpstartMsg"]["MyLanguage"]["halted rpg exists"] = "Generation halted: RPG source member already exists.";
pui["jumpstartMsg"]["MyLanguage"]["proxy pgm exists"] = "Proxy program object already exists.";
pui["jumpstartMsg"]["MyLanguage"]["http error for proxy"] = "HTTP communications error occurred while trying to create the proxy program.";
pui["jumpstartMsg"]["MyLanguage"]["tplt exception info"] = "&1\nSource line (after pre-processing):\n&2";
pui["jumpstartMsg"]["MyLanguage"]["macro exception"] = "Caught exception in &1 macro:\n";
pui["jumpstartMsg"]["MyLanguage"]["macro no end paren"] = "Failed to find end parenthesis for &1 macro.";
pui["jumpstartMsg"]["MyLanguage"]["udf tplt puimapp"] = "Hint: To configure Universal Display File programs to use the Web "+
 "Connector, modify the PUIMAPP file in the Profound UI installation library.";
pui["jumpstartMsg"]["MyLanguage"]["loading libl"] = "Loading Library List...";
pui["jumpstartMsg"]["MyLanguage"]["saving libl"] = "Saving Library List...";
pui["jumpstartMsg"]["MyLanguage"]["server invalid resp"] = "Server response is invalid.";
pui["jumpstartMsg"]["MyLanguage"]["dbf required"] = "Database file name is required.";
pui["jumpstartMsg"]["MyLanguage"]["retr fields"] = "Retrieving fields. Please wait...";
pui["jumpstartMsg"]["MyLanguage"]["unable retr fld"] = "Unable to retrieve field listing:\n";
pui["jumpstartMsg"]["MyLanguage"]["sql idx cannot use"] = "&1 is an SQL Index and cannot be used.";
pui["jumpstartMsg"]["MyLanguage"]["fld no edit"] = "This field cannot be edited. Check \"Override Non-Editable\" to use it anyway.";
pui["jumpstartMsg"]["MyLanguage"]["provide valid names"] = "Please provide unique, valid names for each.";
pui["jumpstartMsg"]["MyLanguage"]["invalid chars"] = "One or more field names contain invalid characters. &1";
pui["jumpstartMsg"]["MyLanguage"]["fields same name"] = "One or more fields have the same name. &1";
pui["jumpstartMsg"]["MyLanguage"]["correls same name"] = "One or more table correlations have the same name. &1";
pui["jumpstartMsg"]["MyLanguage"]["long alias conflict"] = "A field's name cannot be the short DB field name when a long alias exists.";
pui["jumpstartMsg"]["MyLanguage"]["library required"] = "Library is required.";
pui["jumpstartMsg"]["MyLanguage"]["pgm srcfile required"] = "Program Source File is required.";
pui["jumpstartMsg"]["MyLanguage"]["rpg pgm name required"] = "RPG Program Name is required.";
pui["jumpstartMsg"]["MyLanguage"]["dsp srcfile required"] = "Display Source File is required.";
pui["jumpstartMsg"]["MyLanguage"]["php fname required"] = "A PHP script filename is required.";
pui["jumpstartMsg"]["MyLanguage"]["pjs proxy required"] = "A name for the ProfoundJS proxy object is required.";
pui["jumpstartMsg"]["MyLanguage"]["pjs pgm name required"] = "A ProfundJS program filename is required.";
pui["jumpstartMsg"]["MyLanguage"]["retr code template"] = "Retrieving code template. Please wait...";
pui["jumpstartMsg"]["MyLanguage"]["retr template fail"] = "Unable to retrieve code template.";
pui["jumpstartMsg"]["MyLanguage"]["generating app"] = "Generating application. Please wait...";
pui["jumpstartMsg"]["MyLanguage"]["http error crtrpgpgm"] = "HTTP communications error occurred while trying to create the RPG program.";
pui["jumpstartMsg"]["MyLanguage"]["select unique key"] = "You must select a unique key.";
pui["jumpstartMsg"]["MyLanguage"]["fail json unsupported"] = "Application not generated. Native JSON parsing is not supported by your browser.";
pui["jumpstartMsg"]["MyLanguage"]["if not valid on widget"] = "#if expression not valid on Rich Display File widget \"&1\".";
pui["jumpstartMsg"]["MyLanguage"]["file already specified"] = "File already specified.";
pui["jumpstartMsg"]["MyLanguage"]["join x y to main file"] = "Connect #&1 or #&2 to the main #file before joining them together.";
pui["jumpstartMsg"]["MyLanguage"]["one path main to child"] = "Only one path from the main #file may exist to each child file.";
pui["jumpstartMsg"]["MyLanguage"]["missing endfor"] = "#for loop missing matching #endfor in code template.";
pui["jumpstartMsg"]["MyLanguage"]["else missing if"] = "#else missing matching #if statement in code template.";
pui["jumpstartMsg"]["MyLanguage"]["endif missing if"] = "#endif missing matching #if statement in code template.";
pui["jumpstartMsg"]["MyLanguage"]["invalid if expr"] = "Invalid expression in code template:\n#if &1";
pui["jumpstartMsg"]["MyLanguage"]["did not sel grid flds"] = "You did not select any grid fields.";
pui["jumpstartMsg"]["MyLanguage"]["did not sel srch flds"] = "You did not select any search fields.";
pui["jumpstartMsg"]["MyLanguage"]["did not sel x flds"] = "You did not select any fields for the &1 screen.";
pui["jumpstartMsg"]["MyLanguage"]["no lookup key flds"] = "A lookup application cannot be created because this file does not have any key fields.";
pui["jumpstartMsg"]["MyLanguage"]["join unsupported IE8"] = "Join Selection is unsupported for Internet Explorer 8.";
pui["jumpstartMsg"]["MyLanguage"]["qualify warning"] = "Qualifying file names here will qualify file names in the generated source code.";
pui["jumpstartMsg"]["MyLanguage"]["provide app title"] = "Please provide an application title.";
pui["jumpstartMsg"]["MyLanguage"]["join instructions"] = "Drag a field from one table to another to create an inner join. Click the square to "
+ "change the join type. Fields from extra files cannot appear in a generated grid, detail, or edit page without a join.";
pui["jumpstartMsg"]["MyLanguage"]["unique col help"] = "At least one key is required when View, Edit, Add, or Delete are checked."
 + " Templates using input-capable subfiles also need keys.";
pui["jumpstartMsg"]["MyLanguage"]["rpg oa not avail"] = "RPG OA is not available on &1. JumpStart's RPGLE templates will not work on this system.";
pui["jumpstartMsg"]["MyLanguage"]["rpg free not avail"] = "RPGLE Free (All Specs) is not available on your IBM i system. ";
pui["jumpstartMsg"]["MyLanguage"]["please wait"] = "Please wait...";
pui["jumpstartMsg"]["MyLanguage"]["ws apptype needs ws tplt"] = "When generating a Webservice Application Type, please choose a "
+ "Universal Display File (webservice) template.";

pui["jumpstartText"]["MyLanguage"]["no screen template"] = "(No Screen Template)";
pui["jumpstartText"]["MyLanguage"]["hdg apptype file sel"] = "Application Type and File Selection";
pui["jumpstartText"]["MyLanguage"]["open x dspf in y"] = "Open &1 Display in &2 Designer";
pui["jumpstartText"]["MyLanguage"]["library list"] = "Library List";
pui["jumpstartText"]["MyLanguage"]["read only"] = "Read Only";
pui["jumpstartText"]["MyLanguage"]["ro"] = "RO";
pui["jumpstartText"]["MyLanguage"]["extra db files"] = "Extra Database Files";
pui["jumpstartText"]["MyLanguage"]["correlation"] = "Correlation: ";
pui["jumpstartText"]["MyLanguage"]["none"] = "(none)";
pui["jumpstartText"]["MyLanguage"]["modify"] = "Modify";
pui["jumpstartText"]["MyLanguage"]["remove"] = "Remove";
pui["jumpstartText"]["MyLanguage"]["cancel"] = "Cancel";
pui["jumpstartText"]["MyLanguage"]["join props x to y"] = "Join Properties - &1.&2 to &3.&4";
pui["jumpstartText"]["MyLanguage"]["inner join label"] = "Only include rows where joined fields from both tables are equal.";
pui["jumpstartText"]["MyLanguage"]["join label x y"] = "Include all rows from '&1' and only matching rows from '&2'";
pui["jumpstartText"]["MyLanguage"]["universal"] = "Universal";
pui["jumpstartText"]["MyLanguage"]["rich"] = "Rich";
pui["jumpstartText"]["MyLanguage"]["visual"] = "Visual";
pui["jumpstartText"]["MyLanguage"]["record details"] = "Record Details";
pui["jumpstartText"]["MyLanguage"]["detail"] = "Detail";
pui["jumpstartText"]["MyLanguage"]["detail fmtname"] = "Detail";
pui["jumpstartText"]["MyLanguage"]["app type"] = "Application Type:";
pui["jumpstartText"]["MyLanguage"]["apptype subfile"] = "Subfile";
pui["jumpstartText"]["MyLanguage"]["apptype data entry"] = "Data Entry";
pui["jumpstartText"]["MyLanguage"]["apptype lookup"] = "Lookup";
pui["jumpstartText"]["MyLanguage"]["apptype webservice"] = "Webservice";
pui["jumpstartText"]["MyLanguage"]["subf type"] = "Subfile Type:";
pui["jumpstartText"]["MyLanguage"]["subf type loadall"] = "Load All";
pui["jumpstartText"]["MyLanguage"]["subf type paging"] = "Page at a Time";
pui["jumpstartText"]["MyLanguage"]["actions"] = "Actions:";
pui["jumpstartText"]["MyLanguage"]["view"] = "View";
pui["jumpstartText"]["MyLanguage"]["edit"] = "Edit";
pui["jumpstartText"]["MyLanguage"]["add"] = "Add";
pui["jumpstartText"]["MyLanguage"]["delete"] = "Delete";
pui["jumpstartText"]["MyLanguage"]["view edit add"] = "View/Edit/Add:";
pui["jumpstartText"]["MyLanguage"]["one combined scrn"] = "One Combined Screen";
pui["jumpstartText"]["MyLanguage"]["separate scrn"] = "Separate Screens";
pui["jumpstartText"]["MyLanguage"]["language"] = "Language:";
pui["jumpstartText"]["MyLanguage"]["rpgle free all"] = "RPGLE Free (All Specs)";
pui["jumpstartText"]["MyLanguage"]["rpg free fixed c"] = "RPGLE Free (C Specs Only)";
pui["jumpstartText"]["MyLanguage"]["php"] = "PHP";
pui["jumpstartText"]["MyLanguage"]["node.js"] = "Node.js";
pui["jumpstartText"]["MyLanguage"]["url use of rpg free"] = "http://www.profoundlogic.com/docs/display/PUI/Use+of+RPG+Free";
pui["jumpstartText"]["MyLanguage"]["more information"] = "More information.";
pui["jumpstartText"]["MyLanguage"]["display type"] = "Display Type:";
pui["jumpstartText"]["MyLanguage"]["rich display file"] = "Rich Display File";
pui["jumpstartText"]["MyLanguage"]["html"] = "HTML";
pui["jumpstartText"]["MyLanguage"]["template"] = "Template:";
pui["jumpstartText"]["MyLanguage"]["database file"] = "Database File:";
pui["jumpstartText"]["MyLanguage"]["modify libl"] = "Modify Library List";
pui["jumpstartText"]["MyLanguage"]["extra db files"] = "Extra Database Files:";
pui["jumpstartText"]["MyLanguage"]["app title"] = "Application Title:";
pui["jumpstartText"]["MyLanguage"]["retrieve fields"] = "Retrieve Fields";
pui["jumpstartText"]["MyLanguage"]["join selection"] = "Join Selection";
pui["jumpstartText"]["MyLanguage"]["field selection"] = "Field Selection";
pui["jumpstartText"]["MyLanguage"]["move field up"] = "Move Field Up";
pui["jumpstartText"]["MyLanguage"]["move field down"] = "Move Field Down";
pui["jumpstartText"]["MyLanguage"]["grid"] = "Grid";
pui["jumpstartText"]["MyLanguage"]["search"] = "Search";
pui["jumpstartText"]["MyLanguage"]["detail screen"] = "Detail Screen";
pui["jumpstartText"]["MyLanguage"]["view screen"] = "View Screen";
pui["jumpstartText"]["MyLanguage"]["edit screen"] = "Edit Screen";
pui["jumpstartText"]["MyLanguage"]["add screen"] = "Add Screen";
pui["jumpstartText"]["MyLanguage"]["use field"] = "Use Field";
pui["jumpstartText"]["MyLanguage"]["db field"] = "DB Field";
pui["jumpstartText"]["MyLanguage"]["field explain"] = "The field name used in the generated display file and code sources.";
pui["jumpstartText"]["MyLanguage"]["field"] = "Field";
pui["jumpstartText"]["MyLanguage"]["description"] = "Description";
pui["jumpstartText"]["MyLanguage"]["length type"] = "Length/Type";
pui["jumpstartText"]["MyLanguage"]["null explain"] = "Is the field null-capable by definition (DEF) or because of the join type (JOIN).";
pui["jumpstartText"]["MyLanguage"]["null?"] = "Null?";
pui["jumpstartText"]["MyLanguage"]["coalesce explain"] = "Value to use for this field when the value returned from the database is null.";
pui["jumpstartText"]["MyLanguage"]["coalesce value"] = "Coalesce Value";
pui["jumpstartText"]["MyLanguage"]["primary key"] = "Primary Key";
pui["jumpstartText"]["MyLanguage"]["unique key"] = "Unique Key";
pui["jumpstartText"]["MyLanguage"]["sql preview using std"] = "SQL Preview — (using Standard template)";
pui["jumpstartText"]["MyLanguage"]["code generation"] = "Code Generation";
pui["jumpstartText"]["MyLanguage"]["overwrite existing"] = "Overwrite existing source members or IFS files.";
pui["jumpstartText"]["MyLanguage"]["library"] = "Library:";
pui["jumpstartText"]["MyLanguage"]["pgm src file"] = "Program Source File:";
pui["jumpstartText"]["MyLanguage"]["rpg pgm name"] = "RPG Program Name:";
pui["jumpstartText"]["MyLanguage"]["dsp src file"] = "Display Source File:";
pui["jumpstartText"]["MyLanguage"]["dsp file name"] = "Display File Name:";
pui["jumpstartText"]["MyLanguage"]["generate app"] = "Generate Application";
pui["jumpstartText"]["MyLanguage"]["rich dspf view"] = "Rich Display File (View):";
pui["jumpstartText"]["MyLanguage"]["main php script"] = "Main PHP Script File:";
pui["jumpstartText"]["MyLanguage"]["launch php script"] = "Launch PHP Script";
pui["jumpstartText"]["MyLanguage"]["pjs library explain"] = "Library to where the proxy program will be written.";
pui["jumpstartText"]["MyLanguage"]["proxy name explain"] = "Name to use for the proxy program object.";
pui["jumpstartText"]["MyLanguage"]["proxy name"] = "Proxy Name";
pui["jumpstartText"]["MyLanguage"]["html dsp view"] = "HTML Display (View):";
pui["jumpstartText"]["MyLanguage"]["main nodejs file"] = "Main Node.js File:";

You should only translate the text on the right-hand side of the equal sign.  Do not translate the message IDs (such as "pgm src file" or "detail screen") because Profound UI will not be able to find your message in the dictionary if you change the dictionary name or the message id.

Strings like "&1", "&2", etc. are placeholders. The translations of such strings should also include the placeholder symbols.