summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--README.md5
-rw-r--r--resources/lang/de_DE/default.mobin46206 -> 0 bytes
-rw-r--r--resources/lang/en_US/default.mobin770 -> 0 bytes
-rw-r--r--resources/lang/pt_BR/default.mobin41129 -> 0 bytes
-rw-r--r--src/Helpers/Translation/TranslationServiceProvider.php25
-rw-r--r--tests/Unit/Helpers/Translation/Assets/ba_RR/default.po3
-rw-r--r--tests/Unit/Helpers/Translation/TranslationServiceProviderTest.php22
8 files changed, 51 insertions, 5 deletions
diff --git a/.gitignore b/.gitignore
index 77a62c1e..cda5cf92 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,6 +24,7 @@ _vimrc_local.vim
/public/coverage
/coverage
/unittests.xml
+/resources/lang/*/*.mo
# Composer files
/vendor/
diff --git a/README.md b/README.md
index 02508157..594011b7 100644
--- a/README.md
+++ b/README.md
@@ -58,6 +58,11 @@ The following instructions explain how to get, build and run the latest engelsys
```bash
yarn build
```
+ * Optionally (for better performance)
+ * Generate translation files
+ ```bash
+ find resources/lang/ -type f -name '*.po' -exec sh -c 'file="{}"; msgfmt "${file%.*}.po" -o "${file%.*}.mo"' \;
+ ```
### Configuration and Setup
* The webserver must have write access to the ```import``` and ```storage``` directories and read access for all other directories
diff --git a/resources/lang/de_DE/default.mo b/resources/lang/de_DE/default.mo
deleted file mode 100644
index fb93d590..00000000
--- a/resources/lang/de_DE/default.mo
+++ /dev/null
Binary files differ
diff --git a/resources/lang/en_US/default.mo b/resources/lang/en_US/default.mo
deleted file mode 100644
index 7ef9c3b2..00000000
--- a/resources/lang/en_US/default.mo
+++ /dev/null
Binary files differ
diff --git a/resources/lang/pt_BR/default.mo b/resources/lang/pt_BR/default.mo
deleted file mode 100644
index 8b864156..00000000
--- a/resources/lang/pt_BR/default.mo
+++ /dev/null
Binary files differ
diff --git a/src/Helpers/Translation/TranslationServiceProvider.php b/src/Helpers/Translation/TranslationServiceProvider.php
index 09337dad..62247000 100644
--- a/src/Helpers/Translation/TranslationServiceProvider.php
+++ b/src/Helpers/Translation/TranslationServiceProvider.php
@@ -5,6 +5,7 @@ namespace Engelsystem\Helpers\Translation;
use Engelsystem\Config\Config;
use Engelsystem\Container\ServiceProvider;
use Gettext\Translations;
+use Illuminate\Support\Str;
use Symfony\Component\HttpFoundation\Session\Session;
class TranslationServiceProvider extends ServiceProvider
@@ -67,14 +68,18 @@ class TranslationServiceProvider extends ServiceProvider
public function getTranslator(string $locale): GettextTranslator
{
if (!isset($this->translators[$locale])) {
- $file = $this->app->get('path.lang') . '/' . $locale . '/default.mo';
+ $file = $this->getFile($locale);
/** @var GettextTranslator $translator */
$translator = $this->app->make(GettextTranslator::class);
/** @var Translations $translations */
$translations = $this->app->make(Translations::class);
- $translations->addFromMoFile($file);
+ if (Str::endsWith($file, '.mo')) {
+ $translations->addFromMoFile($file);
+ } else {
+ $translations->addFromPoFile($file);
+ }
$translator->loadTranslations($translations);
@@ -83,4 +88,20 @@ class TranslationServiceProvider extends ServiceProvider
return $this->translators[$locale];
}
+
+ /**
+ * @param string $locale
+ * @return string
+ */
+ protected function getFile(string $locale): string
+ {
+ $filepath = $file = $this->app->get('path.lang') . '/' . $locale . '/default';
+ $file = $filepath . '.mo';
+
+ if (!file_exists($file)) {
+ $file = $filepath . '.po';
+ }
+
+ return $file;
+ }
}
diff --git a/tests/Unit/Helpers/Translation/Assets/ba_RR/default.po b/tests/Unit/Helpers/Translation/Assets/ba_RR/default.po
new file mode 100644
index 00000000..887e2daa
--- /dev/null
+++ b/tests/Unit/Helpers/Translation/Assets/ba_RR/default.po
@@ -0,0 +1,3 @@
+# Testing content
+msgid "foo.bar"
+msgstr "B Arr!"
diff --git a/tests/Unit/Helpers/Translation/TranslationServiceProviderTest.php b/tests/Unit/Helpers/Translation/TranslationServiceProviderTest.php
index 91307bdd..dc8e8af5 100644
--- a/tests/Unit/Helpers/Translation/TranslationServiceProviderTest.php
+++ b/tests/Unit/Helpers/Translation/TranslationServiceProviderTest.php
@@ -12,7 +12,7 @@ use Symfony\Component\HttpFoundation\Session\Session;
class TranslationServiceProviderTest extends ServiceProviderTest
{
/**
- * @covers \Engelsystem\Helpers\Translation\TranslationServiceProvider::register()
+ * @covers \Engelsystem\Helpers\Translation\TranslationServiceProvider::register
*/
public function testRegister(): void
{
@@ -30,7 +30,7 @@ class TranslationServiceProviderTest extends ServiceProviderTest
/** @var TranslationServiceProvider|MockObject $serviceProvider */
$serviceProvider = $this->getMockBuilder(TranslationServiceProvider::class)
->setConstructorArgs([$app])
- ->setMethods(['setLocale'])
+ ->onlyMethods(['setLocale'])
->getMock();
$app->expects($this->exactly(2))
@@ -71,7 +71,7 @@ class TranslationServiceProviderTest extends ServiceProviderTest
}
/**
- * @covers \Engelsystem\Helpers\Translation\TranslationServiceProvider::getTranslator()
+ * @covers \Engelsystem\Helpers\Translation\TranslationServiceProvider::getTranslator
*/
public function testGetTranslator(): void
{
@@ -87,4 +87,20 @@ class TranslationServiceProviderTest extends ServiceProviderTest
// Retry from cache
$serviceProvider->getTranslator('fo_OO');
}
+
+ /**
+ * @covers \Engelsystem\Helpers\Translation\TranslationServiceProvider::getTranslator
+ * @covers \Engelsystem\Helpers\Translation\TranslationServiceProvider::getFile
+ */
+ public function testGetTranslatorFromPo(): void
+ {
+ $app = $this->getApp(['get']);
+ $this->setExpects($app, 'get', ['path.lang'], __DIR__ . '/Assets');
+
+ $serviceProvider = new TranslationServiceProvider($app);
+
+ // Get translator using a .po file
+ $translator = $serviceProvider->getTranslator('ba_RR');
+ $this->assertEquals('B Arr!', $translator->gettext('foo.bar'));
+ }
}