Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
daf1f9263c | ||
|
|
805c695d68 | ||
|
|
ffdd45e32a | ||
|
|
316ca106fd | ||
|
|
fd9b201346 | ||
|
|
667dc4de8e |
@@ -7,6 +7,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use Exception;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
@@ -274,7 +275,6 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* TODO: create provider for n array merge
|
||||
* provides array listing for the merge test
|
||||
*
|
||||
* @return array
|
||||
@@ -282,6 +282,61 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase
|
||||
public function arrayMergeRecursiveProvider(): array
|
||||
{
|
||||
return [
|
||||
// 0: expected
|
||||
// 1..n: to merge arrays
|
||||
// n+1: trigger for handle keys as string
|
||||
'two arrays' => [
|
||||
['a' => 1, 'b' => 2, 'c' => 3],
|
||||
['a' => 1, 'b' => 2],
|
||||
['b' => 2, 'c' => 3],
|
||||
],
|
||||
'two arrays, string flag' => [
|
||||
['a' => 1, 'b' => 2, 'c' => 3],
|
||||
['a' => 1, 'b' => 2],
|
||||
['b' => 2, 'c' => 3],
|
||||
true,
|
||||
],
|
||||
// non hash arrays
|
||||
'non hash array merge, no string flag' => [
|
||||
[3, 4, 5],
|
||||
[1, 2, 3],
|
||||
[3, 4, 5],
|
||||
],
|
||||
'non hash array merge, string flag' => [
|
||||
[1, 2, 3, 3, 4, 5],
|
||||
[1, 2, 3],
|
||||
[3, 4, 5],
|
||||
true
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* for warning checks
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arrayMergeRecursiveProviderWarning(): array
|
||||
{
|
||||
return [
|
||||
// error <2 arguments
|
||||
'too view arguments' => [
|
||||
'arrayMergeRecursive needs two or more array arguments',
|
||||
[1]
|
||||
],
|
||||
// error <2 arrays
|
||||
'only one array' => [
|
||||
'arrayMergeRecursive needs two or more array arguments',
|
||||
[1],
|
||||
true,
|
||||
],
|
||||
// error element is not array
|
||||
'non array between array' => [
|
||||
'arrayMergeRecursive encountered a non array argument',
|
||||
[1],
|
||||
'string',
|
||||
[2]
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -626,21 +681,43 @@ final class CoreLibsCombinedArrayHandlerTest extends TestCase
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::arrayMergeRecursive
|
||||
* @#dataProvider arrayMergeRecursiveProvider
|
||||
* @testdox arrayMergeRecursive ... will be $expected [$_dataName]
|
||||
* @dataProvider arrayMergeRecursiveProvider
|
||||
* @testdox arrayMergeRecursive ... [$_dataName]
|
||||
*
|
||||
* @param array $input nested array set as each parameter
|
||||
* @param bool $flag
|
||||
* @param bool|array $expected
|
||||
* @return void
|
||||
* array $input, bool $flag, $expected
|
||||
*
|
||||
*/
|
||||
public function testArrayMergeRecursive(): void
|
||||
{
|
||||
$this->assertTrue(true, 'Implement proper test run');
|
||||
$this->markTestIncomplete(
|
||||
'testArrayMergeRecursive has not been implemented yet.'
|
||||
$arrays = func_get_args();
|
||||
// first is expected array, always
|
||||
$expected = array_shift($arrays);
|
||||
$output = \CoreLibs\Combined\ArrayHandler::arrayMergeRecursive(
|
||||
...$arrays
|
||||
);
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$output
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::arrayMergeRecursive
|
||||
* @dataProvider arrayMergeRecursiveProviderWarning
|
||||
* @testdox arrayMergeRecursive with E_USER_WARNING [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testArrayMergeRecursiveWarningA(): void
|
||||
{
|
||||
$arrays = func_get_args();
|
||||
// first is expected warning
|
||||
$warning = array_shift($arrays);
|
||||
$this->expectWarning();
|
||||
$this->expectWarningMessage($warning);
|
||||
\CoreLibs\Combined\ArrayHandler::arrayMergeRecursive(...$arrays);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -68,6 +68,7 @@ final class CoreLibsCreateSessionTest extends TestCase
|
||||
*/
|
||||
public function testStartSession(string $input, string $type, $expected_n, $expected_i): void
|
||||
{
|
||||
// NEEDS MOCKING
|
||||
/* $session_id = '';
|
||||
switch ($type) {
|
||||
case 'p':
|
||||
@@ -97,7 +98,8 @@ final class CoreLibsCreateSessionTest extends TestCase
|
||||
if ($type == 'g') {
|
||||
unset($GLOBALS['SET_SESSION_NAME']);
|
||||
} */
|
||||
$this->markTestSkipped('No implementation for Create\Session. Cannot run session_start in CLI');
|
||||
$this->markTestSkipped('[CoreLibsCreateSessionTest] No implementation '
|
||||
. 'for Create\Session. Cannot run session_start in CLI');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -54,14 +54,16 @@ final class CoreLibsDebugLoggingTest extends TestCase
|
||||
'no options set, constant set' => [
|
||||
null,
|
||||
[
|
||||
'log_folder' => '/tmp/',
|
||||
'log_folder' => str_replace('/configs', '', __DIR__)
|
||||
. DIRECTORY_SEPARATOR . 'log/',
|
||||
'debug_all' => false,
|
||||
'print_all' => false,
|
||||
],
|
||||
[
|
||||
'constant' => [
|
||||
'BASE' => '/tmp',
|
||||
'LOG' => '/'
|
||||
'BASE' => str_replace('/configs', '', __DIR__)
|
||||
. DIRECTORY_SEPARATOR,
|
||||
'LOG' => 'log/'
|
||||
]
|
||||
]
|
||||
],
|
||||
|
||||
@@ -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'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -22,17 +22,36 @@ final class CoreLibsLanguageGetLocaleTest extends TestCase
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
// default web page encoding setting
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
if (!defined('DEFAULT_ENCODING')) {
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
}
|
||||
if (!defined('DEFAULT_LOCALE')) {
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
}
|
||||
// site
|
||||
define('SITE_ENCODING', DEFAULT_ENCODING);
|
||||
define('SITE_LOCALE', DEFAULT_LOCALE);
|
||||
if (!defined('SITE_ENCODING')) {
|
||||
define('SITE_ENCODING', DEFAULT_ENCODING);
|
||||
}
|
||||
if (!defined('SITE_LOCALE')) {
|
||||
define('SITE_LOCALE', DEFAULT_LOCALE);
|
||||
}
|
||||
// just set
|
||||
define('BASE', str_replace('/configs', '', __DIR__) . DIRECTORY_SEPARATOR);
|
||||
define('INCLUDES', 'includes' . DIRECTORY_SEPARATOR);
|
||||
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
||||
define('CONTENT_PATH', 'frontend' . DIRECTORY_SEPARATOR);
|
||||
if (!defined('BASE')) {
|
||||
define('BASE', str_replace('/configs', '', __DIR__) . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('INCLUDES')) {
|
||||
define('INCLUDES', 'includes' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('LANG')) {
|
||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('LOCALE')) {
|
||||
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('CONTENT_PATH')) {
|
||||
define('CONTENT_PATH', 'frontend' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
// array session
|
||||
$_SESSION = [];
|
||||
global $_SESSION;
|
||||
|
||||
@@ -1,325 +0,0 @@
|
||||
<?php // phpcs:disable Generic.Files.LineLength
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Test class for Language\GetSettings
|
||||
*
|
||||
* @coversDefaultClass \CoreLibs\Language\GetSettings
|
||||
* @testdox \CoreLibs\Language\GetSettings method tests
|
||||
*/
|
||||
final class CoreLibsLanguageGetSettingsTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* set all constant variables that must be set before call
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
define('DEFAULT_LANG', 'en_US');
|
||||
// default web page encoding setting
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
// site
|
||||
define('SITE_LANG', DEFAULT_LANG);
|
||||
// just set
|
||||
define('BASE', str_replace('/configs', '', __DIR__) . DIRECTORY_SEPARATOR);
|
||||
define('INCLUDES', 'includes' . DIRECTORY_SEPARATOR);
|
||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||
define('CONTENT_PATH', 'frontend' . DIRECTORY_SEPARATOR);
|
||||
// array session
|
||||
$_SESSION = [];
|
||||
global $_SESSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* all the test data
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function setLangEncodingProvider(): array
|
||||
{
|
||||
return [
|
||||
// 0: locale/lang
|
||||
// 1: domain
|
||||
// 2: path
|
||||
// 3: SESSION DEFAULT_CHARSE
|
||||
// 4: GLOBALS: OVERRIDE_LANG
|
||||
// 5: SESSION: DEFAULT_LANG
|
||||
// 6: expected array
|
||||
'no params, all default constants' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'en_US',
|
||||
2 => 'en',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'en_US',
|
||||
'lang_short' => 'en',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
'no params, session charset and lang' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
'UTF-8', null, 'ja_JP',
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja_JP',
|
||||
2 => 'ja',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja_JP',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
'no params, session charset and lang short' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
'UTF-8', null, 'ja',
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja',
|
||||
2 => 'ja',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// globals override lang
|
||||
'no params, session charset and lang, default lang override' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
'UTF-8', 'en_US', 'ja_JP',
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'en_US',
|
||||
2 => 'en',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'en_US',
|
||||
'lang_short' => 'en',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// globals override lang short
|
||||
'no params, session charset and lang, default lang short override' => [
|
||||
// lang, domain, path
|
||||
null, null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
'UTF-8', 'en', 'ja_JP',
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'en',
|
||||
2 => 'en',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'en',
|
||||
'lang_short' => 'en',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// param lang (no override)
|
||||
'locale param only, no override' => [
|
||||
// lang, domain, path
|
||||
'ja.UTF-8', null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja',
|
||||
2 => 'ja',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// different locale setting
|
||||
'locale complex param only, no override' => [
|
||||
// lang, domain, path
|
||||
'ja_JP.SJIS', null, null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'SJIS',
|
||||
1 => 'ja_JP',
|
||||
2 => 'ja',
|
||||
3 => 'frontend',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'SJIS',
|
||||
'lang' => 'ja_JP',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'frontend',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// param lang and domain (no override)
|
||||
'locale, domain params, no override' => [
|
||||
// lang, domain, path
|
||||
'ja.UTF-8', 'admin', null,
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja',
|
||||
2 => 'ja',
|
||||
3 => 'admin',
|
||||
4 => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'admin',
|
||||
'path' => "/^\/(.*\/)?includes\/lang\/frontend\/$/",
|
||||
],
|
||||
],
|
||||
// all params set (no override)
|
||||
'all params, no override' => [
|
||||
// lang, domain, path
|
||||
'ja.UTF-8', 'admin', __DIR__ . '/locale_other/',
|
||||
// global set no session
|
||||
// SESSION: DEFAULT_CHARSET, GLOBALS: OVERRIDE_LANG, SESSION: DEFAULT_LANG
|
||||
null, null, null,
|
||||
// return array
|
||||
[
|
||||
0 => 'UTF-8',
|
||||
1 => 'ja',
|
||||
2 => 'ja',
|
||||
3 => 'admin',
|
||||
4 => "/^\/(.*\/)?locale_other\/$/",
|
||||
'encoding' => 'UTF-8',
|
||||
'lang' => 'ja',
|
||||
'lang_short' => 'ja',
|
||||
'domain' => 'admin',
|
||||
'path' => "/^\/(.*\/)?locale_other\/$/",
|
||||
],
|
||||
],
|
||||
// TODO invalid params (bad path) (no override)
|
||||
// TODO param calls, but with override set
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Undocumented function
|
||||
*
|
||||
* @covers ::setLangEncoding
|
||||
* @dataProvider setLangEncodingProvider
|
||||
* @testdox lang settings lang $language, domain $domain, path $path; null session char: $SESSION_DEFAULT_CHARSET, null global lang: $GLOBAL_OVERRIDE_LANG, null session lang: $SESSION_DEFAULT_LANG [$_dataName]
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSetLangEncoding(
|
||||
?string $language,
|
||||
?string $domain,
|
||||
?string $path,
|
||||
?string $SESSION_DEFAULT_CHARSET,
|
||||
?string $GLOBAL_OVERRIDE_LANG,
|
||||
?string $SESSION_DEFAULT_LANG,
|
||||
array $expected,
|
||||
): void {
|
||||
$return_lang_settings = [];
|
||||
global $_SESSION;
|
||||
// set override
|
||||
if ($SESSION_DEFAULT_CHARSET !== null) {
|
||||
$_SESSION['DEFAULT_CHARSET'] = $SESSION_DEFAULT_CHARSET;
|
||||
}
|
||||
if ($GLOBAL_OVERRIDE_LANG !== null) {
|
||||
$GLOBALS['OVERRIDE_LANG'] = $GLOBAL_OVERRIDE_LANG;
|
||||
}
|
||||
if ($SESSION_DEFAULT_LANG !== null) {
|
||||
$_SESSION['DEFAULT_LANG'] = $SESSION_DEFAULT_LANG;
|
||||
}
|
||||
// function call
|
||||
if ($language === null && $domain === null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding();
|
||||
} elseif ($language !== null && $domain === null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding(
|
||||
$language
|
||||
);
|
||||
} elseif ($language !== null && $domain !== null && $path === null) {
|
||||
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding(
|
||||
$language,
|
||||
$domain
|
||||
);
|
||||
} else {
|
||||
$return_lang_settings = \CoreLibs\Language\GetSettings::setLangEncoding(
|
||||
$language,
|
||||
$domain,
|
||||
$path
|
||||
);
|
||||
}
|
||||
// print "RETURN: " . print_r($return_lang_settings, true) . "\n";
|
||||
|
||||
foreach (
|
||||
[
|
||||
0, 1, 2, 3, 4,
|
||||
'encoding', 'lang', 'lang_short', 'domain', 'path'
|
||||
] as $key
|
||||
) {
|
||||
$value = $expected[$key];
|
||||
if (strpos($value, "/") === 0) {
|
||||
// this is regex
|
||||
$this->assertMatchesRegularExpression(
|
||||
$value,
|
||||
$return_lang_settings[$key]
|
||||
);
|
||||
} else {
|
||||
// assert equal
|
||||
$this->assertEquals(
|
||||
$value,
|
||||
$return_lang_settings[$key],
|
||||
);
|
||||
}
|
||||
}
|
||||
// unset all vars
|
||||
$_SESSION = [];
|
||||
unset($GLOBALS['OVERRIDE_LANG']);
|
||||
}
|
||||
}
|
||||
|
||||
// __END__
|
||||
@@ -22,19 +22,37 @@ final class CoreLibsLanguageL10nTest extends TestCase
|
||||
*/
|
||||
public static function setUpBeforeClass(): void
|
||||
{
|
||||
define('DEFAULT_LANG', 'en_US');
|
||||
// default web page encoding setting
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
if (!defined('DEFAULT_ENCODING')) {
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
}
|
||||
if (!defined('DEFAULT_LOCALE')) {
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
}
|
||||
// site
|
||||
define('SITE_LANG', DEFAULT_LANG);
|
||||
if (!defined('SITE_ENCODING')) {
|
||||
define('SITE_ENCODING', DEFAULT_ENCODING);
|
||||
}
|
||||
if (!defined('SITE_LOCALE')) {
|
||||
define('SITE_LOCALE', DEFAULT_LOCALE);
|
||||
}
|
||||
// just set
|
||||
define('BASE', str_replace('/configs', '', __DIR__) . DIRECTORY_SEPARATOR);
|
||||
define('INCLUDES', 'includes' . DIRECTORY_SEPARATOR);
|
||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
||||
define('CONTENT_PATH', 'frontend' . DIRECTORY_SEPARATOR);
|
||||
if (!defined('BASE')) {
|
||||
define('BASE', str_replace('/configs', '', __DIR__) . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('INCLUDES')) {
|
||||
define('INCLUDES', 'includes' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('LANG')) {
|
||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('LOCALE')) {
|
||||
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
if (!defined('CONTENT_PATH')) {
|
||||
define('CONTENT_PATH', 'frontend' . DIRECTORY_SEPARATOR);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -527,7 +545,7 @@ final class CoreLibsLanguageL10nTest extends TestCase
|
||||
} else {
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$l10n->__pn($context, $original_single, $original_plural, $n),
|
||||
$l10n->__np($context, $original_single, $original_plural, $n),
|
||||
'assert failed for plural: ' . $n . ' in context: ' . $context
|
||||
);
|
||||
}
|
||||
@@ -949,7 +967,7 @@ final class CoreLibsLanguageL10nTest extends TestCase
|
||||
|
||||
/**
|
||||
* fuctions check
|
||||
* TODO: others d/dn/dp/dpn gettext functions
|
||||
* TODO: others d/dn/dp/dnp gettext functions
|
||||
*
|
||||
* @covers __setlocale
|
||||
* @covers __bindtextdomain
|
||||
@@ -976,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),
|
||||
@@ -987,7 +1005,7 @@ final class CoreLibsLanguageL10nTest extends TestCase
|
||||
);
|
||||
$this->assertEquals(
|
||||
$translated,
|
||||
__gettext($original),
|
||||
_gettext($original),
|
||||
'function gettext assert failed'
|
||||
);
|
||||
}
|
||||
|
||||
@@ -44,9 +44,24 @@ $db = new CoreLibs\DB\IO(DB_CONFIG, $log);
|
||||
// login & page access check
|
||||
$login = new CoreLibs\ACL\Login($db, $log);
|
||||
```
|
||||
* update language class
|
||||
```php
|
||||
// pre auto detect language after login
|
||||
$locale = \CoreLibs\Language\GetLocale::setLocale();
|
||||
// set lang and pass to smarty/backend
|
||||
$l10n = new \CoreLibs\Language\L10n(
|
||||
$locale['locale'],
|
||||
$locale['domain'],
|
||||
$locale['path'],
|
||||
);
|
||||
```
|
||||
* smarty needs language
|
||||
```php
|
||||
$smarty = new CoreLibs\Template\SmartyExtend($l10n, $locale);
|
||||
```
|
||||
* admin backend also needs logger
|
||||
```php
|
||||
$cms = new CoreLibs\Admin\Backend($db, $log);
|
||||
$cms = new CoreLibs\Admin\Backend($db, $log, $l10n, $locale);
|
||||
```
|
||||
* update and `$cms` or similar calls so db is in `$cms->db->...` and log are in `$cms->log->...`
|
||||
* update all `config.*.php` files where needed
|
||||
@@ -60,6 +75,12 @@ require BASE . LIB . 'autoloader.php';
|
||||
```
|
||||
**UPDATE:**
|
||||
```php
|
||||
// po langs [DEPRECAED: use LOCALE]
|
||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||
// po locale file
|
||||
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
||||
```
|
||||
```php
|
||||
// SSL host name
|
||||
// define('SSL_HOST', $_ENV['SSL_HOST'] ?? '');
|
||||
```
|
||||
@@ -85,6 +106,13 @@ define('CONTENT_WIDTH', '100%');
|
||||
define('BASE_NAME', preg_replace('/[^A-Za-z0-9]/', '', $_ENV['BASE_NAME'] ?? ''));
|
||||
```
|
||||
```php
|
||||
/************* LANGUAGE / ENCODING *******/
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
// default web page encoding setting
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
```
|
||||
```php
|
||||
// BAIL ON MISSING DB CONFIG:
|
||||
// we have either no db selction for this host but have db config entries
|
||||
// or we have a db selection but no db config as array or empty
|
||||
@@ -104,6 +132,10 @@ if (
|
||||
}
|
||||
```
|
||||
```php
|
||||
// remove SITE_LANG
|
||||
define('SITE_LOCALE', $SITE_CONFIG[HOST_NAME]['site_locale'] ?? DEFAULT_LOCALE);
|
||||
define('SITE_ENCODING', $SITE_CONFIG[HOST_NAME]['site_encoding'] ?? DEFAULT_ENCODING);
|
||||
```
|
||||
```php
|
||||
/************* GENERAL PAGE TITLE ********/
|
||||
define('G_TITLE', $_ENV['G_TITLE'] ?? '');
|
||||
@@ -118,6 +150,15 @@ In the config then
|
||||
```php
|
||||
'db_name' => $_ENV['DB_NAME.TEST'] ?? '',
|
||||
```
|
||||
* config.host.php update
|
||||
must add site_locale (site_lang + site_encoding)
|
||||
remove site_lang
|
||||
```php
|
||||
// lang + encoding
|
||||
'site_locale' => 'en_US.UTF-8',
|
||||
// site language
|
||||
'site_encoding' => 'UTF-8',
|
||||
```
|
||||
* copy `layout/admin/javascript/edit.jq.js`
|
||||
* check other javacsript files if needed (`edit.jq.js`)
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ $single_string = 'single';
|
||||
$multi_string = 'multi';
|
||||
for ($n = 0; $n <= 3; $n++) {
|
||||
echo "CONTEXT MULTI TEST $n: " . $single_string . "/" . $multi_string . " => "
|
||||
. $l->__pn($context, $single_string, $multi_string, $n) . "<br>";
|
||||
. $l->__np($context, $single_string, $multi_string, $n) . "<br>";
|
||||
}
|
||||
// change domain
|
||||
$domain = 'frontend';
|
||||
@@ -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>";
|
||||
|
||||
@@ -74,6 +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_SMARTY'] = $smarty->l10n->__('Are we translated?');
|
||||
$smarty->DATA['replace'] = 'Replaced';
|
||||
// variable variables
|
||||
|
||||
@@ -27,9 +27,8 @@ $__LOCAL_CONFIG = [
|
||||
'db_host' => 'test',
|
||||
'location' => 'test',
|
||||
'debug_flag' => true,
|
||||
'site_lang' => 'en_US',
|
||||
'site_encoding' => 'UTF-8',
|
||||
'site_locale' => 'en_US.UTF-8',
|
||||
'site_encoding' => 'UTF-8',
|
||||
'login_enabled' => true
|
||||
];
|
||||
|
||||
@@ -46,11 +45,10 @@ $SITE_CONFIG = [
|
||||
'location' => 'test',
|
||||
// show DEBUG override
|
||||
'debug_flag' => true,
|
||||
// site language
|
||||
'site_lang' => 'en_US',
|
||||
'site_encoding' => 'UTF-8',
|
||||
// lang + encoding
|
||||
// site locale
|
||||
'site_locale' => 'en_US.UTF-8',
|
||||
// site encoding
|
||||
'site_encoding' => 'UTF-8',
|
||||
// enable/disable login override
|
||||
'login_enabled' => true
|
||||
],
|
||||
|
||||
@@ -65,8 +65,6 @@ define('JS', 'javascript' . DIRECTORY_SEPARATOR);
|
||||
define('TABLE_ARRAYS', 'table_arrays' . DIRECTORY_SEPARATOR);
|
||||
// smarty libs path
|
||||
define('SMARTY', 'Smarty' . DIRECTORY_SEPARATOR);
|
||||
// po langs [DEPRECAED: use LOCALE]
|
||||
define('LANG', 'lang' . DIRECTORY_SEPARATOR);
|
||||
// po locale file
|
||||
define('LOCALE', 'locale' . DIRECTORY_SEPARATOR);
|
||||
// cache path
|
||||
@@ -160,11 +158,10 @@ define('CACHE_ID', 'CACHE_' . BASE_NAME . '_' . SERVER_NAME_HASH);
|
||||
define('COMPILE_ID', 'COMPILE_' . BASE_NAME . '_' . SERVER_NAME_HASH);
|
||||
|
||||
/************* LANGUAGE / ENCODING *******/
|
||||
define('DEFAULT_LANG', 'en_US');
|
||||
// default web page encoding setting
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
// default lang + encoding
|
||||
define('DEFAULT_LOCALE', 'en_US.UTF-8');
|
||||
// default web page encoding setting
|
||||
define('DEFAULT_ENCODING', 'UTF-8');
|
||||
|
||||
/************* LOGGING *******************/
|
||||
// below two can be defined here, but they should be
|
||||
@@ -262,9 +259,8 @@ $GLOBALS['DB_CONFIG'] = DB_CONFIG;
|
||||
// debug settings, site lang, etc
|
||||
define('TARGET', $SITE_CONFIG[HOST_NAME]['location'] ?? 'test');
|
||||
define('DEBUG', $SITE_CONFIG[HOST_NAME]['debug_flag'] ?? false);
|
||||
define('SITE_LANG', $SITE_CONFIG[HOST_NAME]['site_lang'] ?? DEFAULT_LANG);
|
||||
define('SITE_ENCODING', $SITE_CONFIG[HOST_NAME]['site_encoding'] ?? DEFAULT_ENCODING);
|
||||
define('SITE_LOCALE', $SITE_CONFIG[HOST_NAME]['site_locale'] ?? DEFAULT_LOCALE);
|
||||
define('SITE_ENCODING', $SITE_CONFIG[HOST_NAME]['site_encoding'] ?? DEFAULT_ENCODING);
|
||||
define('LOGIN_ENABLED', $SITE_CONFIG[HOST_NAME]['login_enabled'] ?? false);
|
||||
define('AUTH', $SITE_CONFIG[HOST_NAME]['auth'] ?? false);
|
||||
// paths
|
||||
|
||||
@@ -53,9 +53,14 @@ if (!defined('DIR')) {
|
||||
// find trigger name "admin/" or "frontend/" in the getcwd() folder
|
||||
foreach (['admin', 'frontend'] as $folder) {
|
||||
if (strstr(getcwd() ?: '', DIRECTORY_SEPARATOR . $folder)) {
|
||||
define('CONTENT_PATH', $folder . DIRECTORY_SEPARATOR);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// if content path is empty, fallback is default
|
||||
/** @phpstan-ignore-next-line can be empty */
|
||||
if (empty($folder)) {
|
||||
$folder = 'default';
|
||||
}
|
||||
define('CONTENT_PATH', $folder . DIRECTORY_SEPARATOR);
|
||||
|
||||
// __END__
|
||||
|
||||
@@ -7,7 +7,8 @@
|
||||
<div>
|
||||
<b>Outside translation test</b><br>
|
||||
TRANSLATION CLASS (OUT): {$TRANSLATE_TEST}<br>
|
||||
TRANSLATION CLASS (SMARTY): {$TRANSLATE_TEST_SMARTY}
|
||||
TRANSLATION CLASS (OUT FUNCTION): {$TRANSLATE_TEST_FUNCTION}<br>
|
||||
TRANSLATION CLASS (SMARTY): {$TRANSLATE_TEST_SMARTY}<br>
|
||||
</div>
|
||||
<div>
|
||||
<b>Translate Test with replace:</b><br>
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
<div>
|
||||
{$SMARTY_TEST}
|
||||
</div>
|
||||
<div>
|
||||
TRANSLATION CLASS (OUT): {$TRANSLATE_TEST}
|
||||
</div>
|
||||
<div>
|
||||
TRANSLATION CLASS (SMARTY): {$TRANSLATE_TEST_SMARTY}
|
||||
</div>
|
||||
<div>
|
||||
<select id="drop_down_test" name="drop_down_test">
|
||||
{html_options options=$drop_down_test selected=$drop_down_test_selected}
|
||||
</select>
|
||||
</div>
|
||||
<div class="jq-container">
|
||||
<div id="jq-test" class="jp-test">
|
||||
<div id="test-div" class="test-div">
|
||||
Some content here or asdfasdfasf
|
||||
</div>
|
||||
<div id="translate-div">
|
||||
{* TRANSLATION SMARTY: {t}I should be translated{/t} *}
|
||||
TRANSLATION SMARTY: I should be translated
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="loop-test">
|
||||
<div>LOOP TEST</div>
|
||||
{section name=page_list start=1 loop=$loop_start+1}
|
||||
<div>LOOP OUTPUT: {$smarty.section.page_list.index}</div>
|
||||
{/section}
|
||||
</div>
|
||||
{* progresss indicator *}
|
||||
<div id="indicator"></div>
|
||||
{* the action confirm box *}
|
||||
<div id="actionBox" class="actionBoxElement"></div>
|
||||
{* The Overlay box *}
|
||||
<div id="overlayBox" class="overlayBoxElement"></div>
|
||||
@@ -218,7 +218,8 @@ class ArrayHandler
|
||||
continue;
|
||||
}
|
||||
foreach ($array as $key => $value) {
|
||||
// if string or if key is assumed to be string do key match else add new entry
|
||||
// if string or if key is assumed to be string do key match
|
||||
// else add new entry
|
||||
if (is_string($key) || $key_is_string === false) {
|
||||
if (is_array($value) && array_key_exists($key, $merged) && is_array($merged[$key])) {
|
||||
// $merged[$key] = call_user_func(__METHOD__, $merged[$key], $value, $key_is_string);
|
||||
|
||||
@@ -1,141 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Internal function for getting languange and encodig settings
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace CoreLibs\Language;
|
||||
|
||||
class GetSettings
|
||||
{
|
||||
/**
|
||||
* Sets encoding and language
|
||||
* Can be overridden with language + path to mo file
|
||||
* If locale is set it must be in the format of:
|
||||
* <lang>.<encoding>
|
||||
* <lang>_<country>.<encoding>
|
||||
* <lang>_<country>.<encoding>@<subset>
|
||||
* If no encoding is set in the is, UTF-8 is assumed
|
||||
*
|
||||
* Returned is an array with array indes and dictionary index
|
||||
* 0~4 array are
|
||||
* encoding: 0
|
||||
* lang: 1
|
||||
* lang_short: 2
|
||||
* domain: 3
|
||||
* path: 4
|
||||
*
|
||||
* @param string|null $locale A valid locale name
|
||||
* @param string|null $path A valid path where the mo files will be based
|
||||
* @return array<int|string,string> Settings as array/dictionary
|
||||
* @deprecated Use CoreLibs\Language\GetLocale::setLocale()
|
||||
*/
|
||||
public static function setLangEncoding(
|
||||
?string $locale = null,
|
||||
?string $domain = null,
|
||||
?string $path = null
|
||||
): array {
|
||||
$lang = '';
|
||||
$lang_short = '';
|
||||
$encoding = '';
|
||||
// if is is set, extract
|
||||
if (!empty($locale)) {
|
||||
preg_match(
|
||||
// language code
|
||||
'/^(?P<lang>[a-z]{2,3})'
|
||||
// _ country code
|
||||
. '(?:_(?P<country>[A-Z]{2}))?'
|
||||
// . charset
|
||||
. '(?:\\.(?P<charset>[-A-Za-z0-9_]+))?'
|
||||
// @ modifier
|
||||
. '(?:@(?P<modifier>[-A-Za-z0-9_]+))?$/',
|
||||
$locale,
|
||||
$matches
|
||||
);
|
||||
// lang short part
|
||||
$lang_short = $matches['lang'] ?? '';
|
||||
$lang = $lang_short;
|
||||
// lang + country if country is set
|
||||
if (!empty($matches['country'])) {
|
||||
$lang = sprintf('%s_%s', $lang_short, $matches['country']);
|
||||
}
|
||||
// encoding if set
|
||||
$encoding = strtoupper($matches['charset'] ?? 'UTF-8');
|
||||
}
|
||||
// if domain is set, must be alphanumeric, if not unset
|
||||
if (
|
||||
!empty($domain) &&
|
||||
!preg_match("/^\w+$/", $domain)
|
||||
) {
|
||||
$domain = '';
|
||||
}
|
||||
// path checks if set, if not valid path unset
|
||||
if (
|
||||
!empty($path) &&
|
||||
!is_dir($path)
|
||||
) {
|
||||
$path = '';
|
||||
}
|
||||
|
||||
// just emergency fallback for language
|
||||
// set encoding
|
||||
if (empty($encoding)) {
|
||||
if (!empty($_SESSION['DEFAULT_CHARSET'])) {
|
||||
$encoding = $_SESSION['DEFAULT_CHARSET'];
|
||||
} else {
|
||||
$encoding = DEFAULT_ENCODING;
|
||||
}
|
||||
}
|
||||
// gobal override
|
||||
if (empty($lang)) {
|
||||
if (!empty($GLOBALS['OVERRIDE_LANG'])) {
|
||||
$lang = $GLOBALS['OVERRIDE_LANG'];
|
||||
} elseif (!empty($_SESSION['DEFAULT_LANG'])) {
|
||||
// session (login)
|
||||
$lang = $_SESSION['DEFAULT_LANG'];
|
||||
} else {
|
||||
// mostly default SITE LANG or DEFAULT LANG
|
||||
$lang = defined('SITE_LANG') && !empty(SITE_LANG) ?
|
||||
SITE_LANG :
|
||||
DEFAULT_LANG;
|
||||
}
|
||||
}
|
||||
// create the char lang encoding
|
||||
if (empty($lang_short)) {
|
||||
$lang_short = substr($lang, 0, 2);
|
||||
}
|
||||
// set the language folder
|
||||
if (empty($path)) {
|
||||
// LEGACY
|
||||
$path = BASE . INCLUDES . LANG . CONTENT_PATH;
|
||||
// will be BASE . INCLUDES . LANG . $language . /LC_MESSAGES/
|
||||
// so CONTENT_PATH has to be removed
|
||||
}
|
||||
// if no domain is set, fall back to content path
|
||||
if (empty($domain)) {
|
||||
$domain = str_replace('/', '', CONTENT_PATH);
|
||||
}
|
||||
// return
|
||||
return [
|
||||
// as array
|
||||
0 => $encoding,
|
||||
1 => $lang,
|
||||
2 => $lang_short,
|
||||
3 => $domain,
|
||||
4 => $path,
|
||||
// with index name
|
||||
// encoding
|
||||
'encoding' => $encoding,
|
||||
// language full string, eg en_US
|
||||
'lang' => $lang,
|
||||
// lang short, if eg en_US only en
|
||||
'lang_short' => $lang_short,
|
||||
// translation domain (CONTENT_PATH)
|
||||
'domain' => $domain,
|
||||
// folder BASE ONLY
|
||||
'path' => $path,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -601,7 +601,7 @@ class L10n
|
||||
* @param int $number number value
|
||||
* @return string
|
||||
*/
|
||||
public function __pn(string $context, string $single, string $plural, int $number): string
|
||||
public function __np(string $context, string $single, string $plural, int $number): string
|
||||
{
|
||||
if ($this->l10n === null) {
|
||||
return $number > 1 ? $plural : $single;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -164,8 +164,6 @@ class SmartyExtend extends \Smarty
|
||||
parent::__construct();
|
||||
// iinit lang
|
||||
$this->l10n = $l10n;
|
||||
// opt load functions so we can use legacy init for smarty run perhaps
|
||||
$this->l10n->loadFunctions();
|
||||
// parse and read, legacy stuff
|
||||
$this->encoding = $locale['encoding'];
|
||||
$this->lang = $locale['lang'];
|
||||
@@ -174,6 +172,13 @@ class SmartyExtend extends \Smarty
|
||||
$this->domain = $this->l10n->getDomain();
|
||||
$this->lang_dir = $this->l10n->getBaseLocalePath();
|
||||
|
||||
// opt load functions so we can use legacy init for smarty run perhaps
|
||||
\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']);
|
||||
|
||||
|
||||
@@ -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();
|
||||
@@ -101,11 +90,75 @@ function smarty_block_t($params, $text, $template, &$repeat)
|
||||
}
|
||||
}
|
||||
|
||||
// get domain param
|
||||
if (isset($params['domain'])) {
|
||||
$domain = $params['domain'];
|
||||
unset($params['domain']);
|
||||
} else {
|
||||
$domain = null;
|
||||
}
|
||||
|
||||
// get context param
|
||||
if (isset($params['context'])) {
|
||||
$context = $params['context'];
|
||||
unset($params['context']);
|
||||
} else {
|
||||
$context = null;
|
||||
}
|
||||
|
||||
// use plural if required parameters are set
|
||||
if (isset($count) && isset($plural)) {
|
||||
$text = $template->l10n->__ngettext($text, $plural, $count);
|
||||
if (isset($domain) && isset($context)) {
|
||||
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);
|
||||
} elseif (is_callable('dngettext')) {
|
||||
$text = dngettext($domain, $text, $plural, $count);
|
||||
}
|
||||
} elseif (isset($context)) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
} else { // use normal
|
||||
$text = $template->l10n->__($text);
|
||||
if (isset($domain) && isset($context)) {
|
||||
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);
|
||||
} elseif (is_callable('dpgettext')) {
|
||||
$text = dgettext($domain, $text);
|
||||
}
|
||||
} elseif (isset($context)) {
|
||||
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 (is_callable('gettext')) {
|
||||
$text = gettext($text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// run strarg if there are parameters
|
||||
@@ -115,6 +168,7 @@ function smarty_block_t($params, $text, $template, &$repeat)
|
||||
|
||||
switch ($escape) {
|
||||
case 'html':
|
||||
// default
|
||||
$text = nl2br(htmlspecialchars($text));
|
||||
break;
|
||||
case 'javascript':
|
||||
@@ -122,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;
|
||||
|
||||
1
www/vendor/composer/autoload_classmap.php
vendored
1
www/vendor/composer/autoload_classmap.php
vendored
@@ -48,7 +48,6 @@ return array(
|
||||
'CoreLibs\\Language\\Core\\StringReader' => $baseDir . '/lib/CoreLibs/Language/Core/StringReader.php',
|
||||
'CoreLibs\\Language\\Encoding' => $baseDir . '/lib/CoreLibs/Language/Encoding.php',
|
||||
'CoreLibs\\Language\\GetLocale' => $baseDir . '/lib/CoreLibs/Language/GetLocale.php',
|
||||
'CoreLibs\\Language\\GetSettings' => $baseDir . '/lib/CoreLibs/Language/GetSettings.php',
|
||||
'CoreLibs\\Language\\L10n' => $baseDir . '/lib/CoreLibs/Language/L10n.php',
|
||||
'CoreLibs\\Output\\Form\\Elements' => $baseDir . '/lib/CoreLibs/Output/Form/Elements.php',
|
||||
'CoreLibs\\Output\\Form\\Generate' => $baseDir . '/lib/CoreLibs/Output/Form/Generate.php',
|
||||
|
||||
1
www/vendor/composer/autoload_static.php
vendored
1
www/vendor/composer/autoload_static.php
vendored
@@ -113,7 +113,6 @@ class ComposerStaticInit10fe8fe2ec4017b8644d2b64bcf398b9
|
||||
'CoreLibs\\Language\\Core\\StringReader' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/Core/StringReader.php',
|
||||
'CoreLibs\\Language\\Encoding' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/Encoding.php',
|
||||
'CoreLibs\\Language\\GetLocale' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/GetLocale.php',
|
||||
'CoreLibs\\Language\\GetSettings' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/GetSettings.php',
|
||||
'CoreLibs\\Language\\L10n' => __DIR__ . '/../..' . '/lib/CoreLibs/Language/L10n.php',
|
||||
'CoreLibs\\Output\\Form\\Elements' => __DIR__ . '/../..' . '/lib/CoreLibs/Output/Form/Elements.php',
|
||||
'CoreLibs\\Output\\Form\\Generate' => __DIR__ . '/../..' . '/lib/CoreLibs/Output/Form/Generate.php',
|
||||
|
||||
Reference in New Issue
Block a user