]> BookStack Code Mirror - bookstack/blobdiff - app/Util/LanguageManager.php
Guest create page: name field autofocus
[bookstack] / app / Util / LanguageManager.php
index ff860c83da176c7c2b0fd59d2173810774be8cff..ed68f647c400386a264b78dcaefa7150f2fee356 100644 (file)
@@ -7,7 +7,7 @@ use Illuminate\Http\Request;
 class LanguageManager
 {
     /**
-     * Array of right-to-left language options
+     * Array of right-to-left language options.
      */
     protected array $rtlLanguages = ['ar', 'fa', 'he'];
 
@@ -15,7 +15,7 @@ class LanguageManager
      * Map of BookStack language names to best-estimate ISO and windows locale names.
      * Locales can often be found by running `locale -a` on a linux system.
      * Windows locales can be found at:
-     * https://docs.microsoft.com/en-us/cpp/c-runtime-library/language-strings?view=msvc-170
+     * https://docs.microsoft.com/en-us/cpp/c-runtime-library/language-strings?view=msvc-170.
      *
      * @var array<string, array{iso: string, windows: string}>
      */
@@ -28,6 +28,7 @@ class LanguageManager
         'de'          => ['iso' => 'de_DE', 'windows' => 'German'],
         'de_informal' => ['iso' => 'de_DE', 'windows' => 'German'],
         'en'          => ['iso' => 'en_GB', 'windows' => 'English'],
+        'el'          => ['iso' => 'el_GR', 'windows' => 'Greek'],
         'es'          => ['iso' => 'es_ES', 'windows' => 'Spanish'],
         'es_AR'       => ['iso' => 'es_AR', 'windows' => 'Spanish'],
         'et'          => ['iso' => 'et_EE', 'windows' => 'Estonian'],
@@ -48,6 +49,7 @@ class LanguageManager
         'pl'          => ['iso' => 'pl_PL', 'windows' => 'Polish'],
         'pt'          => ['iso' => 'pt_PT', 'windows' => 'Portuguese'],
         'pt_BR'       => ['iso' => 'pt_BR', 'windows' => 'Portuguese'],
+        'ro'          => ['iso' => 'ro_RO', 'windows' => 'Romanian'],
         'ru'          => ['iso' => 'ru', 'windows' => 'Russian'],
         'sk'          => ['iso' => 'sk_SK', 'windows' => 'Slovak'],
         'sl'          => ['iso' => 'sl_SI', 'windows' => 'Slovenian'],
@@ -113,18 +115,22 @@ class LanguageManager
      * Set the system date locale for localized date formatting.
      * Will try both the standard locale name and the UTF8 variant.
      */
-    public function setPhpDateTimeLocale(string $language)
+    public function setPhpDateTimeLocale(string $language): void
     {
-        $isoLang = $this->localeMap[$language]['iso'] ?? false;
+        $isoLang = $this->localeMap[$language]['iso'] ?? '';
+        $isoLangPrefix = explode('_', $isoLang)[0];
 
         $locales = array_filter([
             $isoLang ? $isoLang . '.utf8' : false,
             $isoLang ?: false,
             $isoLang ? str_replace('_', '-', $isoLang) : false,
-                $this->localeMap[$language]['windows'] ?? false,
+            $isoLang ? $isoLangPrefix . '.UTF-8' : false,
+            $this->localeMap[$language]['windows'] ?? false,
             $language,
         ]);
 
-        setlocale(LC_TIME, ...$locales);
+        if (!empty($locales)) {
+            setlocale(LC_TIME, ...$locales);
+        }
     }
-}
\ No newline at end of file
+}