Hitachi Vantara Pentaho Community Wiki
Skip to end of metadata
Go to start of metadata

Adhoc Reporting's user interface is internationalized to support users whose preferred language is not English. If you would like to localize Adhoc Reporting for your preferred locale, follow these steps:

  • Identify the language subtag for your locale. For instance, the subtag for French is fr, ths subtag for Canadian French is fr-CA. Click here for help interpretting the subtag registry.
  • In the BI platform code, create the appropriate language sub-folder under the root folder for the resource bundle.
    Adhoc Reporting has 2 JavaScript resource bundles to support localization of application text. Each resource bundle contains one or more files, one file for each supported language. The file name containing localized strings is always "message_strings.js". The root folders for the 2 resource bundles are:
    1. /pentaho/server/pentaho/webapp/adhoc/js/common/ui/messages
    2. /pentaho/server/pentaho/webapp/adhoc/js/ui/messages
      Resource bundle #1 (with common in the path) is for localized text in the JavaScript code under /pentaho/server/pentaho/webapp/adhoc/js/common/ui/messages.
      Likewise resource bundle #2 is for text in JavaScript code under /pentaho/server/pentaho/webapp/adhoc/js/ui/messages.
      The language specific folders always go under the <root folder>/nls.
      For instance, if you are localizing resource bundle #2 for French, you would create this folder:
      /pentaho/server/pentaho/webapp/adhoc/js/ui/messages/nls/fr
      Similarly, if you are localizing for Canadian French, you would create this folder:
      /pentaho/server/pentaho/webapp/adhoc/js/ui/messages/nls/fr-CA
  • Make a copy of this file:
    <root folder>/nls/message_strings.js
    And place it in the language sub-folder that was created in the previous step. You should now have this file in your copy of the BI platform:
    <root folder>/nls/fr/message_strings.js
  • Edit this file and translate the text from English to your preferred language.
  • NOTE: the resolution of a string in the resource bundle is from most specific to least specific locale. In the example of the fr-CA locale, the string resolution code first looks for a particular string in .../nls/fr-CA/message_strings.js. If the string is not found there, then it looks in .../nls/fr/message_strings.js. If the string is not found there, then it looks in .../nls/message_strings.js. This implies that if a particular string translation is the same in Canadian French is it is in French in general, that string does not need to be defined in fr-CA/messages.js, since it will be found in .../nls/fr/message_strings.js.

We encourage members of the Pentaho Community to participate in the localization of Adhoc Reporting and the BI platform, and contribute your localization work back to the Pentaho Community.

You may find it useful to download and run Quick Locale Switcher, which is a useful add-on for changing Firefox's language settings while debugging your localization code.

  • No labels

2 Comments

  1. user-4a1eb

    Hi,

    I have made a traduction in French and i can send you the file.
    But it's dont work. Is there any params to do on a pentaho file.

    My metadata content a locale 'fr'. I put the file "message_strings.js" on " /pentaho/server/pentaho/webapp/adhoc/js/ui/messages/nls/fr" but Adhoc dont use it ?

    Thanks

  2. user-4a1eb

    HI,

    Here you can find "message_strings.js" in French :

     {
    step1Title:"Etape 1: S\u00E9lectionner une vue m\u00E9tier",
    step2Title:"Etape 2: S\u00E9lectionner les objets",
    step3Title:"Etape 3: Personalisation",
    step4Title:"Etape 4: Param\u00E8tre du rapport",
    goBtnTxt:"Lancer",
    okBtnTxt:"Ok",
    cancelBtnTxt:"Annuler",
    searchBtnTxt:"Chercher",
    backBtnTxt:"Retour",
    nextBtnTxt:"Suivant",
    saveBtnTxt:"Enregistrer",
    saveAsBtnTxt:"Enregistrer sous ...",
    cancelBtnTxt:"Annuler",
    invalidPageNum:"N° de page invalide : %

    Unknown macro: {0}

    ",
    levelTitle:"Niveau %

    ",
    addColumnsToGrps:"Ajouter un ou plusieurs objet de regroupement",
    addColumnsToDetails:"Ajouter des objets de d\u00E9tails",
    addColumnsToFilters:"Ajouter des objets de filtre",
    deleteFromFilters:"Supprimer de la liste des filtres",
    portraitBtnTxt:"Portrait",
    landscapeBtnTxt:"Paysage",
    letterSizeBtnTxt:"Letter",
    legalSizeBtnTxt:"A4",
    sessionExpiredMsg:"Votre session a expir\u00E9e. Connectez-vous de nouveau.",
    invalidWebServiceCallback:"Invalid state in WebServiceProxy.executeFunk, unrecognized callback function.",
    indexOutOfRange:"Index en dehors de la plage.",
    moveColumnUp:"D\u00E9placer plus haut",
    moveColumnDown:"D\u00E9placer plus bas",
    deleteColumn:"Supprimer une colonne",
    loadingProgressMsg:"Chargement en cours ...",
    waqrLoadFailed:"Impossible de charger l'interface Adhoc Reporting :  %

    Unknown macro: {0}

    ",
    reportTemplateLoadFailed:"Impossible de charger le mod\u00E8le de rapport : %

    ",
    invalidGrpListItem:"Element de regroupement invalide.",
    invalidGrpHdr:"Invalid Item type, expecting RSGroupHeader.",
    invalidDetailItem:"Invalid Item type, expecting RSDetailItem.",
    invalidFilterItem:"Invalid Item type, expecting RSFilterItem.",
    invalidGrpItem:"Invalid Item type, expecting RSGroupItem.",
    invalidListType:"ListCtrl.addItem failed: attempting to add unrecognized object.",
    pg3SaveErrorMsg:"Error while writing wizard page 3 to ReportSpec: %

    Unknown macro: {0}

    ",
    selectBusinessModelWarn:"S\u00E9lectionnez une vue m\u00E9tier avant de poursuivre",
    selectBusinessModelMsg:"S\u00E9lectionnez une vue m\u00E9tier parmi la liste des vues disponibles.",
    addDetailsMsg:"Ajoutez une colonne \u00E0 l'aide des \u00E9lements de la liste de d\u00E9tails.",
    invalidFileName:"%

    est un nom de fichier invalide. Les noms de fichiers ne doivent pas contenir les caract\u00E8res suivant : /?%*:|\"<>",
    emptySolutionName:"S\u00E9lectionnez un dossier solution Pentaho",
    invalidBranchElement:"Element invalide dans le document, un des attributs \u00E0 faux.",
    searchDlgTitle:"Chercher",
    availItemsTitle:"S\u00E9lectionnez une ou plusieurs colonnes et ajoutez-les aux zones de regroupements, d\u00E9tails et filtres",
    searchTooltip:"Chercher la valeur d'une colonne",
    addConstraintBtnTxt:"Ajouter une contrainte",
    constraintIdxOutOfRange:"Index des contraintes %

    Unknown macro: {0}

    en dehors de la plage.",
    unknownComparator:"Comparateur inconnu dans la contrainte : %

    .",
    addConstraintsBtnHoverTxt:"S\u00E9lectionnez une colonne de regroupement, d\u00E9tail ou filtre et cliquez sur Ajouter une contrainte.",
    deleteConstraintsBtnHoverTxt:"S\u00E9lectionnez une colonne dans la table des contraintes, et cliquez sur supprimer.",
    searchWildcardHelpMsg:"Utilisez * dans vos recherches pour indiquer un texte libre.",
    dragHereMsg:"[d\u00E9placer l'objet ici]",
    alignGrpHdrTopBtnTxt:"Haut",
    alignGrpHdrMiddleBtnTxt:"Milieu",
    alignGrpHdrBottomBtnTxt:"Bas",
    alignGrpItemLeftBtnTxt:"Gauche",
    alignGrpItemCenterBtnTxt:"Centre",
    alignGrpItemRightBtnTxt:"Droite",
    noGrpPgBrkBtnTxt:"Rien",
    alignDetailItemLeftBtnTxt:"Gauche",
    alignDetailItemCenterBtnTxt:"Centre",
    alignDetailItemRightBtnTxt:"Droite",
    pgBrkBeforeGrpBtnTxt:"Regroupement pr\u00E9c\u00E9dent",
    pgBrkAfterGrpBtnTxt:"Regroupement suivant",
    unknownColumnType:"Type de colonne inconnu : %

    Unknown macro: {0}

    ",
    invalidGroupNum:"Impossible d'identifier le niveau de regroupement : %

    ",
    selectModelTitle:"S\u00E9lectionner une vue m\u00E9tier",
    step1DetailsTitle:"D\u00E9tails de la vue m\u00E9tier",
    availModelsTitle:"Vues m\u00E9tier",
    loadingViewsProgressMsg:"Chargement des vues ...",
    businessViewTitle:"Vues m\u00E9tier",
    descTitle:"Description",
    defineTmpltTitle:"Appliquer un mod\u00E8le",
    tmpltDetailsTitle:"D\u00E9tails des mod\u00E8les",
    availTmpltsTitle:"Mod\u00E8les",
    thumbnailTitle:"Vignette",
    step2AvailItemsTitle:"El\u00E9ments disposnibles",
    DISTINCT_SELECTIONS_LABEL:"Supprimer les doublons",
    selectedItemsTitle:"El\u00E9ments s\u00E9lectionn\u00E9s",
    step2GroupsTitle:"Regroupements",
    step2DetailsTitle:"D\u00E9tails",
    step2FiltersTitle:"Filtres",
    step3GroupsTitle:"Regroupements",
    step3DetailsTitle:"D\u00E9tails",
    step3FiltersTitle:"Filtres",
    step3GrpsGeneralTitle:"G\u00E9n\u00E9ral",
    step3GrpsFormatTitle:"Formater",
    step3GrpsLvlNameTitle:"Nom du niveau",
    step3GrpOptionsTitle:"Options",
    step3RepeatGrpHdr:"R\u00E9p\u00E9ter le nom du regroupement",
    step3ShowTotals:"Afficher les totaux",
    step3PgBrkTitle:"Saut de page",
    step3GrpAlignTitle:"Alignement",
    step3GrpsFormatTitle2:"Formater",
    step3FormatListNumericLabel:"Format num\u00E9rique",
    step3FormatListDateLabel:"Format date",
    step3FormatListEmptyLabel:"",
    step3GrpAlignTitle2:"Alignement",
    step3DetailsFormatTitle:"Formater",
    step3CalcsTitle:"Calculs",
    step3DetailsAlignTitle:"Alignement",
    step3DetailsUseCalcFunc:"Utiliser une fonction",
    STEP3_GROUP_LEVEL_NAME_TOOLTIP: "Fournir un commentaire pour le regroupement (optionnel)",
    STEP3_GROUP_TOTAL_LABEL_TOOLTIP: "Fournir un commentaire pour la ligne de totalisation dans le rapport.",
    STEP3_SHOW_GROUP_SUMMARY_TOOLTIP: "Cocher pour afficher les informations de totalisation (comptage, somme, moyenne, etc.) pour les colonnes d\u00E9tail.",
    STEP3_REPEAT_GROUP_HEADER_TOOLTIP: "Cocher pour r\u00E9p\u00E9ter l'ent\u00Ete de groupe sur chaque page dans un rapport Pdf.",
    STEP3_SELECT_AN_ITEM_TOOLTIP: "S\u00E9lectionner un \u00E9l\u00E9ment depuis les groupes, les d\u00E9tails ou la liste de filtres.",
    STEP3_ADD_CONSTRAINT_TOOLTIP: "S\u00E9lectionner un \u00E9l\u00E9ment depuis les groupes, les d\u00E9tails ou la liste de filtres et cliquer sur 'Ajouter une contrainte'",
    STEP3_GROUPS_EDIT_SORT_COLUMN_TOOLTIP: "Select an item from the Groups list. Then select 'ascending' or 'descending'.",
    STEP3_DETAILS_EDIT_SORT_COLUMN_TOOLTIP: "Select an item from the Details list. Click the 'Add' button. Then select 'ascending' or 'descending'.",
    STEP3_ADD_DETAILS_SORT: "Select an item in the Details list, and click 'Add'",
    STEP3_CANNOT_EDIT_GROUPS_SORT: "You can not add to, delete from, or reorder the Group sort columns.",
    STEP3_DETAIL_EDITOR_TOOLTIP: "Configure the detail item's attributes.",
    STEP3_GROUP_ITEM_EDITOR_TOOLTIP: "Configure the group item's attributes.",
    STEP3_GROUP_HEADER_EDITOR_TOOLTIP: "Configure the group header's attributes.",
    /* begin aggregation functions */
    aggrFuncNone:"Aucune",
    aggrFuncSum:"Somme",
    aggrFuncCount:"Comptage",
    aggrFuncAverage:"Moyenne",
    aggrFuncMin:"Min",
    aggrFuncMax:"Max",
    /* end aggregation functions */
    step3ConstraintsTitle:"Contraintes",
    step3SortColumns:"Sort Columns",
    step3ConstraintCurrSettings:"Param\u00E8tres actuels",
    step3GroupColumnSorterTitle:"Sort Group Columns",
    step3DetailColumnSorterTitle:"Sort Detail Columns",
    step4GeneralTitle:"G\u00E9n\u00E9ral",
    step4OrientationTitle:"Orientation",
    step4PaperTitle:"Papier",
    step4ReportDescTitle:"Description du rapport",
    step4HdrTitle:"Ent\u00EAte",
    step4ReportTitle:"Rapport",
    step4PgTitle:"Page",
    step4FooterTitle:"Pied de page",
    step4FooterRptTitle:"Rapport",
    step4FooterPgTitle:"Page",
    saveDlgSaveAsPrompt:"Sauver sous:",
    saveDlgWherePrompt:"Où:",
    saveDlgSelectSltnTitle:"S\u00E9lectionner une solution",
    saveDlgOutputTypeTitle:"Type de sortie",
    srchDlgResultsTitle:"R\u00E9sultat de la recherche",
    previewFormatPrompt:"Pr\u00E9visualiser en:",
    CONSTRAINTS_INVALID:"The values for the highlighted constraints are invalid. Please hover the mouse pointer over the constraint for details.",
    unableToLoadEmptyViewId:"Unable to load business view with an empty view Id.",
    unableToLoadEmptyDomainId:"Unable to load business view with an empty domain Id.",
    youMayContinue:"You may now continue.",
    close:"Fermer",
    unableToSelectModel:"Unable to select a model. The reportSpec document is missing either the domain Id or the model Id.",
    loadingDescription: "Loading Model Description ...",
    loadingView: "Loading Business View ...",
    searching: "Recherche en cours ...",
    saving: "Sauvegarde en cours ...",
    working: "Travail en cours ...",
    badSortInfo:"ReportSpec load error: sort information specified for a column that is not in the Groups or Details columns.",
    saveLabel:"Sauver",
    openLabel:"Ouvrir",
    ascLabel:"ascendant",
    descLabel:"descendant",
    ascLabelUpper:"Asc",
    descLabelUpper:"Desc",
    columnLabel:"Colonne",
    tableLabel:"Table",
    overwriteFile:"The solution file %

    Unknown macro: {0}

    already exists. Would you like to overwrite?",
    invalidColumnType:"Invalid column type requested for constraint control: %

    .",
    EXACTLY_MATCHES:"exactly matches",
    CONTAINS:"contient",
    ENDS_WITH:"fini par",
    BEGINS_WITH:"commence par",
    DOES_NOT_CONTAIN:"ne contient pas",
    ON:"sur",
    ON_OR_AFTER:"sur ou apr\u00E8s",
    ON_OR_BEFORE:"sur ou avant",
    AFTER:"apr\u00E8s",
    BEFORE:"avant",
    NOT_ON:"n'est pas sur",
    STEP3_SHOW_GROUP_SUMMARY:"Show Group Summary",
    STEP3_GROUP_TOTAL_LABEL:"Group Summary Label",
    DEFAULT_GROUP_TOTAL_LABEL:"Total",
    FREE_FORM:"Free Form",
    BUILDER: "Constructeur",
    ERROR_TAB_EXISTS: "Error, try to add tab \"%

    Unknown macro: {0}

    \". A tab by this name already exists in the TabCtrl.",
    MQL_PARSE_FAILED: "MQL Parser error: failed trying to parse: \"%

    \".",
    REPORT_FILE_FAILED_TO_LOAD: "Error: the report definition file contains invalid data. Reason: %

    Unknown macro: {0}

    ",
    CTOR_CALL_UNNEEDED: "WebServiceProxy: ctor call is unneeded.",
    MOVE_TO_POSITION_OUT_OF_BOUNDS: "Move to position is greater than length of list.",
    MOVE_FROM_POSITION_OUT_OF_BOUNDS: "Move from position is greater than length of list.",
    FOLDER_PATH_MUST_BE_SET: "UIUtil.imageFolderPath must be set before calling UIUtil.setImageFolderPath().",
    INVALID_COMPARATOR_NAME: "Invalid comparator function name: %

    .",
    UNRECOGNIZED_PAGE_BREAK_VALUE: "Unrecognized value for page break on group header: %

    Unknown macro: {0}

    .",
    FAILED_CURR_DIR_IS_NULL: "RepositoryBrowser.getSolutionName() failed: this.currDir is null.",
    PARTIAL_MQL_PARSE_FAILURE: "The Builder was unable to parse parts of the MQL in the Free Form editor. Some or all of the MQL from the Free Form editor will be lost. Would you like to continue?",
    /* begin number format */
    NUMBER_FORMAT_NEG_MONEY_LABEL: "$ 1,234; -$ 1,234",
    NUMBER_FORMAT_PAREN_MONEY_LABEL: "$ 1,234; ($ 1,234)",
    NUMBER_FORMAT_NEG_DECIMAL_MONEY_LABEL: "$ 1,234.56; -$ 1,234.56",
    NUMBER_FORMAT_NEG_MONEY: "$ #,###;-$ #,###",
    NUMBER_FORMAT_PAREN_MONEY: "$ #,###;($ #,###)",
    NUMBER_FORMAT_NEG_DECIMAL_MONEY: "$ #,###.##;-$ #,###.##",
    /* end number format */
    VALUE_MUST_BE_NUMERIC: "Value must be a number.",
    VALUE_MUST_BE_NONEMPTY: "Value cannot be empty.",
    ERROR_NO_BUSINESS_MODELS: "There are either no Business Models defined in the metadata, or you do not have permission to access any of the Business Models. Please create one or more Business Models using the Metadata Editor and then publish them to the Pentaho server. Or, use the Metadata Editor to give the appropriate user permission to access to the Business Model."
    }