The Manifold user interface uses English language by default. Manifold can automatically utilize a different language specified in a user-configurable localization file.
New! A generous number of Manifold System Release 9 licenses may be donated at no charge to academic institutions which sponsor the creation of localization files for their national language or for a new language. This is a limited, experimental program. Please contact sales@manifold.net to participate.
A localization file is just a small file like ui.fr.txt (for French) that contains translations for all text in the interface. Take the localization file for the language you want and put it into the same installation folder as the manifold.exe executable you will be using. Easy! A collection of localization files for various languages is published in the downloadable ui.zip file.
How to use a localization file:
The localization file lists in standard form all text that is used for captions, menus, prompts and other user interface text. Inside Manifold source code, every place in the user interface where a word or phrase is used is identified by a unique tag. Each line in a localization file is a unique tag together with the words and phrases that should be used with that tag.
When Manifold launches, it loads the localization file to know what words and phrases to use for each tag. The user interface can be translated into a different language by translating the default English words and phrases for each tag into the desired language. When the program is launched using the translated localization file, it takes the translated words and phrases from file and uses those instead of English.
The default, canonical, English file is called default.ui.txt. That file is provided in the portable Manifold installation for Release 9 Edge and for Viewer Edge, and it is always kept up to date with any changes for the latest Manifold build. The default file also may be downloaded from default.ui.txt.
Any user can take the canonical default.ui.txt file and provide their own translation for whatever language they like. Comprehensive localization files created by Manifold users are for Arabic (ui.ar.txt), Bengali (ui.bn.txt), Chinese (ui.zh.txt), Dutch (ui.nl.txt), Estonian (ui.et.txt), Filipino / Tagalog (ui.ph.txt), French (ui.fr.txt), German (ui.de.txt ), Hindi (ui.hi.txt), Japanese (ui.ja.txt), Portuguese (ui.pt.txt), Russian (ui.ru.txt), Spanish (ui.es.txt), and Turkish (ui.tr.txt) languages.
Download the latest ui.zip file containing those localization files from the Manifold web site.
Language codes used to name localization files are standard country-language codes. A table giving 655 language codes, such as haw-US for Hawaiian language as used in the United States, can be downloaded in the language_codes.map Release 9 project from the Manifold website.
Most translators do their first translation using a Windows text editor such as Notepad or Notepad++. A conventional text editor works great for initial translations, and it provides features like search and replace that are used a lot in the initial translation, for example, searching for over one hundred occurrences of <value> and replacing each with <Wert>, as in the German translation.
However, because Manifold adds many new features every two weeks, keeping that file up to date can be tedious using an ordinary text editor. To make updates to localization files easy, Manifold provides a tool built into both Viewer and Manifold, the Tools - Edit Localization File console. After the first translation, most translators will maintain their translation and will update it for newer versions of Manifold using the Edit Localization File console.
Edit Localization File makes it very easy to find new or changed tags in the new edition that require translation, and to apply defaults or to re-use already translated, similar tags. Launching the Edit Localization File tool from the latest edition of Manifold will automatically provide the latest set of default, English tags.
See the Tools - Edit Localization File topic for details.
The default.ui.txt file provides a list of strings and English text in simple text form:
CommandFileNew=&New|Create new project.
CommandFileOpen=&Open...|Open existing project.
CommandFileOpenRecent=&Recent Projects|Open recently opened project.
CommandFilePageSetup=&Page Setup...|Change printing options.
CommandFilePrint=&Print...|Print data.
CommandFilePrintPreview=&Print Preview|Print data with preview.
CommandFileSave=&Save|Save opened project.
CommandFileSaveAs=Save &As...|Save opened project with a new name.
CommandHelp=&Help|Help commands.
The German localization file, called ui.de.txt provides German translations of the above:
CommandFileNew=Neu|Erzeuge ein neues Dokument.
CommandFileOpen=Öffnen...|Vorhandendes Dokument öffnen.
CommandFileOpenRecent=Zuletzt benutzte Projekte|Öffne eines der zuletzt benutzten Dokumente.
CommandFilePageSetup=Seite einrichten...|Druckoptionen ändern.
CommandFilePrint=Drucken...|Daten drucken.
CommandFilePrintPreview=Vorschau drucken|Daten aus Vorschau drucken.
CommandFileSave=Speichern|Offenes Dokument sichern.
CommandFileSaveAs=Speichern als...|Offenes Dokument unter neuem Namen sichern.
CommandHelp=Hilfe|Hilfebefehle.
When a German localization file is placed in the same folder as the manifold.exe executable file that is used to launch Manifold, on launch Manifold will look at the Windows language setting and if Windows has been set to German, Manifold will automatically load the German localization file. If we would like to use Windows in English but Manifold in German, we can rename the German localization file to ui.en.txt and it will be used.
Localization files are plain text files, typically saved using UTF-8 with BOM unicode encoding. They can be easily edited in Notepad or any other standard text editor.
A localization file contains approximately 2700 tags, with an average of three or four words associated with each tag. Each tag is on a separate line. The word count to be translated, however, is much less because many of the words repeat over and over. For example, hundreds of tags repeatedly use the word <value> or Value:. That word only needs to be translated once and then a single search and replace will translate the use of that word in hundreds of lines at once.
Each line in the default.ui.txt file begins with the name of a tag, followed by an equal character =, and then followed by the English words or phrases that are used with that tag. Many tags will have additional words or phrases that are used with that tag, the additional items being separated by a | character.
Lines that begin with # are comments. Comments do not need to be translated.
Let us consider an example, the tag for the Edit menu item that appears in the main Manifold menu, which uses a typically Windows File Edit View Tools Window Help main menu:
CommandEdit=&Edit|Edit commands.
CommandEdit=Bearbeiten|Befehle für Änderungen.
This example also shows a nuance of the translation process. The English phrase "Edit commands" is intended to mean "Commands that are used for editing." It is not intended to mean "Make changes to commands."
Launching Help - About will show in the Lang entry the language Manifold recognizes as currently in use. The Lang entry lists languages from most specific to least specific.
A typical entry for Lang for English language users of Manifold is the above, listing the most specific version, en-US, that is, English as used in the United States, with the least specific version being en, generic English. The Lang entry specifies the postfixes following ui. that Manifold will try to use to load localization files.
More than one localization file can be provided. If a particular string is defined in more than one file, Manifold will use the definition in the most specific language. In the example above, Manifold will try to load two localization files, one called ui.en-US.txt and the other called ui.en.txt. If a particular string is defined in both files Manifold will use the definition from the more specific file, ui.en-US.txt. Fallback is automatic: if a more specific localization file does not define a string the definition from a less specific file will be used, or if there is no less specific localization file the string will appear in the default English.
The above system makes it easy to customize not only for a particular language but also for dialects of that language. For example, we could have a ui.de.txt localization file for German and in addition a ui.de-CH.txt localization file for Swiss German. The ui.de-CH.txt localization file need only contain those strings that are different in the Swiss version of German.
The fallback capability also makes it easier to create a new translation: we can start with a blank ui.xx.txt file and add translated strings to it from the starting ui.txt file as we do the translation. To future-proof a translation it is a good idea to use a version control system to maintain the file so that it is easier to add / modify / delete strings as Manifold evolves and new capabilities appear.
Localization files should go into the same folder as the executable for Manifold. For example, to use 64-bit Manifold with a localization file put the localization file into the same folder in which the 64-bit Manifold executable, called manifold.exe, is located.
All current generation Manifold products, including Manifold System and Manifold Viewer, use the same translation strings. A localization file created for Manifold will work for Manifold Viewer and vice versa.
The following advice helps make translations much easier:
Please observe the following rules when translating the localization file. Examples have been provided for some of the rules below using an example translation into German. The examples have a line in the original English, with a German translation beneath.
CommandEdit=Edit|Edit commands.
CommandEdit=Bearbeiten|Befehle für Änderungen.
ErrorRecordInvalid=Invalid record.
ErrorRecordInvalid=Ungültiger Datensatz.
CommandEdit=Edit|Edit commands.
CommandEdit=Bearbeiten|Befehle für Änderungen.
TemplateTileTruncDecs=Truncate to Decimals|Value:|Decimals:
TemplateTileTruncDecs=Abschneiden auf Dezimalstellen|Wert:|Dezimalstellen:
NameNewFieldGeometry=Geom
NameNewFieldGeometry=Geom
TemplateGeomCenter=Center|Geom:|Tolerance:
TemplateGeomCenter=Zentrum|Geom:|Toleranz:
BuilderFunctionGeomAdjacent=GeomAdjacent(<geom>, <geom>, <tolerance>) : <value>
BuilderFunctionGeomAdjacent=GeomAdjacent(<geom>, <geom>, <toleranz>) : <wert>
ErrorExpressionFieldDuplicateOrder=Field specified more than once in ORDER BY.
ErrorExpressionFieldDuplicateOrder=Feld mehrfach für ORDER BY verwendet.
ErrorUuidCantCreate=Cannot generate UUID.
ErrorUuidCantCreate=Kann UUID nicht erstellen.
TemplateVectorHcyBgr=Convert HCY to BGR|Value:
TemplateVectorHcyBgr=HCY in BGR wandeln|Wert:
TemplateGeomMakePoint3=Compose Point with Z|X:|Y:|Z:
TemplateGeomMakePoint3=Erstelle Punkt mit Z|X:|Y:|Z:
DialogHelpAboutCtlUpdateNewF1=New version available: {0}
DialogHelpAboutCtlUpdateNewF1=Neuer Version verfügbar: {0}
ValueFieldChannelF1=Channel {0}
ValueFieldChannelF1=Kanal {0}
ValueEntitiesMoreF1=+ {0} more component(s)
ValueEntitiesMoreF1=+ {0} weitere Komponente(n)
For tags that begin with Builder, except for the list below, translate only those words within < > characters. There are many lines that begin with Builder, but they use the same words, such as <value>, that can be translated once and then instantly translated in hundreds of lines with search and replace. Words within < > angle brackets or words ending in a colon : character, like Value:, are never found within tags, so Search and Replace can be safely used.
BuilderFunctionAtan=Atan(<value>) : <radians>
BuilderFunctionAtan=Atan(<Wert>) : <Bogenmaß>
A word such as <valuex2> or <valuex3> would have just the value part translated, for example, to <Wertx2> or <Wertx3>.
The following Builder tags are usually translated, but might not be if computing culture in the target language is to leave everything to do with SQL and programming in English. These are used as captions for hierarchy folders in the query builder:
BuilderCollate=Collate options
BuilderConstant=Constants
BuilderFields=Fields
BuilderFunction=Functions
BuilderOperator=Operators
BuilderOperatorTuple=Tuple operators
BuilderPragma=Pragmas
BuilderPreprocessor=Preprocessor directives
BuilderQuery=Statements
BuilderThread=Thread configuration
BuilderType=Types
BuilderTypeX2=Vector types (x2)
BuilderTypeX3=Vector types (x3)
BuilderTypeX4=Vector types (x4)
Exception: words and phrases within < > characters, as used with Builder tags, can be longer if desired. Words and phrases within < > angle brackets are used by the query builder to create SQL text, so they are not constrained by the need to fit into limited space within a dialog.
Ignore the & character that is used to mark Windows access keys, for access key shortcuts. Many translators begin by deleting all instances of & in the default.ui.txt file so those do not get in the way. Example:
CommandFileNew=&New|Create new project.
CommandFileNew=Neu|Erzeuge ein neues Dokument.
& characters can be added later to a translated file, if desired, to indicate access keys in the translated user interface. Access key shortcuts are Windows single key, keyboard shortcuts on menu items, usually made visible by pressing the Alt key, to show access keys with an underline. See the Tools - Options topic.
Lines that begin with # are comments and should not be translated.
Some technical words in English are difficult to translate even for experts, and might be left in English. Consider the following example of a line translated into German:
CommandEditCollateSelect=More...|Specify collation.
CommandEditCollateFavorites=Favoriten ändern...|Liste favorisierter Sortierungen (collations) ändern.
The word collation above was translated as Sortierung but the translator also kept the original English collation word in ( ) parentheses. It is OK to use parentheses in translations.
In cases where an English word is jargon, such as traverse, that cannot be found in technical dictionaries, or if an English word is based on somebody's name, such as Kriging, Bessel, Boolean, or Gaussian, it is OK to use a phonetic transcription into the target language.
Do not translate the following line:
ValueNewQueryText=-- $manifold$\n\nSELECT * FROM [mfd_root];
To date, Arabic has been the only RTL language for which comprehensive localizations have been created, so RTL language localizations should be considered experimental. Following are notes on experienced gained from early Arabic localizations:
Generally, using either Notepad or the Edit Localization File dialog in Manifold when simply adding text in an RTL language it just works. Nuances come out more when mixing Arabic and Latin characters.
When we write in Arabic, it is fine until we mix in some Latin characters, such as ... ellipsis (For example in File menu: Open... or Save As...). The Arabic writing is placed right to left but the dots may be placed left to right, so instead of:
...فتح
the text may appear as:
فتح...
There are two options to deal with the above phenomena:
The first option is to manually reverse the punctuation, that is, place it in the beginning and by default, it will move to the end when displayed. A problem with this approach is the Windows Default Language, when Arabic, might switch them back. This is the approach taken in the first Arabic translation.
Recommended: The second option is manually adding an RTL Windows character: (ALT + 0254). This is a control character which displays as nothing and simply instructs text output routines to use RTL, Right To Left, layout. This is the approach taken in the second Arabic translation (as yet unpublished).
Manifold software checks the windows default display language and, in theory, uses that language for right to left or left to right display of text. Thus when the Windows language is Arabic, Manifold will use correct ordering and punctuation should be fixed in any event. Testing, albeit limited testing, indicates that works correctly. However, the RTL character poses no harm if the ordering flips, and, if necessary it will be there to fix the direction in case Manifold overlooks anything.
Therefore the best for now is to manually add the RTL character. It is not clear the first approach is ever wrong, but to be cautious the recommendation is to add the RTL character.
In the future, Manifold will adjust text output in controls to automatically use RTL for Arabic text always. When this happens, the RTL characters in strings that are a mix of Arabic and Latin will be redundant, but they will do no harm.
When creating localization files for RTL languages, add RTL characters manually whenever this is needed to make the string revert. This should only be necessary with mixed text where the system detects two languages, for example, Arabic for the command name and English for ‘…’ ellipsis characters that might be part of the string.
The entire user interface has not been localized. A very few dialogs, less than 1% of the interface, may have English text that does not appear anywhere in the default.ui.txt file, for example, as an OK caption on a button in the dialog. Translating the localization file will not translate such un-localized captions. Thsoe will be added to the localization system in future builds.
ANSI encoding? - In theory, ANSI encoding can be used for localization .txt files but that often causes problems from mismatches with code pages. Use Unicode, UTF-8 with BOM, encoding.
Where are the ui.en.txt and ui.en-US.txt localization files? - If we launch Manifold in a Windows installation that uses US English the en-US and en postfixes are what we will see listed in Help - About, meaning those are the postfixes for localization files Manifold will look for. In the case of English, Manifold does not install with any localization files since English language is built into Manifold. The default.ui.txt file that may be downloaded from the Manifold web site in the portable Manifold installation is the English language file that is compiled into Manifold.
Given that Manifold will look for ui.en-US.txt and ui.en.txt localization files we can exploit that to utilize other languages even if we keep Windows in English. For example, if we are running Windows in English we could take the French localization file, ui.fr.txt, rename it to ui.en.txt and place it into the Manifold program folder and Manifold will launch using the French definitions that are in that file.
Credits: Manifold expert user KlausDE contributed the German localization file used in this example. Join in by adding your language and sharing the localization file with others!
Tools - Edit Localization File