diff --git a/packaging/addons/openproject/bin/configure b/packaging/addons/openproject/bin/configure index e0f5324fe4d..d4ada8cc096 100755 --- a/packaging/addons/openproject/bin/configure +++ b/packaging/addons/openproject/bin/configure @@ -40,11 +40,26 @@ input_protocol_params() { input_admin_mail() { if wiz_get "smtp/admin_email" &>/dev/null ; then - STATE="done" + STATE="input_default_language" return fi wiz_put "openproject/admin_email" + if wiz_ask ; then + STATE="input_default_language" + else + STATE="start" + fi +} + +input_default_language() { + # if legacy existing install, or when reconfiguring an existing install, we do not ask for default language again + if ${APP_NAME} config:get HOST &>/dev/null ; then + STATE="done" + return + fi + + wiz_put "openproject/default_language" if wiz_ask ; then STATE="done" else @@ -66,6 +81,9 @@ state_machine() { "input_admin_mail") input_admin_mail ;; + "input_default_language") + input_default_language + ;; "done") echo "DONE" exit 0 diff --git a/packaging/addons/openproject/bin/postinstall b/packaging/addons/openproject/bin/postinstall index ee6a8148682..ec7104f02a2 100755 --- a/packaging/addons/openproject/bin/postinstall +++ b/packaging/addons/openproject/bin/postinstall @@ -10,6 +10,10 @@ CLI="${APP_NAME}" ADMIN_EMAIL="$(wiz_get "openproject/admin_email" || wiz_get "smtp/admin_email")" ${CLI} config:set RECOMPILE_RAILS_ASSETS="true" +# Set the configured default language +# Will be unset at installation postinstall before restart to ensure the setting is writable +${CLI} config:set OPENPROJECT_DEFAULT_LANGUAGE="$(wiz_get "openproject/default_language")" + # Check for custom gems custom_gemfile=$(${CLI} config:get CUSTOM_PLUGIN_GEMFILE || echo "") if [ -n "$custom_gemfile" ] && [ -f "$custom_gemfile" ]; then @@ -103,8 +107,8 @@ ${CLI} run rake "packager:before_postinstall" # Use the OpenProject internal setup in one environment task ${CLI} run rake "${rake_commands} packager:postinstall" -# For some reason RHEL8 creates files with chmod 0600 -find "${APP_HOME}/public" -type f -exec chmod 0644 {} \; +# For some reason RHEL8 creates files with chmod 0600 +find "${APP_HOME}/public" -type f -exec chmod 0644 {} \; # Allow OpenProject to perform custom initialization steps in the context of this installer if [ -e "${APP_HOME}/packaging/scripts/postinstall" ]; then diff --git a/packaging/addons/openproject/templates b/packaging/addons/openproject/templates index 1f7d546b3a5..74d5825e7cc 100644 --- a/packaging/addons/openproject/templates +++ b/packaging/addons/openproject/templates @@ -19,3 +19,11 @@ Type: string Default: admin@example.net Description: Your email address for the admin account: Enter the email address to be used for first admin account. + +Template: openproject/default_language +Type: select +Choices: af, ar, az, be, bg, ca, ckb-IR, cs, da, de, el, en, eo, es, et, eu, fa, fi, fil, fr, he, hi, hr, hu, id, it, ja, ka, ko, lt, lv, mn, ne, nl, no, pl, pt, ro, ru, rw, si, sk, sl, sr, sv, th, tr, uk, vi, zh-CN, zh-TW +Translations: Afrikaans, العربية, Azərbaycan, Беларуская, Български, Català, کوردیی ناوەندی, Čeština, Dansk, Deutsch, Ελληνικά, English, Esperanto, Español, Eesti, Euskara, فارسی, Suomi, Filipino, Français, עברית, हिन्दी, Hrvatski, Magyar, Indonesia, Italiano, 日本語, ქართული, 한국어, Lietuvių, Latviešu, Монгол, नेपाली, Nederlands, Norsk, Polski, Português, Română, Русский, Kinyarwanda, සිංහල, Slovenčina, Slovenščina, Српски, Svenska, ไทย, Türkçe, Українська, Tiếng việt, 简体中文, 繁体中文 +Default: en +Description: Default language of OpenProject: + Choose the language to use by default when accessing your OpenProject instance. diff --git a/packaging/scripts/postinstall b/packaging/scripts/postinstall index 818d260cf1c..1832eade051 100644 --- a/packaging/scripts/postinstall +++ b/packaging/scripts/postinstall @@ -41,3 +41,6 @@ ${CLI} config:unset SMTP_PORT ${CLI} config:unset SMTP_USERNAME ${CLI} config:unset SMTP_PASSWORD ${CLI} config:unset SMTP_DOMAIN + +# Same for default language +${CLI} config:unset OPENPROJECT_DEFAULT_LANGUAGE diff --git a/script/i18n/print_packager_languages_choices b/script/i18n/print_packager_languages_choices new file mode 100755 index 00000000000..41a77fdd846 --- /dev/null +++ b/script/i18n/print_packager_languages_choices @@ -0,0 +1,51 @@ +#!/usr/bin/env ruby + +# Outputs the Choices and Translations lines for openproject/default_language +# select option in packager installation. +# +# The template is located at packaging/addons/openproject/templates + +require 'pathname' +require 'yaml' + +class App + class << self + def rails_root + @rails_root ||= + Pathname.new(__dir__) + .ascend + .find { |dir| dir.join('Gemfile').exist? } + .tap { |dir| raise "Unable to find Rails root directory (looking up from #{__dir__})" if dir.nil? } + end + end +end + +class PrintPackagerLanguagesChoices + class << self + def call + languages_codes, languages_names = languages_codes_and_names + puts "Choices: #{languages_codes.join(', ')}" + puts "Translations: #{languages_names.join(', ')}" + puts + puts "Now update packaging/addons/openproject/templates with these two lines" + end + + def languages_codes_and_names + translations_files + .flat_map { |f| language_code_and_name_from(f) } + .sort + .transpose + end + + def translations_files + App.rails_root.glob('config/locales/generated/*.yml') + end + + def language_code_and_name_from(translation_file) + YAML.load_file(translation_file.to_s) + .map { |(lang, data)| [lang, data.dig('cldr', 'language_name')] } + end + end +end + +PrintPackagerLanguagesChoices.call