setup: Allow language selection regarless of whether languages are available
authorMathieu Lu <mathieu@symbiotic.coop>
Tue, 14 Nov 2023 20:18:25 +0000 (15:18 -0500)
committerMathieu Lu <mathieu@symbiotic.coop>
Tue, 14 Nov 2023 20:30:25 +0000 (15:30 -0500)
CRM/Core/CodeGen/I18n.php
setup/plugins/blocks/l10n.civi-setup.php
setup/plugins/init/AvailableLangs.civi-setup.php
setup/res/languages.php [new file with mode: 0644]

index 2f71133ba4b22e3314db4c428d32a3be52d0122a..4fbe3a31f1949a6bcac4383d8a2a99737b1615a4 100644 (file)
@@ -19,7 +19,9 @@ class CRM_Core_CodeGen_I18n extends CRM_Core_CodeGen_BaseTask {
     for ($i = 0; $i < count($matches[0]); $i++) {
       $langs[$matches[1][$i]] = $matches[2][$i];
     }
+    // @todo Somewhere in 2024 or beyond, deprecate the old installer
     file_put_contents('../install/langs.php', "<?php \$langs = " . var_export($langs, TRUE) . ";");
+    file_put_contents('../setup/res/languages.php', "<?php\n\n\Civi\Setup::assertRunning();\n\n\$langs = " . var_export($langs, TRUE) . ";");
   }
 
   public function generateSchemaStructure(): void {
index 1202323f9e3f2fe7dd5b313af6d2c3442f260857..d184c91a2d8d647444297c3b4bd803256e0dccdf 100644 (file)
@@ -15,7 +15,7 @@ if (!defined('CIVI_SETUP')) {
     $ctrl->blocks['l10n'] = array(
       'is_active' => TRUE,
       'file' => __DIR__ . DIRECTORY_SEPARATOR . 'l10n.tpl.php',
-      'class' => 'if-no-errors',
-      'weight' => 30,
+      'class' => '',
+      'weight' => 10,
     );
   }, \Civi\Setup::PRIORITY_PREPARE);
index 4eb5730d6c7d62d815cbb95b91e03115d25db915..603fa494d34512d8bc67a2b86942f14cbc09d7c3 100644 (file)
@@ -19,16 +19,7 @@ if (!defined('CIVI_SETUP')) {
     $m = $e->getModel();
 
     $langs = NULL;
-    require implode(DIRECTORY_SEPARATOR, [$m->srcPath, 'install', 'langs.php']);
-    foreach ($langs as $locale => $_) {
-      if ($locale == 'en_US') {
-        continue;
-      }
-      if (!file_exists(implode(DIRECTORY_SEPARATOR, array($m->srcPath, 'sql', "civicrm_data.$locale.mysql")))) {
-        unset($langs[$locale]);
-      }
-    }
-
+    require implode(DIRECTORY_SEPARATOR, [$m->srcPath, 'setup', 'res', 'languages.php']);
     $m->setField('lang', 'options', $langs);
 
   }, \Civi\Setup::PRIORITY_PREPARE);
diff --git a/setup/res/languages.php b/setup/res/languages.php
new file mode 100644 (file)
index 0000000..e93afcc
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+\Civi\Setup::assertRunning();
+
+$langs = [
+  'af_ZA' => 'Afrikaans',
+  'sq_AL' => 'Albanian',
+  'ar_EG' => 'Arabic',
+  'bg_BG' => 'Bulgarian',
+  'ca_ES' => 'Catalan; Valencian',
+  'zh_CN' => 'Chinese (China)',
+  'zh_TW' => 'Chinese (Taiwan)',
+  'hr_HR' => 'Croatian',
+  'cs_CZ' => 'Czech',
+  'da_DK' => 'Danish',
+  'nl_NL' => 'Dutch (Netherlands)',
+  'nl_BE' => 'Dutch (Belgium)',
+  'en_AU' => 'English (Australia)',
+  'en_CA' => 'English (Canada)',
+  'en_GB' => 'English (United Kingdom)',
+  'en_US' => 'English (United States)',
+  'et_EE' => 'Estonian',
+  'fi_FI' => 'Finnish',
+  'fr_CA' => 'French (Canada)',
+  'fr_FR' => 'French (France)',
+  'de_DE' => 'German',
+  'de_CH' => 'German (Swiss)',
+  'el_GR' => 'Greek, Modern',
+  'he_IL' => 'Hebrew (modern)',
+  'hi_IN' => 'Hindi',
+  'hu_HU' => 'Hungarian',
+  'id_ID' => 'Indonesian',
+  'it_IT' => 'Italian',
+  'ja_JP' => 'Japanese',
+  'km_KH' => 'Khmer',
+  'lt_LT' => 'Lithuanian',
+  'nb_NO' => 'Norwegian BokmÃ¥l',
+  'fa_IR' => 'Persian (Iran)',
+  'pl_PL' => 'Polish',
+  'pt_BR' => 'Portuguese (Brazil)',
+  'pt_PT' => 'Portuguese (Portugal)',
+  'ro_RO' => 'Romanian, Moldavian, Moldovan',
+  'ru_RU' => 'Russian',
+  'sr_RS' => 'Serbian',
+  'sk_SK' => 'Slovak',
+  'sl_SI' => 'Slovene',
+  'es_ES' => 'Spanish; Castilian (Spain)',
+  'es_MX' => 'Spanish; Castilian (Mexico)',
+  'es_PR' => 'Spanish; Castilian (Puerto Rico)',
+  'sv_SE' => 'Swedish',
+  'te_IN' => 'Telugu',
+  'th_TH' => 'Thai',
+  'tr_TR' => 'Turkish',
+  'uk_UA' => 'Ukrainian',
+  'vi_VN' => 'Vietnamese',
+];