-
-
Notifications
You must be signed in to change notification settings - Fork 4.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #48309 from nextcloud/backport/47349/stable29
[stable29] Add bidirectional text support - Backend
- Loading branch information
Showing
1 changed file
with
54 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,7 @@ | ||
<?php | ||
/** | ||
* @copyright Copyright (c) 2017 Joas Schilling <[email protected]> | ||
* | ||
* @license GNU AGPL version 3 or any later version | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU Affero General Public License as | ||
* published by the Free Software Foundation, either version 3 of the | ||
* License, or (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU Affero General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU Affero General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
* SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors | ||
* SPDX-License-Identifier: AGPL-3.0-or-later | ||
*/ | ||
|
||
$directories = [ | ||
|
@@ -25,17 +10,59 @@ | |
|
||
$isDebug = in_array('--debug', $argv, true) || in_array('-d', $argv, true); | ||
|
||
$txConfig = file_get_contents(__DIR__ . '/../.tx/config'); | ||
|
||
$untranslatedApps = [ | ||
'testing', | ||
]; | ||
|
||
// Next line only looks messed up, but it works. Don't touch it! | ||
$rtlCharacters = [ | ||
'\x{061C}', // ARABIC LETTER MARK | ||
'\x{0623}', // ARABIC LETTER ALEF WITH HAMZA ABOVE | ||
'\x{200E}', // LEFT-TO-RIGHT MARK | ||
'\x{200F}', // RIGHT-TO-LEFT MARK | ||
'\x{202A}', // LEFT-TO-RIGHT EMBEDDING | ||
'\x{202B}', // RIGHT-TO-LEFT EMBEDDING | ||
'\x{202C}', // POP DIRECTIONAL FORMATTING | ||
'\x{202D}', // LEFT-TO-RIGHT OVERRIDE | ||
'\x{202E}', // RIGHT-TO-LEFT OVERRIDE | ||
'\x{2066}', // LEFT-TO-RIGHT ISOLATE | ||
'\x{2067}', // RIGHT-TO-LEFT ISOLATE | ||
'\x{2068}', // FIRST STRONG ISOLATE | ||
'\x{2069}', // POP DIRECTIONAL ISOLATE | ||
'\x{206C}', // INHIBIT ARABIC FORM SHAPING | ||
'\x{206D}', // ACTIVATE ARABIC FORM SHAPING | ||
]; | ||
|
||
$rtlLanguages = [ | ||
'ar', // Arabic | ||
'fa', // Persian | ||
'he', // Hebrew | ||
'ps', // Pashto, | ||
'ug', // 'Uyghurche / Uyghur | ||
'ur_PK', // Urdu | ||
'uz', // Uzbek Afghan | ||
]; | ||
|
||
$valid = 0; | ||
$errors = []; | ||
$apps = new \DirectoryIterator(__DIR__ . '/../apps'); | ||
foreach ($apps as $app) { | ||
if ($app->isDot() || in_array($app->getBasename(), $untranslatedApps, true)) { | ||
continue; | ||
} | ||
|
||
if (!file_exists($app->getPathname() . '/l10n')) { | ||
if (!str_contains($txConfig, '[o:nextcloud:p:nextcloud:r:' . $app->getBasename() . ']')) { | ||
$errors[] = $app->getBasename() . "\n" . ' App is not translation synced via transifex and also not marked as untranslated' . "\n"; | ||
} | ||
continue; | ||
} | ||
|
||
$directories[] = $app->getPathname() . '/l10n'; | ||
} | ||
|
||
$errors = []; | ||
$valid = 0; | ||
foreach ($directories as $dir) { | ||
if (!file_exists($dir)) { | ||
continue; | ||
|
@@ -48,6 +75,12 @@ | |
} | ||
|
||
$content = file_get_contents($file->getPathname()); | ||
|
||
$language = pathinfo($file->getFilename(), PATHINFO_FILENAME); | ||
if (!in_array($language, $rtlLanguages, true) && preg_match('/[' . implode('', $rtlCharacters) . ']/u', $content)) { | ||
$errors[] = $file->getPathname() . "\n" . ' ' . 'Contains a RTL limited character in the translations.' . "\n"; | ||
} | ||
|
||
$json = json_decode($content, true); | ||
|
||
$translations = json_encode($json['translations']); | ||
|
@@ -74,10 +107,10 @@ | |
} | ||
|
||
if (count($errors) > 0) { | ||
echo sprintf('ERROR: There were %d errors:', count($errors)) . "\n\n"; | ||
echo "\033[0;31m" . sprintf('ERROR: There were %d errors:', count($errors)) . "\033[0m\n\n"; | ||
echo implode("\n", $errors); | ||
exit(1); | ||
} | ||
|
||
echo 'OK: ' . $valid . ' files parse' . "\n"; | ||
echo "\033[0;32m" . 'OK: ' . $valid . ' files parse' . "\033[0m\n"; | ||
exit(0); |