| Server IP : 185.252.147.100 / Your IP : 216.73.217.33 Web Server : nginx/1.27.3 System : Linux mitrofanov.ru 6.1.0-37-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.140-1 (2025-05-22) x86_64 User : mitr ( 1000) PHP Version : 8.2.29 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /www/html/tour.mitrofanov.ru/public/wp-content/plugins/site-reviews/plugin/Modules/ |
Upload File : |
<?php
namespace GeminiLabs\SiteReviews\Modules;
class Translator
{
public function translate(string $original, string $domain, array $args): string
{
$domains = glsr()->filterArray('translator/domains', [glsr()->id]);
if (!in_array($domain, $domains)) {
return $original;
}
$args = $this->normalizeTranslationArgs($args);
$strings = $this->getTranslationStrings($args['single'], $args['plural']);
if (empty($strings)) {
return $original;
}
$string = current($strings);
return 'plural' === $string['type']
? $this->translatePlural($domain, $string, $args)
: $this->translateSingle($domain, $string, $args);
}
/**
* Used when search/replacing a default text-domain translation.
*/
public function getTranslation(array $args): string
{
$args = $this->normalizeTranslationArgs($args);
return get_translations_for_domain(glsr()->id)->translate_plural($args['single'], $args['plural'], $args['number']);
}
protected function getTranslationStrings(string $single, string $plural): array
{
return array_filter(glsr(Translation::class)->strings(), function ($string) use ($single, $plural) {
return $string['s1'] === html_entity_decode($single, ENT_COMPAT, 'UTF-8')
&& $string['p1'] === html_entity_decode($plural, ENT_COMPAT, 'UTF-8');
});
}
protected function normalizeTranslationArgs(array $args): array
{
$defaults = [
'context' => '',
'number' => 1,
'plural' => '',
'single' => '',
];
return shortcode_atts($defaults, $args);
}
protected function translatePlural(string $domain, array $string, array $args): string
{
if (!empty($string['s2'])) {
$args['single'] = $string['s2'];
}
if (!empty($string['p2'])) {
$args['plural'] = $string['p2'];
}
return get_translations_for_domain($domain)->translate_plural(
$args['single'],
$args['plural'],
$args['number'],
$args['context']
);
}
protected function translateSingle(string $domain, array $string, array $args): string
{
if (!empty($string['s2'])) {
$args['single'] = $string['s2'];
}
return get_translations_for_domain($domain)->translate(
$args['single'],
$args['context']
);
}
}