Skip navigation

Эта тема решена. Вот описание проблемы и ее решения.

Проблема:
Клиент добавил новые функции на сайт с помощью PHP и зарегистрировал строки для перевода через WPML. Однако переводы строк не применились везде на сайте.
Решение:
1. Убедитесь, что ваш код соответствует стандартам и корректно использует функции wpml_register_single_string и wpml_translate_single_string. Примеры использования доступны по ссылкам: wpml_register_single_string, wpml_translate_single_string.
2. Воспользуйтесь инструментами для устранения неполадок в WPML → Support → Troubleshooting, такими как очистка кэша и генерация новых MO файлов.
3. Проверьте, используете ли вы устаревшую функцию icl_register_string. Вместо неё следует использовать wpml_register_string и wpml_translate_string для регистрации и отображения переведенных строк соответственно. Подробная инструкция доступна здесь: String Package Translation.

Если данное решение не актуально или не помогло решить вашу проблему, рекомендуем открыть новый тикет в службе поддержки WPML. Также рекомендуем проверить известные проблемы на странице известных проблем, убедиться в актуальности версии исправления и подтвердить, что у вас установлены последние версии тем и плагинов.

Это форум технической поддержки WPML – плагина для многоязычной WordPress.

Доступно для чтения всем, но только клиенты, купившие WPML, могут оставлять сообщения. Сотрудники WPML отвечают на сообщения форума 6 дней в неделю, 22 часов в сутки.

Сотрудники Службы поддержки сегодня не доступны на форуме Russian. Создайте обращение и мы возьмемся за решение вашего вопроса, как только будем в сети. Благодарим за понимание.

Помечено: 

Эта тема содержит 5 ответов, имеет 2 голоса.

Последнее обновление: Andrey 1 месяц, 1 неделя назад.

При содействии: Andrey.

Автор Записи
7 октября, 2024 на 11:20 дп #16260906

alexanderW-35

Предыстория вопроса:
Я добавил новые функции на сайт скрытая ссылка с помощью PHP. Для текстов прописал код для регистрации в переводе строк через WPML. Строки появились, и я сделал их перевод.

Симптомы:
Переводы строк применились не везде на сайте.

Вопросы:
Почему переводы строк не применились везде на сайте?
Как убедиться, что все строки правильно зарегистрированы для перевода?

7 октября, 2024 на 12:52 пп #16261473

Andrey
Supporter

Языки: Английский (English ) Русский (Русский )

Часовой пояс: Europe/Kyiv (GMT+02:00)

Вам необходимо убедиться, что код написанный Вами соответствует все стандартам. Также, что корректно используете wpml_register_single_string https://wpml.org/wpml-hook/wpml_register_single_string/ и последующее отображение строки wpml_translate_single_string https://wpml.org/wpml-hook/wpml_translate_single_string/. Примеры, также доступны по ссылкам.

У Вас также ест возможность запустить несколько опций по устранению неполадок в WPML → Support → Troubleshooting:
- Clear the cache in WPML
- Show custom MO Files Pre-generation dialog box и сгенерировать после новые файлы.

Дополнительная информация:
https://wpml.org/documentation/support/translating-the-theme-you-created/#what-is-internationalization-in-wordpress

8 октября, 2024 на 9:08 дп #16264555

alexanderW-35

Все проверил. Коды регистрации строк происаны верно. Что подтверждает наличие их в таблице строк. Переводы строк сделаны. Кеш wpml очищен, файл PO обнавлн. Но на сайте переводы не работают.

Снимок экрана 2024-10-08 в 11.07.44.png
Снимок экрана 2024-10-08 в 11.07.33.png
8 октября, 2024 на 2:10 пп #16265826

Andrey
Supporter

Языки: Английский (English ) Русский (Русский )

Часовой пояс: Europe/Kyiv (GMT+02:00)

Мне необходимо увидеть, как Вы это сделали. Скопируйте пожалуйста все соответствующие коды и вставьте здесь, которые используете. Проверяли ли проблему временно отключив все плагины кроме WPML?

8 октября, 2024 на 5:21 пп #16266932

alexanderW-35
// Массив с ролями и их привилегиями
    $roles = [
        'scandi_girls_explorer' => [
            'status' => __('Scandi Girls Explorer', 'scandinasia.de'),
            'privileges' => '<ul>
                                <li>' . __('Rabatt: 5%', 'scandinasia.de') . '</li>
                                <li>' . __('Zugang zu neuen Kollektionen 1 Tag vor dem offiziellen Start', 'scandinasia.de') . '</li>
                             </ul>'
        ],
        'scandi_girls_adventurer' => [
            'status' => __('Scandi Girls Adventurer', 'scandinasia.de'),
            'privileges' => '<ul>
                                <li>' . __('Rabatt: 7%', 'scandinasia.de') . '</li>
                                <li>' . __('Zugang zu neuen Kollektionen 2 Tage vor dem offiziellen Start', 'scandinasia.de') . '</li>
                                <li>' . __('Teilnahme an exklusiven Club-Veranstaltungen', 'scandinasia.de') . '</li>
                             </ul>'
        ],
        'scandi_girls_voyager' => [
            'status' => __('Scandi Girls Voyager', 'scandinasia.de'),
            'privileges' => '<ul>
                                <li>' . __('Rabatt: 10%', 'scandinasia.de') . '</li>
                                <li>' . __('Zugang zu neuen Kollektionen 3 Tage vor dem offiziellen Start', 'scandinasia.de') . '</li>
                                <li>' . __('Priorisierte Betreuung', 'scandinasia.de') . '</li>
                                <li>' . __('Exklusive Geschenke', 'scandinasia.de') . '</li>
                             </ul>'
        ],
        'scandi_girls_queen' => [
            'status' => __('Scandi Girls Queen', 'scandinasia.de'),
            'privileges' => '<ul>
                                <li>' . __('Rabatt: 15%', 'scandinasia.de') . '</li>
                                <li>' . __('Zugang zu neuen Kollektionen 5 Tage vor dem offiziellen Start', 'scandinasia.de') . '</li>
                                <li>' . __('Exklusive Angebote', 'scandinasia.de') . '</li>
                                <li>' . __('Persönliche Beratung', 'scandinasia.de') . '</li>
                                <li>' . __('VIP-Einladungen zu Veranstaltungen', 'scandinasia.de') . '</li>
                             </ul>'
        ]
    ];

    // Перебор ролей и вывод информации
    foreach ($roles as $role => $info) {
        if (in_array($role, $current_user->roles)) {
            echo '<p><strong>' . __('Ihr Status:', 'scandinasia.de') . '</strong> ' . $info['status'] . '</p>';
            echo '<p><strong>' . __('Vorteile:', 'scandinasia.de') . '</strong></p>';
            echo $info['privileges'];
            return; // Останавливаем после первого найденного соответствия
        }
    }

    // Если нет специальной роли - мотивирующий текст
    echo '<p><strong>' . __('Ihr Status:', 'scandinasia.de') . '</strong> ' . __('Noch kein Mitglied', 'scandinasia.de') . '</p>';
    echo '<p>' . __('Werden Sie Mitglied, um exklusive Rabatte, frühe Zugänge zu neuen Kollektionen und andere Vorteile zu genießen!', 'scandinasia.de') . '</p>';
    echo '<p>' . __('Machen Sie Ihre erste Bestellung und treten Sie unserem exklusiven Club bei!', 'scandinasia.de') . '</p>';
}


if (function_exists('icl_register_string')) {
    // Регистрация строк для перевода на немецком
    icl_register_string('scandinasia', 'Verkaufsstart: %s. Nur für Clubmitglieder verfügbar.', 'Verkaufsstart: %s. Nur für Clubmitglieder verfügbar.');
    icl_register_string('scandinasia', 'Sie haben Zugriff auf diese Kollektion %s Tage vor dem offiziellen Start.', 'Sie haben Zugriff auf diese Kollektion %s Tage vor dem offiziellen Start.');

    icl_register_string('scandinasia', 'Vorteile:', 'Vorteile:');
    icl_register_string('scandinasia', 'Rabatt:', 'Rabatt:');
    icl_register_string('scandinasia', 'Ihr Status:', 'Ihr Status:');

	icl_register_string('scandinasia', 'Verkaufsstart: %s. Nur für Clubmitglieder verfügbar. Weitere Informationen zu den Clubregeln finden Sie %s.', 'Verkaufsstart: %s. Nur für Clubmitglieder verfügbar. Weitere Informationen zu den Clubregeln finden Sie %s.');
}
9 октября, 2024 на 2:34 пп #16271093

Andrey
Supporter

Языки: Английский (English ) Русский (Русский )

Часовой пояс: Europe/Kyiv (GMT+02:00)

На что я обратил внимание:

1. Как Вы загружаете домен scandinasia.de, к примеру где используете его в gettext вызове?

__('Rabatt: 15%', 'scandinasia.de') 

2. icl_register_string это устаревшая функция, Вам необходимо использовать wpml_register_string

do_action( 'wpml_register_string', string $string_value, string $string_name, array $package, string $string_title, string $string_type )

https://wpml.org/wpml-hook/wpml_register_string/

3. Для отображения этих переведенных строк, где Вы используете wpml_translate_string ?

apply_filters( 'wpml_translate_string', string $string_value, string $string_name, (integer|array|object) $package )

Пошаговая инструкция:
https://wpml.org/documentation/support/string-package-translation/