Plugin Directory

Changeset 3618717


Ignore:
Timestamp:
07/22/2026 01:53:22 PM (3 months ago)
Author:
e-krukov
Message:

1.2.7: internationalize admin UI strings, Russian as source language

Location:
zhekich-feed-generator-for-dzen
Files:
4 edited
5 copied

Legend:

Unmodified
Added
Removed
  • zhekich-feed-generator-for-dzen/tags/1.2.7/includes/Admin/SettingsPage.php

    r3618425 r3618717  
    2727    {
    2828        $hook = add_options_page(
    29             'Zhekich Feed Generator for Dzen',
    30             'Zhekich Feed Generator for Dzen',
     29            __('Zhekich Feed Generator for Dzen', 'zhekich-feed-generator-for-dzen'),
     30            __('Zhekich Feed Generator for Dzen', 'zhekich-feed-generator-for-dzen'),
    3131            'manage_options',
    3232            self::PAGE_SLUG,
    … …  
    7171        $screen->add_help_tab([
    7272            'id'      => 'dzen-variants',
    73             'title'   => 'Варианты unified-RSS',
     73            'title'   => __('Варианты unified-RSS', 'zhekich-feed-generator-for-dzen'),
    7474            'content' => $this->helpVariantsHtml(),
    7575        ]);
    … …  
    7777        $screen->add_help_tab([
    7878            'id'      => 'dzen-faq',
    79             'title'   => 'Частые вопросы',
     79            'title'   => __('Частые вопросы', 'zhekich-feed-generator-for-dzen'),
    8080            'content' => $this->helpFaqHtml(),
    8181        ]);
    8282
    8383        $screen->set_help_sidebar(
    84             '<p><strong>Полезные ссылки</strong></p>' .
    85             '<p><a href="https://dzen.ru/help/ru/news/seamless/rss.html" target="_blank" rel="noopener">Требования Дзена к unified-RSS</a></p>'
     84            '<p><strong>' . esc_html__('Полезные ссылки', 'zhekich-feed-generator-for-dzen') . '</strong></p>' .
     85            '<p><a href="https://dzen.ru/help/ru/news/seamless/rss.html" target="_blank" rel="noopener">' . esc_html__('Требования Дзена к unified-RSS', 'zhekich-feed-generator-for-dzen') . '</a></p>'
    8686        );
    8787    }
    … …  
    8989    private function helpVariantsHtml(): string
    9090    {
    91         return '<p>Дзен принимает три схемы unified-RSS — плагин поддерживает все три:</p>'
    92             . '<p><strong>Вариант 1 (Pro).</strong> Один поток, у каждой записи свой тег &lt;contentType&gt; '
    93             . '(«Новости и канал» / «Только Новости» / «Только канал») — выбирается на самой записи через meta-box. '
    94             . 'Подходит, если разные посты должны идти в разные места.</p>'
    95             . '<p><strong>Вариант 2 (Pro).</strong> Один поток, но у каждой записи два адреса — обычная страница сайта '
    96             . 'и отдельная теневая страница-зеркало. Нужен, потому что Дзен сверяет заголовок и текст публикации '
    97             . 'с содержимым страницы по ссылке, а оформление для Новостей и для сайта иногда должно отличаться.</p>'
    98             . '<p><strong>Вариант 3 (Free).</strong> Два отдельных, жёстко размеченных потока — один целиком для Новостей, '
    99             . 'другой целиком для канала. Не требует различий между постами — самый низкий порог входа, подходит почти всем '
    100             . 'сайтам, мигрирующим с Yandex.News Feed by Teplitsa.</p>';
     91        return '<p>' . esc_html__('Дзен принимает три схемы unified-RSS — плагин поддерживает все три:', 'zhekich-feed-generator-for-dzen') . '</p>'
     92            . '<p><strong>' . esc_html__('Вариант 1 (Pro).', 'zhekich-feed-generator-for-dzen') . '</strong> '
     93            . esc_html__('Один поток, у каждой записи свой тег <contentType> («Новости и канал» / «Только Новости» / «Только канал») — выбирается на самой записи через meta-box. Подходит, если разные посты должны идти в разные места.', 'zhekich-feed-generator-for-dzen')
     94            . '</p>'
     95            . '<p><strong>' . esc_html__('Вариант 2 (Pro).', 'zhekich-feed-generator-for-dzen') . '</strong> '
     96            . esc_html__('Один поток, но у каждой записи два адреса — обычная страница сайта и отдельная теневая страница-зеркало. Нужен, потому что Дзен сверяет заголовок и текст публикации с содержимым страницы по ссылке, а оформление для Новостей и для сайта иногда должно отличаться.', 'zhekich-feed-generator-for-dzen')
     97            . '</p>'
     98            . '<p><strong>' . esc_html__('Вариант 3 (Free).', 'zhekich-feed-generator-for-dzen') . '</strong> '
     99            . esc_html__('Два отдельных, жёстко размеченных потока — один целиком для Новостей, другой целиком для канала. Не требует различий между постами — самый низкий порог входа, подходит почти всем сайтам, мигрирующим с Yandex.News Feed by Teplitsa.', 'zhekich-feed-generator-for-dzen')
     100            . '</p>';
    101101    }
    102102
    103103    private function helpFaqHtml(): string
    104104    {
    105         return '<p><strong>Нужен ли ещё какой-то RSS-плагин для работы?</strong><br>'
    106             . 'Нет, Zhekich Feed Generator for Dzen полностью самостоятелен и не зависит от других плагинов.</p>'
    107             . '<p><strong>Что делать с Yandex.News Feed by Teplitsa?</strong><br>'
    108             . 'Его можно деактивировать — этот плагин полностью закрывает его функциональность (лимит возраста, логотипы, '
    109             . 'исключение рубрик, скрытие автора) в схеме unified-RSS.</p>'
    110             . '<p><strong>Какие URL добавлять в кабинет Дзена?</strong><br>'
    111             . 'В free-режиме — оба адреса вкладки «Основное». В Pro — один из адресов вкладки «Pro», в зависимости '
    112             . 'от выбранного варианта.</p>';
     105        return '<p><strong>' . esc_html__('Нужен ли ещё какой-то RSS-плагин для работы?', 'zhekich-feed-generator-for-dzen') . '</strong><br>'
     106            . esc_html__('Нет, Zhekich Feed Generator for Dzen полностью самостоятелен и не зависит от других плагинов.', 'zhekich-feed-generator-for-dzen') . '</p>'
     107            . '<p><strong>' . esc_html__('Что делать с Yandex.News Feed by Teplitsa?', 'zhekich-feed-generator-for-dzen') . '</strong><br>'
     108            . esc_html__('Его можно деактивировать — этот плагин полностью закрывает его функциональность (лимит возраста, логотипы, исключение рубрик, скрытие автора) в схеме unified-RSS.', 'zhekich-feed-generator-for-dzen') . '</p>'
     109            . '<p><strong>' . esc_html__('Какие URL добавлять в кабинет Дзена?', 'zhekich-feed-generator-for-dzen') . '</strong><br>'
     110            . esc_html__('В free-режиме — оба адреса вкладки «Основное». В Pro — один из адресов вкладки «Pro», в зависимости от выбранного варианта.', 'zhekich-feed-generator-for-dzen') . '</p>';
    113111    }
    114112
    … …  
    143141        ?>
    144142        <div class="wrap dzen-unified-rss-settings">
    145             <h1>Zhekich Feed Generator for Dzen</h1>
     143            <h1><?php esc_html_e('Zhekich Feed Generator for Dzen', 'zhekich-feed-generator-for-dzen'); ?></h1>
    146144            <?php $this->renderVariantsOverview(); ?>
    147145
    … …  
    149147                <a href="<?php echo esc_url(add_query_arg(['page' => self::PAGE_SLUG, 'tab' => 'general'], admin_url('options-general.php'))); ?>"
    150148                   class="nav-tab <?php echo $tab === 'general' ? 'nav-tab-active' : ''; ?>">
    151                     Основное (Free)
     149                    <?php esc_html_e('Основное (Free)', 'zhekich-feed-generator-for-dzen'); ?>
    152150                </a>
    153151                <a href="<?php echo esc_url(add_query_arg(['page' => self::PAGE_SLUG, 'tab' => 'pro'], admin_url('options-general.php'))); ?>"
    … …  
    155153                    Pro
    156154                    <?php if (Options::isPro()): ?>
    157                         <span class="dzen-badge dzen-badge-active">активна</span>
     155                        <span class="dzen-badge dzen-badge-active"><?php esc_html_e('активна', 'zhekich-feed-generator-for-dzen'); ?></span>
    158156                    <?php else: ?>
    159157                        <span class="dzen-badge dzen-badge-pro">🔒</span>
    … …  
    175173        ?>
    176174        <div class="notice notice-info inline dzen-variants-overview">
    177             <p><strong>Дзен принимает три схемы unified-RSS:</strong></p>
     175            <p><strong><?php esc_html_e('Дзен принимает три схемы unified-RSS:', 'zhekich-feed-generator-for-dzen'); ?></strong></p>
    178176            <ol>
    179                 <li><strong>Вариант 1</strong> — один поток, &lt;contentType&gt; свой у каждой записи (meta-box на посте). <span class="dzen-badge dzen-badge-pro">Pro</span></li>
    180                 <li><strong>Вариант 2</strong> — один поток, у каждой записи два адреса (страница сайта + теневая копия). <span class="dzen-badge dzen-badge-pro">Pro</span></li>
    181                 <li><strong>Вариант 3</strong> — два отдельных потока: весь целиком в Новости, весь целиком в канал. Различий между постами не требует. <span class="dzen-badge dzen-badge-free">Free</span></li>
     177                <li><strong><?php esc_html_e('Вариант 1', 'zhekich-feed-generator-for-dzen'); ?></strong> — <?php esc_html_e('один поток, <contentType> свой у каждой записи (meta-box на посте).', 'zhekich-feed-generator-for-dzen'); ?> <span class="dzen-badge dzen-badge-pro">Pro</span></li>
     178                <li><strong><?php esc_html_e('Вариант 2', 'zhekich-feed-generator-for-dzen'); ?></strong> — <?php esc_html_e('один поток, у каждой записи два адреса (страница сайта + теневая копия).', 'zhekich-feed-generator-for-dzen'); ?> <span class="dzen-badge dzen-badge-pro">Pro</span></li>
     179                <li><strong><?php esc_html_e('Вариант 3', 'zhekich-feed-generator-for-dzen'); ?></strong> — <?php esc_html_e('два отдельных потока: весь целиком в Новости, весь целиком в канал. Различий между постами не требует.', 'zhekich-feed-generator-for-dzen'); ?> <span class="dzen-badge dzen-badge-free">Free</span></li>
    182180            </ol>
    183             <p>Подробнее — во вкладке <em>Справка</em> в правом верхнем углу этой страницы.</p>
     181            <p><?php
     182                printf(
     183                    /* translators: %s: "Справка" (Help) tab label */
     184                    esc_html__('Подробнее — во вкладке %s в правом верхнем углу этой страницы.', 'zhekich-feed-generator-for-dzen'),
     185                    '<em>' . esc_html__('Справка', 'zhekich-feed-generator-for-dzen') . '</em>'
     186                );
     187            ?></p>
    184188        </div>
    185189        <?php
    … …  
    197201                    <table class="form-table">
    198202                        <tr>
    199                             <th><label for="max_age_days">Максимальный возраст записей (дни)</label></th>
     203                            <th><label for="max_age_days"><?php esc_html_e('Максимальный возраст записей (дни)', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    200204                            <td>
    201205                                <input type="number" min="0" id="max_age_days"
    202206                                       name="<?php echo esc_attr($key); ?>[max_age_days]"
    203207                                       value="<?php echo esc_attr($options['max_age_days']); ?>">
    204                                 <p class="description">Только для потока Новостей — фильтр по дате публикации.</p>
    205                             </td>
    206                         </tr>
    207                         <tr>
    208                             <th><label for="logo_url">Логотип (URL)</label></th>
     208                                <p class="description"><?php esc_html_e('Только для потока Новостей — фильтр по дате публикации.', 'zhekich-feed-generator-for-dzen'); ?></p>
     209                            </td>
     210                        </tr>
     211                        <tr>
     212                            <th><label for="logo_url"><?php esc_html_e('Логотип (URL)', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    209213                            <td>
    210214                                <input type="url" class="regular-text" id="logo_url"
    … …  
    214218                        </tr>
    215219                        <tr>
    216                             <th><label for="logo_square_url">Квадратный логотип (URL)</label></th>
     220                            <th><label for="logo_square_url"><?php esc_html_e('Квадратный логотип (URL)', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    217221                            <td>
    218222                                <input type="url" class="regular-text" id="logo_square_url"
    … …  
    222226                        </tr>
    223227                        <tr>
    224                             <th><label for="exclude_taxonomy">Таксономия для исключения</label></th>
     228                            <th><label for="exclude_taxonomy"><?php esc_html_e('Таксономия для исключения', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    225229                            <td>
    226230                                <select id="exclude_taxonomy" name="<?php echo esc_attr($key); ?>[exclude_taxonomy]">
    227                                     <option value="">— не исключать —</option>
     231                                    <option value=""><?php esc_html_e('— не исключать —', 'zhekich-feed-generator-for-dzen'); ?></option>
    228232                                    <?php foreach (get_taxonomies(['public' => true], 'objects') as $taxonomy): ?>
    229233                                        <option value="<?php echo esc_attr($taxonomy->name); ?>"
    … …  
    236240                        </tr>
    237241                        <tr>
    238                             <th><label for="exclude_terms">ID термов для исключения</label></th>
     242                            <th><label for="exclude_terms"><?php esc_html_e('ID термов для исключения', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    239243                            <td>
    240244                                <input type="text" class="regular-text" id="exclude_terms"
    … …  
    242246                                       value="<?php echo esc_attr($options['exclude_terms']); ?>"
    243247                                       placeholder="671, 812">
    244                                 <p class="description">Через запятую, ID термов таксономии выше (например, «Новости компаний»).</p>
    245                             </td>
    246                         </tr>
    247                         <tr>
    248                             <th>Скрыть автора</th>
     248                                <p class="description"><?php esc_html_e('Через запятую, ID термов таксономии выше (например, «Новости компаний»).', 'zhekich-feed-generator-for-dzen'); ?></p>
     249                            </td>
     250                        </tr>
     251                        <tr>
     252                            <th><?php esc_html_e('Скрыть автора', 'zhekich-feed-generator-for-dzen'); ?></th>
    249253                            <td>
    250254                                <label>
    251255                                    <input type="checkbox" name="<?php echo esc_attr($key); ?>[hide_author]"
    252256                                        <?php checked($options['hide_author']); ?>>
    253                                     не выводить &lt;author&gt; в фиде
     257                                    <?php esc_html_e('не выводить <author> в фиде', 'zhekich-feed-generator-for-dzen'); ?>
    254258                                </label>
    255259                            </td>
    256260                        </tr>
    257261                        <tr>
    258                             <th>Включать изображение превью в текст статьи</th>
     262                            <th><?php esc_html_e('Включать изображение превью в текст статьи', 'zhekich-feed-generator-for-dzen'); ?></th>
    259263                            <td>
    260264                                <label>
    261265                                    <input type="checkbox" name="<?php echo esc_attr($key); ?>[cover_in_content]"
    262266                                        <?php checked($options['cover_in_content']); ?>>
    263                                     если в тексте статьи вообще нет картинок — добавить обложку первым элементом
     267                                    <?php esc_html_e('если в тексте статьи вообще нет картинок — добавить обложку первым элементом', 'zhekich-feed-generator-for-dzen'); ?>
    264268                                </label>
    265                                 <p class="description">Не дублирует, если в тексте уже есть хотя бы одна картинка.</p>
     269                                <p class="description"><?php esc_html_e('Не дублирует, если в тексте уже есть хотя бы одна картинка.', 'zhekich-feed-generator-for-dzen'); ?></p>
    266270                            </td>
    267271                        </tr>
    … …  
    271275
    272276                <p class="description">
    273                     Free-режим (вариант 3, всегда активен):<br>
    274                     <code><?php echo esc_html(home_url('/feed/dzen-news/')); ?></code> — Новости,
    275                     <code><?php echo esc_html(home_url('/feed/dzen/')); ?></code> — канал.
     277                    <?php esc_html_e('Free-режим (вариант 3, всегда активен):', 'zhekich-feed-generator-for-dzen'); ?><br>
     278                    <code><?php echo esc_html(home_url('/feed/dzen-news/')); ?></code> — <?php esc_html_e('Новости', 'zhekich-feed-generator-for-dzen'); ?>,
     279                    <code><?php echo esc_html(home_url('/feed/dzen/')); ?></code> — <?php esc_html_e('канал', 'zhekich-feed-generator-for-dzen'); ?>.
    276280                </p>
    277281            </div>
    … …  
    293297        <div class="postbox">
    294298            <div class="inside">
    295                 <p>Варианты 1 и 2 (по-постовый тип публикации и второй адрес на публикацию) не входят
    296                     в этот плагин. Их даёт отдельное платное дополнение
    297                     <strong>Zhekich Feed Generator for Dzen Pro</strong> — устанавливается поверх этого
    298                     плагина и не распространяется через каталог WordPress.org.</p>
    299                 <p><a class="button button-primary" href="<?php echo esc_url(self::PURCHASE_URL); ?>" target="_blank" rel="noopener">Подробнее и купить</a></p>
     299                <p><?php
     300                    printf(
     301                        /* translators: %s: "Zhekich Feed Generator for Dzen Pro" (product name, not translated) */
     302                        esc_html__('Варианты 1 и 2 (по-постовый тип публикации и второй адрес на публикацию) не входят в этот плагин. Их даёт отдельное платное дополнение %s — устанавливается поверх этого плагина и не распространяется через каталог WordPress.org.', 'zhekich-feed-generator-for-dzen'),
     303                        '<strong>Zhekich Feed Generator for Dzen Pro</strong>'
     304                    );
     305                ?></p>
     306                <p><a class="button button-primary" href="<?php echo esc_url(self::PURCHASE_URL); ?>" target="_blank" rel="noopener"><?php esc_html_e('Подробнее и купить', 'zhekich-feed-generator-for-dzen'); ?></a></p>
    300307            </div>
    301308        </div>
  • zhekich-feed-generator-for-dzen/tags/1.2.7/readme.txt

    r3618454 r3618717  
    66Tested up to: 7.0
    77Requires PHP: 7.4
    8 Stable tag: 1.2.6
     8Stable tag: 1.2.7
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    9090== Changelog ==
    9191
     92= 1.2.7 =
     93* Properly internationalized the plugin: all admin UI strings now go through `__()`/`esc_html__()`
     94  with the `zhekich-feed-generator-for-dzen` text domain (Russian as the source/default text,
     95  matching the plugin's actual audience), plus `load_plugin_textdomain()` for reliability outside
     96  WordPress.org's own translation loading.
     97
    9298= 1.2.6 =
    9399* No code changes. Added plugin page assets (icon, banner, screenshots) and documented the
  • zhekich-feed-generator-for-dzen/tags/1.2.7/zhekich-feed-generator-for-dzen.php

    r3618454 r3618717  
    44 * Plugin URI: https://github.com/eugenekrukov/zhekich-feed-generator-for-dzen
    55 * Description: Самостоятельный генератор unified-RSS фида для Дзена (Новости + канал) по правилам от 13.07.2026 (dzen.ru/help/ru/news/seamless/rss.html). Замена для заброшенного Yandex.News Feed by Teplitsa.
    6  * Version: 1.2.6
     6 * Version: 1.2.7
    77 * Requires PHP: 7.4
    88 * Author: Eugene Krukov
    … …  
    1616define('DZEN_UNIFIED_RSS_DIR', plugin_dir_path(__FILE__));
    1717define('DZEN_UNIFIED_RSS_URL', plugin_dir_url(__FILE__));
    18 define('DZEN_UNIFIED_RSS_VERSION', '1.2.6');
     18define('DZEN_UNIFIED_RSS_VERSION', '1.2.7');
    1919
    2020spl_autoload_register(static function (string $class): void {
    … …  
    3737register_deactivation_hook(__FILE__, 'flush_rewrite_rules');
    3838
     39add_action('init', static function (): void {
     40    load_plugin_textdomain('zhekich-feed-generator-for-dzen', false, dirname(plugin_basename(__FILE__)) . '/languages');
     41});
     42
    3943add_action('plugins_loaded', static function (): void {
    4044    \DzenUnifiedRss\Plugin::instance()->init();
  • zhekich-feed-generator-for-dzen/trunk/includes/Admin/SettingsPage.php

    r3618425 r3618717  
    2727    {
    2828        $hook = add_options_page(
    29             'Zhekich Feed Generator for Dzen',
    30             'Zhekich Feed Generator for Dzen',
     29            __('Zhekich Feed Generator for Dzen', 'zhekich-feed-generator-for-dzen'),
     30            __('Zhekich Feed Generator for Dzen', 'zhekich-feed-generator-for-dzen'),
    3131            'manage_options',
    3232            self::PAGE_SLUG,
    … …  
    7171        $screen->add_help_tab([
    7272            'id'      => 'dzen-variants',
    73             'title'   => 'Варианты unified-RSS',
     73            'title'   => __('Варианты unified-RSS', 'zhekich-feed-generator-for-dzen'),
    7474            'content' => $this->helpVariantsHtml(),
    7575        ]);
    … …  
    7777        $screen->add_help_tab([
    7878            'id'      => 'dzen-faq',
    79             'title'   => 'Частые вопросы',
     79            'title'   => __('Частые вопросы', 'zhekich-feed-generator-for-dzen'),
    8080            'content' => $this->helpFaqHtml(),
    8181        ]);
    8282
    8383        $screen->set_help_sidebar(
    84             '<p><strong>Полезные ссылки</strong></p>' .
    85             '<p><a href="https://dzen.ru/help/ru/news/seamless/rss.html" target="_blank" rel="noopener">Требования Дзена к unified-RSS</a></p>'
     84            '<p><strong>' . esc_html__('Полезные ссылки', 'zhekich-feed-generator-for-dzen') . '</strong></p>' .
     85            '<p><a href="https://dzen.ru/help/ru/news/seamless/rss.html" target="_blank" rel="noopener">' . esc_html__('Требования Дзена к unified-RSS', 'zhekich-feed-generator-for-dzen') . '</a></p>'
    8686        );
    8787    }
    … …  
    8989    private function helpVariantsHtml(): string
    9090    {
    91         return '<p>Дзен принимает три схемы unified-RSS — плагин поддерживает все три:</p>'
    92             . '<p><strong>Вариант 1 (Pro).</strong> Один поток, у каждой записи свой тег &lt;contentType&gt; '
    93             . '(«Новости и канал» / «Только Новости» / «Только канал») — выбирается на самой записи через meta-box. '
    94             . 'Подходит, если разные посты должны идти в разные места.</p>'
    95             . '<p><strong>Вариант 2 (Pro).</strong> Один поток, но у каждой записи два адреса — обычная страница сайта '
    96             . 'и отдельная теневая страница-зеркало. Нужен, потому что Дзен сверяет заголовок и текст публикации '
    97             . 'с содержимым страницы по ссылке, а оформление для Новостей и для сайта иногда должно отличаться.</p>'
    98             . '<p><strong>Вариант 3 (Free).</strong> Два отдельных, жёстко размеченных потока — один целиком для Новостей, '
    99             . 'другой целиком для канала. Не требует различий между постами — самый низкий порог входа, подходит почти всем '
    100             . 'сайтам, мигрирующим с Yandex.News Feed by Teplitsa.</p>';
     91        return '<p>' . esc_html__('Дзен принимает три схемы unified-RSS — плагин поддерживает все три:', 'zhekich-feed-generator-for-dzen') . '</p>'
     92            . '<p><strong>' . esc_html__('Вариант 1 (Pro).', 'zhekich-feed-generator-for-dzen') . '</strong> '
     93            . esc_html__('Один поток, у каждой записи свой тег <contentType> («Новости и канал» / «Только Новости» / «Только канал») — выбирается на самой записи через meta-box. Подходит, если разные посты должны идти в разные места.', 'zhekich-feed-generator-for-dzen')
     94            . '</p>'
     95            . '<p><strong>' . esc_html__('Вариант 2 (Pro).', 'zhekich-feed-generator-for-dzen') . '</strong> '
     96            . esc_html__('Один поток, но у каждой записи два адреса — обычная страница сайта и отдельная теневая страница-зеркало. Нужен, потому что Дзен сверяет заголовок и текст публикации с содержимым страницы по ссылке, а оформление для Новостей и для сайта иногда должно отличаться.', 'zhekich-feed-generator-for-dzen')
     97            . '</p>'
     98            . '<p><strong>' . esc_html__('Вариант 3 (Free).', 'zhekich-feed-generator-for-dzen') . '</strong> '
     99            . esc_html__('Два отдельных, жёстко размеченных потока — один целиком для Новостей, другой целиком для канала. Не требует различий между постами — самый низкий порог входа, подходит почти всем сайтам, мигрирующим с Yandex.News Feed by Teplitsa.', 'zhekich-feed-generator-for-dzen')
     100            . '</p>';
    101101    }
    102102
    103103    private function helpFaqHtml(): string
    104104    {
    105         return '<p><strong>Нужен ли ещё какой-то RSS-плагин для работы?</strong><br>'
    106             . 'Нет, Zhekich Feed Generator for Dzen полностью самостоятелен и не зависит от других плагинов.</p>'
    107             . '<p><strong>Что делать с Yandex.News Feed by Teplitsa?</strong><br>'
    108             . 'Его можно деактивировать — этот плагин полностью закрывает его функциональность (лимит возраста, логотипы, '
    109             . 'исключение рубрик, скрытие автора) в схеме unified-RSS.</p>'
    110             . '<p><strong>Какие URL добавлять в кабинет Дзена?</strong><br>'
    111             . 'В free-режиме — оба адреса вкладки «Основное». В Pro — один из адресов вкладки «Pro», в зависимости '
    112             . 'от выбранного варианта.</p>';
     105        return '<p><strong>' . esc_html__('Нужен ли ещё какой-то RSS-плагин для работы?', 'zhekich-feed-generator-for-dzen') . '</strong><br>'
     106            . esc_html__('Нет, Zhekich Feed Generator for Dzen полностью самостоятелен и не зависит от других плагинов.', 'zhekich-feed-generator-for-dzen') . '</p>'
     107            . '<p><strong>' . esc_html__('Что делать с Yandex.News Feed by Teplitsa?', 'zhekich-feed-generator-for-dzen') . '</strong><br>'
     108            . esc_html__('Его можно деактивировать — этот плагин полностью закрывает его функциональность (лимит возраста, логотипы, исключение рубрик, скрытие автора) в схеме unified-RSS.', 'zhekich-feed-generator-for-dzen') . '</p>'
     109            . '<p><strong>' . esc_html__('Какие URL добавлять в кабинет Дзена?', 'zhekich-feed-generator-for-dzen') . '</strong><br>'
     110            . esc_html__('В free-режиме — оба адреса вкладки «Основное». В Pro — один из адресов вкладки «Pro», в зависимости от выбранного варианта.', 'zhekich-feed-generator-for-dzen') . '</p>';
    113111    }
    114112
    … …  
    143141        ?>
    144142        <div class="wrap dzen-unified-rss-settings">
    145             <h1>Zhekich Feed Generator for Dzen</h1>
     143            <h1><?php esc_html_e('Zhekich Feed Generator for Dzen', 'zhekich-feed-generator-for-dzen'); ?></h1>
    146144            <?php $this->renderVariantsOverview(); ?>
    147145
    … …  
    149147                <a href="<?php echo esc_url(add_query_arg(['page' => self::PAGE_SLUG, 'tab' => 'general'], admin_url('options-general.php'))); ?>"
    150148                   class="nav-tab <?php echo $tab === 'general' ? 'nav-tab-active' : ''; ?>">
    151                     Основное (Free)
     149                    <?php esc_html_e('Основное (Free)', 'zhekich-feed-generator-for-dzen'); ?>
    152150                </a>
    153151                <a href="<?php echo esc_url(add_query_arg(['page' => self::PAGE_SLUG, 'tab' => 'pro'], admin_url('options-general.php'))); ?>"
    … …  
    155153                    Pro
    156154                    <?php if (Options::isPro()): ?>
    157                         <span class="dzen-badge dzen-badge-active">активна</span>
     155                        <span class="dzen-badge dzen-badge-active"><?php esc_html_e('активна', 'zhekich-feed-generator-for-dzen'); ?></span>
    158156                    <?php else: ?>
    159157                        <span class="dzen-badge dzen-badge-pro">🔒</span>
    … …  
    175173        ?>
    176174        <div class="notice notice-info inline dzen-variants-overview">
    177             <p><strong>Дзен принимает три схемы unified-RSS:</strong></p>
     175            <p><strong><?php esc_html_e('Дзен принимает три схемы unified-RSS:', 'zhekich-feed-generator-for-dzen'); ?></strong></p>
    178176            <ol>
    179                 <li><strong>Вариант 1</strong> — один поток, &lt;contentType&gt; свой у каждой записи (meta-box на посте). <span class="dzen-badge dzen-badge-pro">Pro</span></li>
    180                 <li><strong>Вариант 2</strong> — один поток, у каждой записи два адреса (страница сайта + теневая копия). <span class="dzen-badge dzen-badge-pro">Pro</span></li>
    181                 <li><strong>Вариант 3</strong> — два отдельных потока: весь целиком в Новости, весь целиком в канал. Различий между постами не требует. <span class="dzen-badge dzen-badge-free">Free</span></li>
     177                <li><strong><?php esc_html_e('Вариант 1', 'zhekich-feed-generator-for-dzen'); ?></strong> — <?php esc_html_e('один поток, <contentType> свой у каждой записи (meta-box на посте).', 'zhekich-feed-generator-for-dzen'); ?> <span class="dzen-badge dzen-badge-pro">Pro</span></li>
     178                <li><strong><?php esc_html_e('Вариант 2', 'zhekich-feed-generator-for-dzen'); ?></strong> — <?php esc_html_e('один поток, у каждой записи два адреса (страница сайта + теневая копия).', 'zhekich-feed-generator-for-dzen'); ?> <span class="dzen-badge dzen-badge-pro">Pro</span></li>
     179                <li><strong><?php esc_html_e('Вариант 3', 'zhekich-feed-generator-for-dzen'); ?></strong> — <?php esc_html_e('два отдельных потока: весь целиком в Новости, весь целиком в канал. Различий между постами не требует.', 'zhekich-feed-generator-for-dzen'); ?> <span class="dzen-badge dzen-badge-free">Free</span></li>
    182180            </ol>
    183             <p>Подробнее — во вкладке <em>Справка</em> в правом верхнем углу этой страницы.</p>
     181            <p><?php
     182                printf(
     183                    /* translators: %s: "Справка" (Help) tab label */
     184                    esc_html__('Подробнее — во вкладке %s в правом верхнем углу этой страницы.', 'zhekich-feed-generator-for-dzen'),
     185                    '<em>' . esc_html__('Справка', 'zhekich-feed-generator-for-dzen') . '</em>'
     186                );
     187            ?></p>
    184188        </div>
    185189        <?php
    … …  
    197201                    <table class="form-table">
    198202                        <tr>
    199                             <th><label for="max_age_days">Максимальный возраст записей (дни)</label></th>
     203                            <th><label for="max_age_days"><?php esc_html_e('Максимальный возраст записей (дни)', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    200204                            <td>
    201205                                <input type="number" min="0" id="max_age_days"
    202206                                       name="<?php echo esc_attr($key); ?>[max_age_days]"
    203207                                       value="<?php echo esc_attr($options['max_age_days']); ?>">
    204                                 <p class="description">Только для потока Новостей — фильтр по дате публикации.</p>
    205                             </td>
    206                         </tr>
    207                         <tr>
    208                             <th><label for="logo_url">Логотип (URL)</label></th>
     208                                <p class="description"><?php esc_html_e('Только для потока Новостей — фильтр по дате публикации.', 'zhekich-feed-generator-for-dzen'); ?></p>
     209                            </td>
     210                        </tr>
     211                        <tr>
     212                            <th><label for="logo_url"><?php esc_html_e('Логотип (URL)', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    209213                            <td>
    210214                                <input type="url" class="regular-text" id="logo_url"
    … …  
    214218                        </tr>
    215219                        <tr>
    216                             <th><label for="logo_square_url">Квадратный логотип (URL)</label></th>
     220                            <th><label for="logo_square_url"><?php esc_html_e('Квадратный логотип (URL)', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    217221                            <td>
    218222                                <input type="url" class="regular-text" id="logo_square_url"
    … …  
    222226                        </tr>
    223227                        <tr>
    224                             <th><label for="exclude_taxonomy">Таксономия для исключения</label></th>
     228                            <th><label for="exclude_taxonomy"><?php esc_html_e('Таксономия для исключения', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    225229                            <td>
    226230                                <select id="exclude_taxonomy" name="<?php echo esc_attr($key); ?>[exclude_taxonomy]">
    227                                     <option value="">— не исключать —</option>
     231                                    <option value=""><?php esc_html_e('— не исключать —', 'zhekich-feed-generator-for-dzen'); ?></option>
    228232                                    <?php foreach (get_taxonomies(['public' => true], 'objects') as $taxonomy): ?>
    229233                                        <option value="<?php echo esc_attr($taxonomy->name); ?>"
    … …  
    236240                        </tr>
    237241                        <tr>
    238                             <th><label for="exclude_terms">ID термов для исключения</label></th>
     242                            <th><label for="exclude_terms"><?php esc_html_e('ID термов для исключения', 'zhekich-feed-generator-for-dzen'); ?></label></th>
    239243                            <td>
    240244                                <input type="text" class="regular-text" id="exclude_terms"
    … …  
    242246                                       value="<?php echo esc_attr($options['exclude_terms']); ?>"
    243247                                       placeholder="671, 812">
    244                                 <p class="description">Через запятую, ID термов таксономии выше (например, «Новости компаний»).</p>
    245                             </td>
    246                         </tr>
    247                         <tr>
    248                             <th>Скрыть автора</th>
     248                                <p class="description"><?php esc_html_e('Через запятую, ID термов таксономии выше (например, «Новости компаний»).', 'zhekich-feed-generator-for-dzen'); ?></p>
     249                            </td>
     250                        </tr>
     251                        <tr>
     252                            <th><?php esc_html_e('Скрыть автора', 'zhekich-feed-generator-for-dzen'); ?></th>
    249253                            <td>
    250254                                <label>
    251255                                    <input type="checkbox" name="<?php echo esc_attr($key); ?>[hide_author]"
    252256                                        <?php checked($options['hide_author']); ?>>
    253                                     не выводить &lt;author&gt; в фиде
     257                                    <?php esc_html_e('не выводить <author> в фиде', 'zhekich-feed-generator-for-dzen'); ?>
    254258                                </label>
    255259                            </td>
    256260                        </tr>
    257261                        <tr>
    258                             <th>Включать изображение превью в текст статьи</th>
     262                            <th><?php esc_html_e('Включать изображение превью в текст статьи', 'zhekich-feed-generator-for-dzen'); ?></th>
    259263                            <td>
    260264                                <label>
    261265                                    <input type="checkbox" name="<?php echo esc_attr($key); ?>[cover_in_content]"
    262266                                        <?php checked($options['cover_in_content']); ?>>
    263                                     если в тексте статьи вообще нет картинок — добавить обложку первым элементом
     267                                    <?php esc_html_e('если в тексте статьи вообще нет картинок — добавить обложку первым элементом', 'zhekich-feed-generator-for-dzen'); ?>
    264268                                </label>
    265                                 <p class="description">Не дублирует, если в тексте уже есть хотя бы одна картинка.</p>
     269                                <p class="description"><?php esc_html_e('Не дублирует, если в тексте уже есть хотя бы одна картинка.', 'zhekich-feed-generator-for-dzen'); ?></p>
    266270                            </td>
    267271                        </tr>
    … …  
    271275
    272276                <p class="description">
    273                     Free-режим (вариант 3, всегда активен):<br>
    274                     <code><?php echo esc_html(home_url('/feed/dzen-news/')); ?></code> — Новости,
    275                     <code><?php echo esc_html(home_url('/feed/dzen/')); ?></code> — канал.
     277                    <?php esc_html_e('Free-режим (вариант 3, всегда активен):', 'zhekich-feed-generator-for-dzen'); ?><br>
     278                    <code><?php echo esc_html(home_url('/feed/dzen-news/')); ?></code> — <?php esc_html_e('Новости', 'zhekich-feed-generator-for-dzen'); ?>,
     279                    <code><?php echo esc_html(home_url('/feed/dzen/')); ?></code> — <?php esc_html_e('канал', 'zhekich-feed-generator-for-dzen'); ?>.
    276280                </p>
    277281            </div>
    … …  
    293297        <div class="postbox">
    294298            <div class="inside">
    295                 <p>Варианты 1 и 2 (по-постовый тип публикации и второй адрес на публикацию) не входят
    296                     в этот плагин. Их даёт отдельное платное дополнение
    297                     <strong>Zhekich Feed Generator for Dzen Pro</strong> — устанавливается поверх этого
    298                     плагина и не распространяется через каталог WordPress.org.</p>
    299                 <p><a class="button button-primary" href="<?php echo esc_url(self::PURCHASE_URL); ?>" target="_blank" rel="noopener">Подробнее и купить</a></p>
     299                <p><?php
     300                    printf(
     301                        /* translators: %s: "Zhekich Feed Generator for Dzen Pro" (product name, not translated) */
     302                        esc_html__('Варианты 1 и 2 (по-постовый тип публикации и второй адрес на публикацию) не входят в этот плагин. Их даёт отдельное платное дополнение %s — устанавливается поверх этого плагина и не распространяется через каталог WordPress.org.', 'zhekich-feed-generator-for-dzen'),
     303                        '<strong>Zhekich Feed Generator for Dzen Pro</strong>'
     304                    );
     305                ?></p>
     306                <p><a class="button button-primary" href="<?php echo esc_url(self::PURCHASE_URL); ?>" target="_blank" rel="noopener"><?php esc_html_e('Подробнее и купить', 'zhekich-feed-generator-for-dzen'); ?></a></p>
    300307            </div>
    301308        </div>
  • zhekich-feed-generator-for-dzen/trunk/readme.txt

    r3618454 r3618717  
    66Tested up to: 7.0
    77Requires PHP: 7.4
    8 Stable tag: 1.2.6
     8Stable tag: 1.2.7
    99License: GPLv2 or later
    1010License URI: https://www.gnu.org/licenses/gpl-2.0.html
    … …  
    9090== Changelog ==
    9191
     92= 1.2.7 =
     93* Properly internationalized the plugin: all admin UI strings now go through `__()`/`esc_html__()`
     94  with the `zhekich-feed-generator-for-dzen` text domain (Russian as the source/default text,
     95  matching the plugin's actual audience), plus `load_plugin_textdomain()` for reliability outside
     96  WordPress.org's own translation loading.
     97
    9298= 1.2.6 =
    9399* No code changes. Added plugin page assets (icon, banner, screenshots) and documented the
  • zhekich-feed-generator-for-dzen/trunk/zhekich-feed-generator-for-dzen.php

    r3618454 r3618717  
    44 * Plugin URI: https://github.com/eugenekrukov/zhekich-feed-generator-for-dzen
    55 * Description: Самостоятельный генератор unified-RSS фида для Дзена (Новости + канал) по правилам от 13.07.2026 (dzen.ru/help/ru/news/seamless/rss.html). Замена для заброшенного Yandex.News Feed by Teplitsa.
    6  * Version: 1.2.6
     6 * Version: 1.2.7
    77 * Requires PHP: 7.4
    88 * Author: Eugene Krukov
    … …  
    1616define('DZEN_UNIFIED_RSS_DIR', plugin_dir_path(__FILE__));
    1717define('DZEN_UNIFIED_RSS_URL', plugin_dir_url(__FILE__));
    18 define('DZEN_UNIFIED_RSS_VERSION', '1.2.6');
     18define('DZEN_UNIFIED_RSS_VERSION', '1.2.7');
    1919
    2020spl_autoload_register(static function (string $class): void {
    … …  
    3737register_deactivation_hook(__FILE__, 'flush_rewrite_rules');
    3838
     39add_action('init', static function (): void {
     40    load_plugin_textdomain('zhekich-feed-generator-for-dzen', false, dirname(plugin_basename(__FILE__)) . '/languages');
     41});
     42
    3943add_action('plugins_loaded', static function (): void {
    4044    \DzenUnifiedRss\Plugin::instance()->init();
Note: See TracChangeset for help on using the changeset viewer.