mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Add fallback locale support + tests
This commit is contained in:
@@ -245,5 +245,6 @@
|
||||
"emails.otpSession.clientInfo": "Diese Anmeldung wurde über {{agentClient}} auf {{agentDevice}} {{agentOs}} angefordert. Wenn Sie die Anmeldung nicht angefordert haben, können Sie diese E-Mail getrost ignorieren.",
|
||||
"emails.otpSession.securityPhrase": "Die Sicherheitsphrase für diese E-Mail lautet {{phrase}}. Sie können dieser E-Mail vertrauen, wenn diese Phrase mit der Phrase übereinstimmt, die beim Anmelden angezeigt wird.",
|
||||
"emails.otpSession.thanks": "Danke,",
|
||||
"emails.otpSession.signature": "{{project}} Team"
|
||||
"emails.otpSession.signature": "{{project}} Team",
|
||||
"mock": "Eine Beispielübersetzung für Testzwecke."
|
||||
}
|
||||
|
||||
@@ -274,5 +274,6 @@
|
||||
"continents.eu": "Europe",
|
||||
"continents.na": "North America",
|
||||
"continents.oc": "Oceania",
|
||||
"continents.sa": "South America"
|
||||
"continents.sa": "South America",
|
||||
"mock": "A mock translation for testing purposes."
|
||||
}
|
||||
|
||||
@@ -2267,6 +2267,8 @@ App::get('/v1/projects/:projectId/templates/email/:type/:locale')
|
||||
$template = $templates['email.' . $type . '-' . $locale] ?? null;
|
||||
|
||||
$localeObj = new Locale($locale);
|
||||
$localeObj->setFallback(System::getEnv('_APP_LOCALE', 'en'));
|
||||
|
||||
if (is_null($template)) {
|
||||
/**
|
||||
* different templates, different placeholders.
|
||||
|
||||
@@ -13,6 +13,7 @@ use Utopia\Database\Helpers\ID;
|
||||
use Utopia\Database\Helpers\Permission;
|
||||
use Utopia\Database\Helpers\Role;
|
||||
use Utopia\Database\Validator\UID;
|
||||
use Utopia\Locale\Locale;
|
||||
use Utopia\System\System;
|
||||
use Utopia\Validator\Host;
|
||||
use Utopia\Validator\Text;
|
||||
@@ -35,6 +36,25 @@ App::get('/v1/mock/tests/general/oauth2')
|
||||
$response->redirect($redirectURI . '?' . \http_build_query(['code' => 'abcdef', 'state' => $state]));
|
||||
});
|
||||
|
||||
App::get('/v1/mock/tests/locale')
|
||||
->desc('Mock locale translation key')
|
||||
->groups(['mock'])
|
||||
->label('scope', 'public')
|
||||
->label('docs', false)
|
||||
->label('mock', true)
|
||||
->inject('locale')
|
||||
->inject('localeCodes')
|
||||
->inject('request')
|
||||
->inject('response')
|
||||
->action(function (Locale $locale, array $localeCodes, Request $request, Response $response) {
|
||||
$localeParam = (string) $request->getParam('locale', $request->getHeader('x-appwrite-locale', ''));
|
||||
if (\in_array($localeParam, $localeCodes)) {
|
||||
$locale->setDefault($localeParam);
|
||||
}
|
||||
|
||||
$response->send($locale->getText('mock'));
|
||||
});
|
||||
|
||||
App::get('/v1/mock/tests/general/oauth2/token')
|
||||
->desc('OAuth2 Token')
|
||||
->groups(['mock'])
|
||||
|
||||
@@ -70,7 +70,11 @@ App::setResource('hooks', function ($register) {
|
||||
}, ['register']);
|
||||
|
||||
App::setResource('register', fn () => $register);
|
||||
App::setResource('locale', fn () => new Locale(System::getEnv('_APP_LOCALE', 'en')));
|
||||
App::setResource('locale', function () {
|
||||
$locale = new Locale(System::getEnv('_APP_LOCALE', 'en'));
|
||||
$locale->setFallback(System::getEnv('_APP_LOCALE', 'en'));
|
||||
return $locale;
|
||||
});
|
||||
|
||||
App::setResource('localeCodes', function () {
|
||||
return array_map(fn ($locale) => $locale['code'], Config::getParam('locale-codes', []));
|
||||
|
||||
+1
-1
@@ -60,7 +60,7 @@
|
||||
"utopia-php/framework": "0.33.*",
|
||||
"utopia-php/fetch": "0.4.*",
|
||||
"utopia-php/image": "0.8.*",
|
||||
"utopia-php/locale": "0.4.*",
|
||||
"utopia-php/locale": "0.8.*",
|
||||
"utopia-php/logger": "0.6.*",
|
||||
"utopia-php/messaging": "0.18.*",
|
||||
"utopia-php/migration": "0.11.*",
|
||||
|
||||
Generated
+9
-13
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "761a7e17b49381e68038c92873888125",
|
||||
"content-hash": "c0641df1dfb292f9d8f0d6b6278d0e9c",
|
||||
"packages": [
|
||||
{
|
||||
"name": "adhocore/jwt",
|
||||
@@ -3945,22 +3945,24 @@
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/locale",
|
||||
"version": "0.4.0",
|
||||
"version": "0.8.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/utopia-php/locale.git",
|
||||
"reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447"
|
||||
"reference": "10ffc869c904c45e32ab0c61f4b33ba774777eb6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/utopia-php/locale/zipball/c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
|
||||
"reference": "c2d9358d0fe2f6b6ed5448369f9d1e430c615447",
|
||||
"url": "https://api.github.com/repos/utopia-php/locale/zipball/10ffc869c904c45e32ab0c61f4b33ba774777eb6",
|
||||
"reference": "10ffc869c904c45e32ab0c61f4b33ba774777eb6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"laravel/pint": "1.2.*",
|
||||
"phpstan/phpstan": "1.*",
|
||||
"phpunit/phpunit": "^9.3",
|
||||
"vimeo/psalm": "4.0.1"
|
||||
},
|
||||
@@ -3974,12 +3976,6 @@
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Eldad Fux",
|
||||
"email": "eldad@appwrite.io"
|
||||
}
|
||||
],
|
||||
"description": "A simple locale library to manage application translations",
|
||||
"keywords": [
|
||||
"framework",
|
||||
@@ -3990,9 +3986,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/utopia-php/locale/issues",
|
||||
"source": "https://github.com/utopia-php/locale/tree/0.4.0"
|
||||
"source": "https://github.com/utopia-php/locale/tree/0.8.0"
|
||||
},
|
||||
"time": "2021-07-24T11:35:55+00:00"
|
||||
"time": "2025-08-12T12:58:26+00:00"
|
||||
},
|
||||
{
|
||||
"name": "utopia-php/logger",
|
||||
|
||||
@@ -373,6 +373,7 @@ class Certificates extends Action
|
||||
Console::warning('Cannot renew domain (' . $domain . ') on attempt no. ' . $attempt . ' certificate: ' . $errorMessage);
|
||||
|
||||
$locale = new Locale(System::getEnv('_APP_LOCALE', 'en'));
|
||||
$locale->setFallback(System::getEnv('_APP_LOCALE', 'en'));
|
||||
|
||||
// Send mail to administrator mail
|
||||
$template = Template::fromFile(__DIR__ . '/../../../../app/config/locale/templates/email-certificate-failed.tpl');
|
||||
|
||||
@@ -269,4 +269,57 @@ trait LocaleBase
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
public function testFallbackLocale()
|
||||
{
|
||||
$en = 'A mock translation for testing purposes.';
|
||||
$de = 'Eine Beispielübersetzung für Testzwecke.';
|
||||
|
||||
$response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
]);
|
||||
|
||||
$this->assertEquals($response['headers']['status-code'], 200);
|
||||
$this->assertEquals($en, $response['body']);
|
||||
|
||||
$response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
'x-appwrite-locale' => 'en'
|
||||
]);
|
||||
|
||||
$this->assertEquals($response['headers']['status-code'], 200);
|
||||
$this->assertEquals($en, $response['body']);
|
||||
|
||||
$response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
'x-appwrite-locale' => 'de'
|
||||
]);
|
||||
|
||||
$this->assertEquals($response['headers']['status-code'], 200);
|
||||
$this->assertEquals($de, $response['body']);
|
||||
|
||||
$response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
'x-appwrite-locale' => 'cs'
|
||||
]);
|
||||
|
||||
$this->assertEquals($response['headers']['status-code'], 200);
|
||||
$this->assertEquals($en, $response['body']);
|
||||
|
||||
$response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
'x-appwrite-locale' => 'non-existing'
|
||||
]);
|
||||
|
||||
$this->assertEquals($response['headers']['status-code'], 200);
|
||||
$this->assertEquals($en, $response['body']);
|
||||
|
||||
$response = $this->client->call(Client::METHOD_GET, '/mock/tests/locale', [
|
||||
'x-appwrite-project' => $this->getProject()['$id'],
|
||||
'x-appwrite-locale' => ''
|
||||
]);
|
||||
|
||||
$this->assertEquals($response['headers']['status-code'], 200);
|
||||
$this->assertEquals($en, $response['body']);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user