]> BookStack Code Mirror - bookstack/commitdiff
Made it possible to override translations via theme system
authorDan Brown <redacted>
Sat, 26 Oct 2019 11:12:35 +0000 (12:12 +0100)
committerDan Brown <redacted>
Sat, 26 Oct 2019 17:07:14 +0000 (18:07 +0100)
app/Config/app.php
app/Providers/TranslationServiceProvider.php [new file with mode: 0644]
app/Translation/FileLoader.php [new file with mode: 0644]

index f2c90c5bb25bddb216588ac63115e2aa1a3cac4a..0d06a9b21d7d846a94b49ab8677ced43b3c676cf 100755 (executable)
@@ -96,7 +96,6 @@ return [
         Illuminate\Redis\RedisServiceProvider::class,
         Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
         Illuminate\Session\SessionServiceProvider::class,
-        Illuminate\Translation\TranslationServiceProvider::class,
         Illuminate\Validation\ValidationServiceProvider::class,
         Illuminate\View\ViewServiceProvider::class,
         Illuminate\Notifications\NotificationServiceProvider::class,
@@ -107,9 +106,9 @@ return [
         Barryvdh\DomPDF\ServiceProvider::class,
         Barryvdh\Snappy\ServiceProvider::class,
 
-
         // BookStack replacement service providers (Extends Laravel)
         BookStack\Providers\PaginationServiceProvider::class,
+        BookStack\Providers\TranslationServiceProvider::class,
 
         // BookStack custom service providers
         BookStack\Providers\AuthServiceProvider::class,
diff --git a/app/Providers/TranslationServiceProvider.php b/app/Providers/TranslationServiceProvider.php
new file mode 100644 (file)
index 0000000..9ff607a
--- /dev/null
@@ -0,0 +1,21 @@
+<?php namespace BookStack\Providers;
+
+use BookStack\Translation\FileLoader;
+use Illuminate\Translation\TranslationServiceProvider as BaseProvider;
+
+class TranslationServiceProvider extends BaseProvider
+{
+
+    /**
+     * Register the translation line loader.
+     * Overrides the default register action from Laravel so a custom loader can be used.
+     * @return void
+     */
+    protected function registerLoader()
+    {
+        $this->app->singleton('translation.loader', function ($app) {
+            return new FileLoader($app['files'], $app['path.lang']);
+        });
+    }
+
+}
\ No newline at end of file
diff --git a/app/Translation/FileLoader.php b/app/Translation/FileLoader.php
new file mode 100644 (file)
index 0000000..f0f895d
--- /dev/null
@@ -0,0 +1,30 @@
+<?php namespace BookStack\Translation;
+
+use Illuminate\Translation\FileLoader as BaseLoader;
+
+class FileLoader extends BaseLoader
+{
+    /**
+     * Load the messages for the given locale.
+     * Extends Laravel's translation FileLoader to look in multiple directories
+     * so that we can load in translation overrides from the theme file if wanted.
+     * @param  string  $locale
+     * @param  string  $group
+     * @param  string|null  $namespace
+     * @return array
+     */
+    public function load($locale, $group, $namespace = null)
+    {
+        if ($group === '*' && $namespace === '*') {
+            return $this->loadJsonPaths($locale);
+        }
+
+        if (is_null($namespace) || $namespace === '*') {
+            $themeTranslations = $this->loadPath(theme_path('lang'), $locale, $group);
+            $originalTranslations =  $this->loadPath($this->path, $locale, $group);
+            return array_merge($originalTranslations, $themeTranslations);
+        }
+
+        return $this->loadNamespaced($locale, $group, $namespace);
+    }
+}
\ No newline at end of file