Pier Angelo Vendrame pushed to branch main at The Tor Project / Applications / tor-browser-build
Commits:
-
ae09131d
by Pier Angelo Vendrame at 2024-06-06T16:54:48+02:00
-
4634a7b2
by Pier Angelo Vendrame at 2024-06-06T16:56:52+02:00
-
5ac07d83
by Pier Angelo Vendrame at 2024-06-06T16:56:53+02:00
11 changed files:
- projects/browser/build
- projects/browser/config
- + projects/browser/windows-installer/add-strings.py
- projects/browser/windows-installer/browser-install.nsi
- projects/browser/windows-installer/browser-portable.nsi
- projects/browser/windows-installer/common.nsh
- projects/browser/windows-installer/defines.nsh.in
- + projects/browser/windows-installer/extract-strings.py
- − projects/browser/windows-installer/language-map.sh
- projects/browser/windows-installer/languages.nsh
- rbm.conf
Changes:
| ... | ... | @@ -296,17 +296,17 @@ done |
| 296 | 296 | tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/nsis') %]
|
| 297 | 297 | export PATH="/var/tmp/dist/nsis/bin:$PATH"
|
| 298 | 298 | |
| 299 | - mv $rootdir/windows-installer $distdir/windows-installer
|
|
| 300 | - mv $rootdir/defines.nsh $distdir/windows-installer/
|
|
| 299 | + mv defines.nsh windows-installer/
|
|
| 301 | 300 | [% IF !c('var/testbuild') -%]
|
| 302 | - source $distdir/windows-installer/language-map.sh
|
|
| 303 | 301 | supported_locales="[% tmpl(c('var/locales').join(' ')) %]"
|
| 304 | - for code in $supported_locales; do
|
|
| 305 | - if [[ -n ${nsis_languages[$code]} ]]; then
|
|
| 306 | - echo '!insertmacro MUI_LANGUAGE "'${nsis_languages[$code]}'"' >> $distdir/windows-installer/languages.nsh
|
|
| 307 | - fi
|
|
| 308 | - done
|
|
| 302 | + tar -xf "[% c('input_files_by_name/translation-base-browser') %]"
|
|
| 303 | + python3 windows-installer/add-strings.py --enable-languages translation-base-browser $supported_locales >> windows-installer/languages.nsh
|
|
| 304 | + [% IF c("var/mullvad-browser") -%]
|
|
| 305 | + tar -xf "[% c('input_files_by_name/translation-mullvad-browser') %]"
|
|
| 306 | + python3 windows-installer/add-strings.py translation-mullvad-browser $supported_locales >> windows-installer/languages.nsh
|
|
| 307 | + [% END -%]
|
|
| 309 | 308 | [% END -%]
|
| 309 | + mv windows-installer $distdir/windows-installer
|
|
| 310 | 310 | |
| 311 | 311 | [% IF c('var/mullvad-browser') -%]
|
| 312 | 312 | pushd $distdir/windows-installer
|
| ... | ... | @@ -134,6 +134,14 @@ input_files: |
| 134 | 134 | enable: '[% c("var/windows") %]'
|
| 135 | 135 | - filename: pe_checksum_fix.py
|
| 136 | 136 | enable: '[% c("var/windows") %]'
|
| 137 | + - project: translation
|
|
| 138 | + name: translation-base-browser
|
|
| 139 | + pkg_type: base-browser
|
|
| 140 | + enable: '[% c("var/windows") && !c("var/testbuild") %]'
|
|
| 141 | + - project: translation
|
|
| 142 | + name: translation-mullvad-browser
|
|
| 143 | + pkg_type: mullvad-browser
|
|
| 144 | + enable: '[% c("var/mullvad-browser") && c("var/windows") && !c("var/testbuild") %]'
|
|
| 137 | 145 | # To generate a new keystore, see how-to-generate-keystore.txt
|
| 138 | 146 | - filename: android-qa.keystore
|
| 139 | 147 | enable: '[% c("var/android") %]'
|
| 1 | +#!/usr/bin/env python3
|
|
| 2 | +import argparse
|
|
| 3 | +import configparser
|
|
| 4 | +from pathlib import Path
|
|
| 5 | +import sys
|
|
| 6 | + |
|
| 7 | + |
|
| 8 | +def nsis_escape(string):
|
|
| 9 | + return string.replace("$", "$$").replace('"', r"$\"")
|
|
| 10 | + |
|
| 11 | + |
|
| 12 | +parser = argparse.ArgumentParser()
|
|
| 13 | +parser.add_argument(
|
|
| 14 | + "--enable-languages",
|
|
| 15 | + action="store_true",
|
|
| 16 | + help="Enable the passed languages on NSIS (needs to be done only once)",
|
|
| 17 | +)
|
|
| 18 | +parser.add_argument(
|
|
| 19 | + "directory",
|
|
| 20 | + type=Path,
|
|
| 21 | + help="Directory where the installer strings have been extracted",
|
|
| 22 | +)
|
|
| 23 | +parser.add_argument("langs", nargs="+")
|
|
| 24 | +args = parser.parse_args()
|
|
| 25 | + |
|
| 26 | +# This does not contain en-US, as en-US strings should already be in
|
|
| 27 | +# languages.nsh.
|
|
| 28 | +languages = {
|
|
| 29 | + "ar": "Arabic",
|
|
| 30 | + "ca": "Catalan",
|
|
| 31 | + "cs": "Czech",
|
|
| 32 | + "da": "Danish",
|
|
| 33 | + "de": "German",
|
|
| 34 | + "el": "Greek",
|
|
| 35 | + "es-ES": "Spanish",
|
|
| 36 | + "fa": "Farsi",
|
|
| 37 | + "fi": "Finnish",
|
|
| 38 | + "fr": "French",
|
|
| 39 | + "ga-IE": "ScotsGaelic",
|
|
| 40 | + "he": "Hebrew",
|
|
| 41 | + "hu": "Hungarian",
|
|
| 42 | + "id": "Indonesian",
|
|
| 43 | + "is": "Icelandic",
|
|
| 44 | + "it": "Italian",
|
|
| 45 | + "ja": "Japanese",
|
|
| 46 | + "ka": "Georgian",
|
|
| 47 | + "ko": "Korean",
|
|
| 48 | + "lt": "Lithuanian",
|
|
| 49 | + "mk": "Macedonian",
|
|
| 50 | + "ms": "Malay",
|
|
| 51 | + # Burmese not available on NSIS
|
|
| 52 | + # "my": "Burmese",
|
|
| 53 | + "nb-NO": "Norwegian",
|
|
| 54 | + "nl": "Dutch",
|
|
| 55 | + "pl": "Polish",
|
|
| 56 | + "pt-BR": "PortugueseBR",
|
|
| 57 | + "ro": "Romanian",
|
|
| 58 | + "ru": "Russian",
|
|
| 59 | + "sq": "Albanian",
|
|
| 60 | + "sv-SE": "Swedish",
|
|
| 61 | + "th": "Thai",
|
|
| 62 | + "tr": "Turkish",
|
|
| 63 | + "uk": "Ukrainian",
|
|
| 64 | + "vi": "Vietnamese",
|
|
| 65 | + "zh-CN": "SimpChinese",
|
|
| 66 | + "zh-TW": "TradChinese",
|
|
| 67 | + # Nightly-only at the moment
|
|
| 68 | + "be": "Belarusian",
|
|
| 69 | + "bg": "Bulgarian",
|
|
| 70 | + "pt-PT": "Portuguese",
|
|
| 71 | +}
|
|
| 72 | + |
|
| 73 | +replacements = {
|
|
| 74 | + "min_windows_version": {
|
|
| 75 | + "program": "${PROJECT_NAME}",
|
|
| 76 | + "version": "7",
|
|
| 77 | + },
|
|
| 78 | + "welcome_title": ("${DISPLAY_NAME}",),
|
|
| 79 | + "mb_intro": ("${PROJECT_NAME}",),
|
|
| 80 | + "standalone_description": ("${PROJECT_NAME}",),
|
|
| 81 | +}
|
|
| 82 | + |
|
| 83 | + |
|
| 84 | +def read_strings(code):
|
|
| 85 | + strings = configparser.ConfigParser(interpolation=None)
|
|
| 86 | + strings.read(args.directory / code / "windows-installer/strings.ini")
|
|
| 87 | + if "strings" not in strings:
|
|
| 88 | + return {}
|
|
| 89 | + strings = strings["strings"]
|
|
| 90 | + for key, value in strings.items():
|
|
| 91 | + strings[key] = nsis_escape(value.replace("\n", "").replace("\r", ""))
|
|
| 92 | + return strings
|
|
| 93 | + |
|
| 94 | + |
|
| 95 | +strings_en = read_strings("en-US")
|
|
| 96 | +if not strings_en:
|
|
| 97 | + print("Strings not found for en-US.", file=sys.stderr)
|
|
| 98 | + sys.exit(1)
|
|
| 99 | + |
|
| 100 | +for code in args.langs:
|
|
| 101 | + if code not in languages:
|
|
| 102 | + print(f"Unknown or unsupported language {code}.", file=sys.stderr)
|
|
| 103 | + continue
|
|
| 104 | + lang = languages[code]
|
|
| 105 | + if args.enable_languages:
|
|
| 106 | + print(f'!insertmacro MUI_LANGUAGE "{lang}"')
|
|
| 107 | + |
|
| 108 | + strings = read_strings(code)
|
|
| 109 | + for key, string in strings_en.items():
|
|
| 110 | + tr = strings.get(key)
|
|
| 111 | + # Use an explicit if in case the string is found but it is empty.
|
|
| 112 | + if tr:
|
|
| 113 | + string = tr
|
|
| 114 | + if key in replacements:
|
|
| 115 | + string = string % replacements[key]
|
|
| 116 | + print(f'LangString {key} ${{LANG_{lang}}} "{string}"')
|
|
| 117 | + print() |
| ... | ... | @@ -89,7 +89,7 @@ Function SetupType |
| 89 | 89 | Pop $0
|
| 90 | 90 | !insertmacro MUI_INTERNAL_FULLWINDOW_LOADWIZARDIMAGE "" $0 $PLUGINSDIR\${WELCOME_IMAGE} $1
|
| 91 | 91 | |
| 92 | - ${NSD_CreateLabel} 120u 10u 195u 28u "Welcome to the ${DISPLAY_NAME} Installer"
|
|
| 92 | + ${NSD_CreateLabel} 120u 10u 195u 28u "$(welcome_title)"
|
|
| 93 | 93 | Pop $0
|
| 94 | 94 | SetCtlColors $0 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}"
|
| 95 | 95 | CreateFont $2 "$(^Font)" "12" "700"
|
| ... | ... | @@ -99,18 +99,18 @@ Function SetupType |
| 99 | 99 | Pop $0
|
| 100 | 100 | SetCtlColors $0 "${MUI_TEXTCOLOR}" "${MUI_BGCOLOR}"
|
| 101 | 101 | |
| 102 | - ${NSD_CreateLabel} 120u 105u 195u 12u "Installation Type"
|
|
| 102 | + ${NSD_CreateLabel} 120u 105u 195u 12u "$(installation_type)"
|
|
| 103 | 103 | Pop $0
|
| 104 | 104 | SetCtlColors $0 "" ${MUI_BGCOLOR}
|
| 105 | 105 | |
| 106 | 106 | ${If} $existingInstall == ""
|
| 107 | - ${NSD_CreateRadioButton} 120u 117u 160u 12u "Standard"
|
|
| 107 | + ${NSD_CreateRadioButton} 120u 117u 160u 12u "$(standard)"
|
|
| 108 | 108 | Pop $typeRadioStandard
|
| 109 | 109 | ${Else}
|
| 110 | - ${NSD_CreateRadioButton} 120u 117u 160u 12u "Update current installation"
|
|
| 110 | + ${NSD_CreateRadioButton} 120u 117u 160u 12u "$(update_current)"
|
|
| 111 | 111 | Pop $typeRadioStandard
|
| 112 | 112 | ${EndIf}
|
| 113 | - ${NSD_CreateRadioButton} 120u 129u 160u 12u "Advanced"
|
|
| 113 | + ${NSD_CreateRadioButton} 120u 129u 160u 12u "$(advanced)"
|
|
| 114 | 114 | Pop $typeRadioAdvanced
|
| 115 | 115 | |
| 116 | 116 | SetCtlColors $typeRadioStandard "" ${MUI_BGCOLOR}
|
| ... | ... | @@ -149,7 +149,7 @@ Function SetupTypeUpdate |
| 149 | 149 | ${If} $existingInstall == ""
|
| 150 | 150 | SendMessage $typeNextButton ${WM_SETTEXT} 0 "STR:$(^InstallBtn)"
|
| 151 | 151 | ${Else}
|
| 152 | - SendMessage $typeNextButton ${WM_SETTEXT} 0 "STR:&Update"
|
|
| 152 | + SendMessage $typeNextButton ${WM_SETTEXT} 0 "STR:$(update_button)"
|
|
| 153 | 153 | ${EndIf}
|
| 154 | 154 | ${EndIf}
|
| 155 | 155 | FunctionEnd
|
| ... | ... | @@ -170,18 +170,18 @@ Function AdvancedSetup |
| 170 | 170 | Return
|
| 171 | 171 | ${EndIf}
|
| 172 | 172 | |
| 173 | - !insertmacro MUI_HEADER_TEXT "Advanced setup" ""
|
|
| 173 | + !insertmacro MUI_HEADER_TEXT "$(advanced_setup)" ""
|
|
| 174 | 174 | nsDialogs::Create 1018
|
| 175 | 175 | Pop $0
|
| 176 | 176 | ${If} $0 == error
|
| 177 | 177 | Abort
|
| 178 | 178 | ${EndIf}
|
| 179 | 179 | |
| 180 | - ${NSD_CreateCheckbox} 0 18% 100% 6% "Create a desktop shortcut"
|
|
| 180 | + ${NSD_CreateCheckbox} 0 18% 100% 6% "$(desktop_shortcut)"
|
|
| 181 | 181 | Pop $advancedCheckboxDesktop
|
| 182 | - ${NSD_CreateCheckbox} 0 30% 100% 6% "Standalone installation"
|
|
| 182 | + ${NSD_CreateCheckbox} 0 30% 100% 6% "$(standalone_installation)"
|
|
| 183 | 183 | Pop $advancedCheckboxStandalone
|
| 184 | - ${NSD_CreateLabel} 4% 37% 95% 50% "Choose the standalone installation if you want to install Mullvad Browser in its own dedicated folder, without adding it to the Start menu and to the list of applications."
|
|
| 184 | + ${NSD_CreateLabel} 4% 37% 95% 50% "$(standalone_description)"
|
|
| 185 | 185 | Pop $0
|
| 186 | 186 | ${NSD_OnClick} $advancedCheckboxStandalone AdvancedSetupCheckboxClick
|
| 187 | 187 | ${NSD_OnClick} $advancedCheckboxDesktop AdvancedSetupCheckboxClick
|
| ... | ... | @@ -10,7 +10,7 @@ |
| 10 | 10 | ; Misuse the option to show the readme to create the shortcuts.
|
| 11 | 11 | ; Less ugly than MUI_PAGE_COMPONENTS.
|
| 12 | 12 | !define MUI_FINISHPAGE_SHOWREADME
|
| 13 | - !define MUI_FINISHPAGE_SHOWREADME_TEXT "&Add Start Menu && Desktop shortcuts"
|
|
| 13 | + !define MUI_FINISHPAGE_SHOWREADME_TEXT "$(add_shortcuts)"
|
|
| 14 | 14 | !define MUI_FINISHPAGE_SHOWREADME_FUNCTION "CreateShortcuts"
|
| 15 | 15 | |
| 16 | 16 | !define MUI_PAGE_CUSTOMFUNCTION_LEAVE CheckIfTargetDirectoryExists
|
| ... | ... | @@ -62,7 +62,7 @@ |
| 62 | 62 | ; Helper functions
|
| 63 | 63 | Function CheckRequirements
|
| 64 | 64 | ${IfNot} ${AtLeastWin7}
|
| 65 | - MessageBox MB_USERICON|MB_OK "${PROJECT_NAME} requires at least Windows 7"
|
|
| 65 | + MessageBox MB_USERICON|MB_OK "$(min_windows_version)"
|
|
| 66 | 66 | SetErrorLevel 1
|
| 67 | 67 | Quit
|
| 68 | 68 | ${EndIf}
|
| ... | ... | @@ -70,7 +70,7 @@ FunctionEnd |
| 70 | 70 | |
| 71 | 71 | Function CheckIfTargetDirectoryExists
|
| 72 | 72 | ${If} ${FileExists} "$INSTDIR\*.*"
|
| 73 | - MessageBox MB_YESNO "The destination directory already exists. Do you want to continue anyway?" IDYES +2
|
|
| 73 | + MessageBox MB_YESNO "$(destination_exists)" IDYES +2
|
|
| 74 | 74 | Abort
|
| 75 | 75 | ${EndIf}
|
| 76 | 76 | FunctionEnd |
| ... | ... | @@ -35,8 +35,7 @@ |
| 35 | 35 | !define URL_UPDATE "https://github.com/mullvad/mullvad-browser/releases/[% c('var/torbrowser_version') %]"
|
| 36 | 36 | !define URL_HELP "https://mullvad.net/help/tag/browser/"
|
| 37 | 37 | |
| 38 | - ; TODO: This will likely be localized in the future.
|
|
| 39 | - !define INTRO_TEXT "Mullvad Browser is a privacy-focused web browser designed to minimize tracking and fingerprinting."
|
|
| 38 | + !define INTRO_TEXT "$(mb_intro)"
|
|
| 40 | 39 | [% ELSE -%]
|
| 41 | 40 | ; Not defined for Tor Browser
|
| 42 | 41 | !define APP_DIR "TorProject"
|
| ... | ... | @@ -48,5 +47,6 @@ |
| 48 | 47 | !define URL_UPDATE "https://blog.torproject.org/new[% IF c('var/alpha') %]-alpha[% END %]-release-tor-browser-[% c('var/torbrowser_version') FILTER remove('\.') %]"
|
| 49 | 48 | !define URL_HELP "https://tb-manual.torproject.org/"
|
| 50 | 49 | |
| 50 | + ; TODO: Localize if we actually start using it.
|
|
| 51 | 51 | !define INTRO_TEXT "Tor Browser. Protect yourself against tracking, surveillance, and censorship."
|
| 52 | 52 | [% END -%] |
| 1 | +#!/usr/bin/env python3
|
|
| 2 | +import re
|
|
| 3 | + |
|
| 4 | + |
|
| 5 | +with open("languages.nsh") as f:
|
|
| 6 | + strings = re.findall(
|
|
| 7 | + r'LangString (\S+) \${LANG_ENGLISH} "(.+)"$', f.read(), re.I | re.M
|
|
| 8 | + )
|
|
| 9 | +print("[strings]")
|
|
| 10 | +for key, value in strings:
|
|
| 11 | + print(f"{key}={value}") |
| 1 | -#!/bin/bash
|
|
| 2 | - |
|
| 3 | -# Usually NSIS uses English name with capital first letter.
|
|
| 4 | -# You can check the exact language names on NSIS's archive or here:
|
|
| 5 | -# https://sourceforge.net/p/nsis/code/HEAD/tree/NSIS/trunk/Contrib/Language%20files/
|
|
| 6 | - |
|
| 7 | -declare -A nsis_languages
|
|
| 8 | -nsis_languages[ar]="Arabic"
|
|
| 9 | -nsis_languages[ca]="Catalan"
|
|
| 10 | -nsis_languages[cs]="Czech"
|
|
| 11 | -nsis_languages[da]="Danish"
|
|
| 12 | -nsis_languages[de]="German"
|
|
| 13 | -nsis_languages[el]="Greek"
|
|
| 14 | -nsis_languages[es-ES]="Spanish"
|
|
| 15 | -nsis_languages[fa]="Farsi"
|
|
| 16 | -nsis_languages[fi]="Finnish"
|
|
| 17 | -nsis_languages[fr]="French"
|
|
| 18 | -nsis_languages[ga-IE]="ScotsGaelic"
|
|
| 19 | -nsis_languages[he]="Hebrew"
|
|
| 20 | -nsis_languages[hu]="Hungarian"
|
|
| 21 | -nsis_languages[id]="Indonesian"
|
|
| 22 | -nsis_languages[is]="Icelandic"
|
|
| 23 | -nsis_languages[it]="Italian"
|
|
| 24 | -nsis_languages[ja]="Japanese"
|
|
| 25 | -nsis_languages[ka]="Georgian"
|
|
| 26 | -nsis_languages[ko]="Korean"
|
|
| 27 | -nsis_languages[lt]="Lithuanian"
|
|
| 28 | -nsis_languages[mk]="Macedonian"
|
|
| 29 | -nsis_languages[ms]="Malay"
|
|
| 30 | -# nsis_languages[my]="Burmese" # Not available on NSIS
|
|
| 31 | -nsis_languages[nb-NO]="Norwegian"
|
|
| 32 | -nsis_languages[nl]="Dutch"
|
|
| 33 | -nsis_languages[pl]="Polish"
|
|
| 34 | -nsis_languages[pt-BR]="PortugueseBR"
|
|
| 35 | -nsis_languages[ro]="Romanian"
|
|
| 36 | -nsis_languages[ru]="Russian"
|
|
| 37 | -nsis_languages[sq]="Albanian"
|
|
| 38 | -nsis_languages[sv-SE]="Swedish"
|
|
| 39 | -nsis_languages[th]="Thai"
|
|
| 40 | -nsis_languages[tr]="Turkish"
|
|
| 41 | -nsis_languages[uk]="Ukrainian"
|
|
| 42 | -nsis_languages[vi]="Vietnamese"
|
|
| 43 | -nsis_languages[zh-CN]="SimpChinese"
|
|
| 44 | -nsis_languages[zh-TW]="TradChinese"
|
|
| 45 | - |
|
| 46 | -# Currently nightly only
|
|
| 47 | -nsis_languages[be]="Belarusian"
|
|
| 48 | -nsis_languages[bg]="Bulgarian"
|
|
| 49 | -nsis_languages[pt-PT]="Portuguese" |
| 1 | 1 | ;--------------------------------
|
| 2 | 2 | ; Additional languages
|
| 3 | 3 | !insertmacro MUI_LANGUAGE "English" ; Always available
|
| 4 | - ; The rest of the languages will be added here during the build. |
|
| 4 | + |
|
| 5 | + ; Base Browser strings
|
|
| 6 | + LangString add_shortcuts ${LANG_ENGLISH} "&Add Start menu and desktop icons"
|
|
| 7 | + ; Use %(program)s instead of ${PROJECT_NAME} and %(version)s instead of 7
|
|
| 8 | + ; when sending the string from localization.
|
|
| 9 | + LangString min_windows_version ${LANG_ENGLISH} "${PROJECT_NAME} requires Windows 7 or later."
|
|
| 10 | + LangString destination_exists ${LANG_ENGLISH} "The destination folder already exists. Do you want to continue anyway?"
|
|
| 11 | + |
|
| 12 | + ; Mullvad Browser strings
|
|
| 13 | + ; Use %s instead of ${DISPLAY_NAME} for localization.
|
|
| 14 | + LangString welcome_title ${LANG_ENGLISH} "Welcome to the ${DISPLAY_NAME} installer"
|
|
| 15 | + ; Use %s instead of ${PROJECT_NAME} for localization
|
|
| 16 | + LangString mb_intro ${LANG_ENGLISH} "${PROJECT_NAME} is a privacy-focused web browser designed to minimize tracking and fingerprinting."
|
|
| 17 | + LangString installation_type ${LANG_ENGLISH} "Installation type"
|
|
| 18 | + LangString standard ${LANG_ENGLISH} "Standard"
|
|
| 19 | + LangString update_current ${LANG_ENGLISH} "Update current installation"
|
|
| 20 | + LangString advanced ${LANG_ENGLISH} "Advanced"
|
|
| 21 | + LangString update_button ${LANG_ENGLISH} "&Update"
|
|
| 22 | + LangString advanced_setup ${LANG_ENGLISH} "Advanced Installation"
|
|
| 23 | + LangString desktop_shortcut ${LANG_ENGLISH} "Add desktop icon"
|
|
| 24 | + LangString standalone_installation ${LANG_ENGLISH} "Standalone installation"
|
|
| 25 | + ; Use %s instead of ${PROJECT_NAME} for localization
|
|
| 26 | + LangString standalone_description ${LANG_ENGLISH} "Choose the standalone installation if you want to install ${PROJECT_NAME} in its own dedicated folder, without adding it to the Start menu and to the list of applications."
|
|
| 27 | + |
|
| 28 | + ; The rest of the languages and translated strings will be added here by
|
|
| 29 | + ; add-strings.py. |
| ... | ... | @@ -110,7 +110,7 @@ var: |
| 110 | 110 | exe_name: firefox
|
| 111 | 111 | locale_ja: ja
|
| 112 | 112 | # When adding new languages, add the equivalent NSIS name to
|
| 113 | - # projects/browser/windows-installer/language-map.sh.
|
|
| 113 | + # projects/browser/windows-installer/add-strings.py.
|
|
| 114 | 114 | locales:
|
| 115 | 115 | - ar
|
| 116 | 116 | - ca
|