Compare commits

...

1 Commits

Author SHA1 Message Date
Clemens Schwaighofer
daf1f9263c Change all function L10n calls to one underscore, test updates
That change is done to be compatible with the phpmyadmin translator
class so this can be a drop in replacement or other way around.

Update smarty block.t to only check for _* functions and not any pre
loaded language class
2022-04-18 10:33:45 +09:00
9 changed files with 153 additions and 113 deletions

View File

@@ -2709,7 +2709,8 @@ final class CoreLibsDBIOTest extends TestCase
// comarep all, except timestamp that is a regex
foreach ($expected_history as $key => $value) {
// check if starts with / because this is regex (timestamp)
if (strpos($value, "/") === 0) {
// if (substr($expected_2, 0, 1) == '/) {
if (strpos($value, '/') === 0) {
// this is regex
$this->assertMatchesRegularExpression(
$value,

View File

@@ -90,11 +90,16 @@ final class CoreLibsGetSystemTest extends TestCase
public function getPageNameProvider(): array
{
return [
// 0: input
// 1: expected default/WITH_EXTENSION
// 2: expected NO_EXTENSION
// 3: expected FULL_PATH, if first and last character are / use regex
'original set' => [
0 => null, // input
0 => null,
1 => 'phpunit',
2 => 'phpunit',
3 => 'www/vendor/bin/phpunit', // NOTE: this can change
// NOTE: this can change, so it is a regex check
3 => "/^(\/?.*\/?)?www\/vendor\/bin\/phpunit$/",
],
'some path with extension' => [
0 => '/some/path/to/file.txt',
@@ -147,11 +152,13 @@ final class CoreLibsGetSystemTest extends TestCase
list ($host, $port) = \CoreLibs\Get\System::getHostName();
$this->assertEquals(
$expected_host,
$host
$host,
'failed expected host assert'
);
$this->assertEquals(
$expected_port,
$port
$port,
'faile expected port assert'
);
}
@@ -176,20 +183,38 @@ final class CoreLibsGetSystemTest extends TestCase
// default 0,
$this->assertEquals(
$expected_0,
\CoreLibs\Get\System::getPageName()
\CoreLibs\Get\System::getPageName(),
'failed default assert'
);
$this->assertEquals(
$expected_0,
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::WITH_EXTENSION)
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::WITH_EXTENSION),
'failed WITH_EXTESION assert'
);
$this->assertEquals(
$expected_1,
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::NO_EXTENSION)
);
$this->assertEquals(
$expected_2,
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::FULL_PATH)
\CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::NO_EXTENSION),
'failed NO_EXTENSION assert'
);
// FULL PATH check can be equals or regex
$page_name_full_path = \CoreLibs\Get\System::getPageName(\CoreLibs\Get\System::FULL_PATH);
if (
substr($expected_2, 0, 1) == '/' &&
substr($expected_2, -1, 1) == '/'
) {
// this is regex
$this->assertMatchesRegularExpression(
$expected_2,
$page_name_full_path,
'failed FULL_PATH assert regex'
);
} else {
$this->assertEquals(
$expected_2,
$page_name_full_path,
'failed FULL_PATH assert equals'
);
}
}
}

View File

@@ -994,10 +994,10 @@ final class CoreLibsLanguageL10nTest extends TestCase
string $translated
): void {
\CoreLibs\Language\L10n::loadFunctions();
__setlocale(LC_MESSAGES, $locale);
__textdomain($domain);
__bindtextdomain($domain, $path);
__bind_textdomain_codeset($domain, $encoding);
_setlocale(LC_MESSAGES, $locale);
_textdomain($domain);
_bindtextdomain($domain, $path);
_bind_textdomain_codeset($domain, $encoding);
$this->assertEquals(
$translated,
__($original),
@@ -1005,7 +1005,7 @@ final class CoreLibsLanguageL10nTest extends TestCase
);
$this->assertEquals(
$translated,
__gettext($original),
_gettext($original),
'function gettext assert failed'
);
}

View File

@@ -138,6 +138,7 @@ echo "LOAD ERROR: " . $l->getLoadError() . "<br>";
echo "INPUT TEST: " . $string . " => " . $l->__($string) . "<br>";
echo "TROUGH LOAD: " . $l->getTranslatorClass()->gettext($string) . "<br>";
$lang = 'en';
$domain = 'admin';
echo "<br><b>STATIC TYPE TEST</b><br>";
// static tests from l10n_load
@@ -154,17 +155,17 @@ echo "<br><b>FUNCTIONS</b><br>";
// real statisc test
L10n::loadFunctions();
$locale = 'ja';
__setlocale(LC_MESSAGES, $locale);
__textdomain($domain);
__bindtextdomain($domain, $path);
__bind_textdomain_codeset($domain, $encoding);
_setlocale(LC_MESSAGES, $locale);
_textdomain($domain);
_bindtextdomain($domain, $path);
_bind_textdomain_codeset($domain, $encoding);
echo "INPUT TEST $locale: " . $string . " => " . __($string) . "<br>";
$locale = 'en_US.UTF-8';
__setlocale(LC_MESSAGES, $locale);
__textdomain($domain);
__bindtextdomain($domain, $path);
__bind_textdomain_codeset($domain, $encoding);
_setlocale(LC_MESSAGES, $locale);
_textdomain($domain);
_bindtextdomain($domain, $path);
_bind_textdomain_codeset($domain, $encoding);
echo "INPUT TEST $locale: " . $string . " => " . __($string) . "<br>";
print "</body></html>";

View File

@@ -74,7 +74,7 @@ $smarty->setSmartyPaths();
// smarty test
$smarty->DATA['SMARTY_TEST'] = 'Test Data';
$smarty->DATA['TRANSLATE_TEST'] = $l10n->__('Are we translated?');
$smarty->DATA['TRANSLATE_TEST_FUNCTION'] = __gettext('Are we translated?');
$smarty->DATA['TRANSLATE_TEST_FUNCTION'] = _gettext('Are we translated?');
$smarty->DATA['TRANSLATE_TEST_SMARTY'] = $smarty->l10n->__('Are we translated?');
$smarty->DATA['replace'] = 'Replaced';
// variable variables

View File

@@ -14,7 +14,7 @@
* __ : returns string (translated or original if not found)
* __n : plural string
* __p : string with context
* __pb: string with context and plural
* __np: string with context and plural
*
* HISTORY:
* 2022/4/15 (cs) drop all old folder layout support, new folder base

View File

@@ -1,8 +1,16 @@
<?php
/*********************************************************************
* Original: https://github.com/phpmyadmin/motranslator
* Has the same function names, but uses a different base system
* setlocale -> setLocale
* bindtextdomain -> setTextDomain
* textdomain -> setDomain
*********************************************************************/
declare(strict_types=1);
use CoreLibs\Language\L10n;
use CoreLibs\Language\L10n as Loader;
/**
* Sets a requested locale.
@@ -12,9 +20,9 @@ use CoreLibs\Language\L10n;
*
* @return string Set or current locale
*/
function __setlocale(int $category, string $locale): string
function _setlocale(int $category, string $locale): string
{
return L10n::getInstance()->setLocale($locale);
return Loader::getInstance()->setLocale($locale);
}
/**
@@ -23,9 +31,9 @@ function __setlocale(int $category, string $locale): string
* @param string $domain Domain name
* @param string $path Path where to find locales
*/
function __bindtextdomain(string $domain, string $path): void
function _bindtextdomain(string $domain, string $path): void
{
L10n::getInstance()->setTextDomain($domain, $path);
Loader::getInstance()->setTextDomain($domain, $path);
}
/**
@@ -39,7 +47,7 @@ function __bindtextdomain(string $domain, string $path): void
* @param string $domain Domain where to set character set
* @param string $codeset Character set to set
*/
function __bind_textdomain_codeset(string $domain, string $codeset): void
function _bind_textdomain_codeset(string $domain, string $codeset): void
{
}
@@ -48,9 +56,9 @@ function __bind_textdomain_codeset(string $domain, string $codeset): void
*
* @param string $domain Domain name
*/
function __textdomain(string $domain): void
function _textdomain(string $domain): void
{
L10n::getInstance()->setDomain($domain);
Loader::getInstance()->setDomain($domain);
}
/**
@@ -60,9 +68,9 @@ function __textdomain(string $domain): void
*
* @return string translated string (or original, if not found)
*/
function __gettext(string $msgid): string
function _gettext(string $msgid): string
{
return L10n::getInstance()->getTranslator()->gettext(
return Loader::getInstance()->getTranslator()->gettext(
$msgid
);
}
@@ -76,7 +84,7 @@ function __gettext(string $msgid): string
*/
function __(string $msgid): string
{
return L10n::getInstance()->getTranslator()->gettext(
return Loader::getInstance()->getTranslator()->gettext(
$msgid
);
}
@@ -90,9 +98,9 @@ function __(string $msgid): string
*
* @return string translated plural form
*/
function __ngettext(string $msgid, string $msgidPlural, int $number): string
function _ngettext(string $msgid, string $msgidPlural, int $number): string
{
return L10n::getInstance()->getTranslator()->ngettext(
return Loader::getInstance()->getTranslator()->ngettext(
$msgid,
$msgidPlural,
$number
@@ -107,9 +115,9 @@ function __ngettext(string $msgid, string $msgidPlural, int $number): string
*
* @return string translated plural form
*/
function __pgettext(string $msgctxt, string $msgid): string
function _pgettext(string $msgctxt, string $msgid): string
{
return L10n::getInstance()->getTranslator()->pgettext(
return Loader::getInstance()->getTranslator()->pgettext(
$msgctxt,
$msgid
);
@@ -125,9 +133,9 @@ function __pgettext(string $msgctxt, string $msgid): string
*
* @return string translated plural form
*/
function __npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $number): string
function _npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $number): string
{
return L10n::getInstance()->getTranslator()->npgettext(
return Loader::getInstance()->getTranslator()->npgettext(
$msgctxt,
$msgid,
$msgidPlural,
@@ -143,9 +151,9 @@ function __npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $n
*
* @return string translated string (or original, if not found)
*/
function __dgettext(string $domain, string $msgid): string
function _dgettext(string $domain, string $msgid): string
{
return L10n::getInstance()->getTranslator('', '', $domain)->gettext(
return Loader::getInstance()->getTranslator('', '', $domain)->gettext(
$msgid
);
}
@@ -160,9 +168,9 @@ function __dgettext(string $domain, string $msgid): string
*
* @return string translated plural form
*/
function __dngettext(string $domain, string $msgid, string $msgidPlural, int $number): string
function _dngettext(string $domain, string $msgid, string $msgidPlural, int $number): string
{
return L10n::getInstance()->getTranslator('', '', $domain)->ngettext(
return Loader::getInstance()->getTranslator('', '', $domain)->ngettext(
$msgid,
$msgidPlural,
$number
@@ -178,9 +186,9 @@ function __dngettext(string $domain, string $msgid, string $msgidPlural, int $nu
*
* @return string translated plural form
*/
function __dpgettext(string $domain, string $msgctxt, string $msgid): string
function _dpgettext(string $domain, string $msgctxt, string $msgid): string
{
return L10n::getInstance()->getTranslator('', '', $domain)->pgettext(
return Loader::getInstance()->getTranslator('', '', $domain)->pgettext(
$msgctxt,
$msgid
);
@@ -197,9 +205,9 @@ function __dpgettext(string $domain, string $msgctxt, string $msgid): string
*
* @return string translated plural form
*/
function __dnpgettext(string $domain, string $msgctxt, string $msgid, string $msgidPlural, int $number): string
function _dnpgettext(string $domain, string $msgctxt, string $msgid, string $msgidPlural, int $number): string
{
return L10n::getInstance()->getTranslator('', '', $domain)->npgettext(
return Loader::getInstance()->getTranslator('', '', $domain)->npgettext(
$msgctxt,
$msgid,
$msgidPlural,

View File

@@ -173,11 +173,11 @@ class SmartyExtend extends \Smarty
$this->lang_dir = $this->l10n->getBaseLocalePath();
// opt load functions so we can use legacy init for smarty run perhaps
$this->l10n->loadFunctions();
__setlocale(LC_MESSAGES, $locale['locale']);
__textdomain($this->domain);
__bindtextdomain($this->domain, $this->lang_dir);
__bind_textdomain_codeset($this->domain, $this->encoding);
\CoreLibs\Language\L10n::loadFunctions();
_setlocale(LC_MESSAGES, $locale['locale']);
_textdomain($this->domain);
_bindtextdomain($this->domain, $this->lang_dir);
_bind_textdomain_codeset($this->domain, $this->encoding);
// register smarty variable
$this->registerPlugin('modifier', 'getvar', [&$this, 'getTemplateVars']);

View File

@@ -3,30 +3,19 @@
/**
* smarty-gettext.php - Gettext support for smarty
*
* ------------------------------------------------------------------------- *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library 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 *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; if not, write to the Free Software *
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
* ------------------------------------------------------------------------- *
*
* To register as a smarty block function named 't', use:
* $smarty->register_block('t', 'smarty_translate');
*
* NOTE: native php support for conext sensitive does not exist
* Those jumps are disabled
*
* @package smarty-gettext
* @version $Id: block.t.php 4738 2022-05-06 01:28:48Z clemens $
* @link http://smarty-gettext.sf.net/
* @author Sagi Bashari <sagi@boom.org.il>
* @copyright 2004 Sagi Bashari
* @copyright Elan Ruusamäe
* @copyright Clemens Schwaighofer
*/
/**
@@ -39,7 +28,7 @@
*/
function smarty_gettext_strarg($str/*, $varargs... */)
{
$tr = array();
$tr = [];
$p = 0;
$nargs = func_num_args();
@@ -120,55 +109,54 @@ function smarty_block_t($params, $text, $template, &$repeat)
// use plural if required parameters are set
if (isset($count) && isset($plural)) {
if (isset($domain) && isset($context)) {
if (is_callable('__dnpgettext')) {
$text = __dnpgettext($domain, $context, $text, $plural, $count);
}
if (is_callable('_dnpgettext')) {
$text = _dnpgettext($domain, $context, $text, $plural, $count);
}/* elseif (is_callable('dnpgettext')) {
$text = dnpgettext($domain, $context, $text, $plural, $count);
} */
} elseif (isset($domain)) {
if (is_callable('__dngettext')) {
$text = __dngettext($domain, $text, $plural, $count);
if (is_callable('_dngettext')) {
$text = _dngettext($domain, $text, $plural, $count);
} elseif (is_callable('dngettext')) {
$text = dngettext($domain, $text, $plural, $count);
}
} elseif (isset($context)) {
if (is_callable('__npgettext')) {
$text == __npgettext($context, $text, $plural, $count);
} elseif (
$template->l10n instanceof \CoreLibs\Language\L10n &&
method_exists($template->l10n, '__pn')
) {
$text = $template->l10n->__pn($text, $plural, $count);
if (is_callable('_npgettext')) {
$text == _npgettext($context, $text, $plural, $count);
}/* elseif (is_callable('npgettext')) {
$text = npgettext($context, $text, $plural, $count);
} */
} else {
if (is_callable('_ngettext')) {
$text == _ngettext($text, $plural, $count);
} elseif (is_callable('ngettext')) {
$text == ngettext($text, $plural, $count);
}
} elseif (
$template->l10n instanceof \CoreLibs\Language\L10n &&
method_exists($template->l10n, '__n')
) {
$text = $template->l10n->__n($text, $plural, $count);
// $text == __ngettext($text, $plural, $count);
}
} else { // use normal
if (isset($domain) && isset($context)) {
if (is_callable('__dpgettext')) {
$text = __dpgettext($domain, $context, $text);
}
if (is_callable('_dpgettext')) {
$text = _dpgettext($domain, $context, $text);
}/* elseif (is_callable('dpgettext')) {
$text = dpgettext($domain, $context, $text);
} */
} elseif (isset($domain)) {
if (is_callable('__dgettext')) {
$text = __dgettext($domain, $text);
if (is_callable('_dgettext')) {
$text = _dgettext($domain, $text);
} elseif (is_callable('dpgettext')) {
$text = dgettext($domain, $text);
}
} elseif (isset($context)) {
if (is_callable('__pgettext')) {
$text = __pgettext($context, $text);
} elseif (
$template->l10n instanceof \CoreLibs\Language\L10n &&
method_exists($template->l10n, '__p')
) {
$text = $template->l10n->__p($context, $text);
}
if (is_callable('_pgettext')) {
$text = _pgettext($context, $text);
}/* elseif (is_callable('pgettext')) {
$text = pgettext($context, $text);
} */
} else {
if (is_callable('__gettext')) {
$text = __gettext($text);
} elseif (
$template->l10n instanceof \CoreLibs\Language\L10n &&
method_exists($template->l10n, '__')
) {
$text = $template->l10n->__($text);
if (is_callable('_gettext')) {
$text = _gettext($text);
} elseif (is_callable('gettext')) {
$text = gettext($text);
}
}
}
@@ -180,6 +168,7 @@ function smarty_block_t($params, $text, $template, &$repeat)
switch ($escape) {
case 'html':
// default
$text = nl2br(htmlspecialchars($text));
break;
case 'javascript':
@@ -187,13 +176,29 @@ function smarty_block_t($params, $text, $template, &$repeat)
// javascript escape
$text = strtr(
$text,
array('\\' => '\\\\', "'" => "\\'", '"' => '\\"', "\r" => '\\r', "\n" => '\\n', '</' => '<\/')
[
'\\' => '\\\\',
"'" => "\\'",
'"' => '\\"',
"\r" => '\\r',
"\n" => '\\n',
'</' => '<\/'
]
);
break;
case 'url':
// url escape
$text = urlencode($text);
break;
// below is a list for explicit OFF
case 'no':
case 'off':
case 'false':
case '0':
case 0:
// explicit OFF
default:
break;
}
return $text;