Wordpress «PHP внутри PHP» — интегрируйте qTranslate с Meta Box

Для веб-сайта (Wordpress) я хочу отображать даты с помощью известного плагина Meta Box, а веб-сайт должен быть на английском и немецком языках с помощью плагина qTranslate.

Немецкий и английский форматы даты различаются: немецкий: дд.мм.г (31.12.16), английский: мм/дд/г (12/31/16). Таким образом, чтобы отображать правильный формат в соответствии с языком, выбранным посетителем/для посетителя, два плагина должны работать вместе.

Вот как я бы отображал дату без выбора языка:

<?php echo rwmb_meta( 'exhibition_meta_beginning' ); ?>

Вот как я бы отобразил перевод текста на веб-сайте за пределами поста и содержимого страницы (например, навигация по сайту):

<?php _e("[:en]Current[:de]Aktuell[:]"); ?>

Теперь мой вопрос заключается в том, как я могу объединить две функции. Если это поможет, я был бы в порядке с разделением Exhibition_meta_beginning на Exhibition_meta_beginning_DE и Exhibition_meta_beginning_EN, что означало бы, что мне нужно было вводить каждую дату дважды при создании нового экземпляра/сообщения, один раз в немецком и один раз в английском формате.

Я пока не нашел ничего полезного — да, есть упоминания об этом, и есть какой-то способ использовать настраиваемые поля (которые являются основной основой Meta Box) с qTranslate, но, похоже, ничего не работает, и мои знания в PHP это минимум.

Поля ввода для метаданных, являющихся датами (и временем), определены в отдельном файле PHP, подобном этому (стандартная процедура Meta Box):

array(
        'name'      => 'Beginn der Ausstellung',
        'id'        => $prefix . 'beginn',
        'type'      => 'date',
        'format'    => 'dd.mm.y'
    ),

Не получилось ни внедрить двуязычие в значение формата тут же (он думает, что это формат даты, а не языковой тег, когда там появляется [:en]...), ни что-то подобное в той части, где данные отображается (извините за дилетантскую попытку):

<?php __("[:en] echo rwmb_meta( 'exhibition_meta_beginn_EN' )[:de]echo rwmb_meta( 'exhibition_meta_beginn_DE' )[:]"); ?>

Спасибо!


person Thomas Maier    schedule 30.01.2016    source источник
comment
Решением в конце было использование date_i18n (поищите в Wordpress Codex). Определите поле даты с универсальным форматом даты, который может быть прочитан strtotime (например, yy-mm-dd), и используйте его в качестве аргумента в date_i18n. Используйте date_i18n дважды, один для английского формата и один для другого формата, соедините их соответствующими языковыми тегами в виде строк и . между ними для соединения. Затем используйте _e для отображения всей строки, которая использует содержимое одного поля ввода дважды в двух интерпретациях (два языка), и конечная локаль выберет, какую из них отображать. Изысканное решение.   -  person Thomas Maier    schedule 01.02.2016


Ответы (1)


Вы можете сделать это так,

$en = rwmb_meta( 'exhibition_meta_beginn_EN' );
$de = rwmb_meta( 'exhibition_meta_beginn_DE' );
echo __('[:en]'.$en.'[:de]'.$de.'[:]');

или создайте функцию, которая возвращает значение на основе языка

function __show_based_on_lang($en, $de) {
    return ( qtranxf_getLanguage() == 'en') ? $en : $de ;
}

затем, чтобы использовать функцию, вы можете просто сделать это так,

echo __show_based_on_lang( rwmb_meta( 'exhibition_meta_beginn_EN' ), rwmb_meta( 'exhibition_meta_beginn_DE' ) );
person silver    schedule 30.01.2016
comment
Потрясающий. Это работает. Я не хочу показаться жадным, но не могли бы вы также придумать, как решить проблему, не разделяя все значения на два? - person Thomas Maier; 30.01.2016
comment
Просто сохраните весь синтаксис в одном метаполе, тогда он будет автоматически преобразован, и вам нужно будет только повторить значение поля метабокса, которое равно [:en]English[:de]German Value[:] - person silver; 30.01.2016
comment
Я сейчас не на работе, поэтому я не могу попробовать еще раз, но если я правильно понимаю, это то, что я пробовал, и запись синтаксиса qtranslate в поле мета-поля (тип = дата) приводит к интерпретации de и en как PHP синтаксис даты, поэтому он возвращает числа, такие как день, для 'd'. - person Thomas Maier; 30.01.2016
comment
Я не уверен, правильно ли я вас понимаю, но если ваши мета-поля не являются простым полем ввода текста (например, флажком или средством выбора данных), вы можете просто интегрировать перевод текстового домена непосредственно в него (при условии, что он поддерживает перевод) - person silver; 30.01.2016
comment
перевод текстового домена? что это значит? а что он должен поддерживать перевод? Проблема, которую я имею в виду, заключается в том, что значение в поле, которое интерпретируется как дата (выбор даты с указанным форматом даты), интерпретирует все значение и не исключает то, что находится в скобках или синтаксисе комментариев, оно просто берет его либо в виде строки, либо, если указано, в виде символа формата. Таким образом, вместо «de» он интерпретирует «d» как номер дня с ведущим 0 и «e» как используемый часовой пояс. Или — если вы имеете в виду что-то другое — не могли бы вы дать мне пример кода? Спасибо! - person Thomas Maier; 31.01.2016
comment
Всякий раз, когда я пытаюсь использовать PHP, он просто возвращает пустую страницу... Хорошо, поэтому я изменил исходный формат даты в средстве выбора даты на нейтральный формат времени UNIX, равный мм/дд-гг (или м/дГ, но это не сработало). ). Тогда я написал ‹ ? php $beginn = date_i18n(get_option('date_format'), strtotime(rwmb_meta('exhibition_meta_beginn')); $ende = date_i18n(get_option('date_format'), strtotime(rwmb_meta('exhibition_meta_ende')); echo __($beginn .'–'.$ende ); ? › Извините, вам нужно где-то скопировать его, чтобы иметь синтаксис - person Thomas Maier; 31.01.2016
comment
Давайте продолжим обсуждение в чате. - person Thomas Maier; 31.01.2016