Перевести тему

Как перевести вашу тему Publii на другой язык

Создать веб-сайт на вашем родном языке с помощью Publii достаточно просто; просто создайте контент! Но если вы это сделаете, то быстро поймете, что небольшой проблемы нет; небольшие дополнительные фрагменты текста, прилагаемые к теме, такие как текст "Опубликовано в", который вы видите вверху публикации, или надписи кнопок на кнопках социальных сетей, не отображаются в редакторе контента или в общих настройках Publii. Это делает их некоторой помехой на неанглоязычных сайтах, поскольку у вас всегда будет несколько случайных английских слов, портящих вашу эстетику..

Итак, почему нет опций для изменения этих фрагментов текста? Это потому, что эти элементы фактически создаются и определяются в коде темы, а не в основном приложении Publii или пользовательском контенте. Поскольку каждая тема уникальна, невозможно создать стандартизированный вариант изменения этого текста без серьезного ограничения творчества разработчиков, что мы не хотим поощрять!

К счастью, с момента выхода бета-версии 3 в Publii появилась новая функция; поддержка языковых файлов в темах, которая позволяет разработчикам тем определять текст своей темы с помощью файла .json, а не жестко кодировать весь текст непосредственно в теме. Затем этот файл можно заменить пользовательским файлом, переводя язык, не затрагивая исходные файлы. Если вы не знакомы с .вы обнаружите, что изменение файла json и, следовательно, перевод темы на ваш местный язык аналогичны редактированию стандартного текстового файла и не вызовут никаких сложностей вообще!

Языковой файл темы Publii

С этим новым форматом такие вещи, как текст на кнопках в теме, определяются в языковом файле, который отделен от кода темы. Формат этих языковых файлов - themeName.lang.json, и файл будет сохранен в папке темы в расположении Publii files (это определено в глобальных настройках для Publii). Итак, если бы мы хотели найти языковой файл для новой темы Portfolio, мы бы сначала зашли в нашу папку с файлами Publii, затем открыли папку темы → портфолио, где мы найдем языковой файл:

Языковой файл Publii theme

Теперь, чтобы перевести текст темы, технически мы могли бы просто открыть языковой файл и отредактировать его напрямую, но есть проблема; при обновлении темы языковой файл будет перезаписан, и все наши изменения будут потеряны. Вместо этого нам нужно более постоянное решение, которое Publii уже предоставляет.

Вместо того, чтобы редактировать файл напрямую, мы можем создать копию файла, уникального для нашего веб-сайта, который Publii может использовать для переопределения языкового файла по умолчанию. Давайте рассмотрим это шаг за шагом.

Перевод темы Publii

  1. Во-первых, подобрать языковой файл для темы, которые вы хотите перевести, как уже упоминалось ранее, это будет в Publii файлы → темы → themeName папку, где Publii файлов - это путь, определенный в местах параметр Publii Глобальные параметры. имя файла будет называться themeName.lang.json, где themeName - это название используемой вами темы, например "portfolio.lang.json".

  2. Создайте копию языкового файла, оставив оригинал нетронутым там, где он есть. Поместите копию в вашу папку sites /siteName / input /languages, где siteName - это название вашего сайта, определенное в Publii (убедитесь, что имя файла точно совпадает с исходным языковым файлом). Вы можете обнаружить, что в вашей папке input нет папки с языками; если это так, просто создайте папку вручную и поместите языковой файл внутрь.

  3. Откройте копию языкового файла в выбранном вами текстовом редакторе; даже Блокнот будет работать! Внутри вы увидите некоторый код; каждая строка будет либо категорией для сортировки текста, который можно игнорировать, либо текстом перевода. Текст перевода будет иметь следующий формат: "placeholderText": "Переведенный текст",. Текст слева от двоеточия - это текст-заполнитель, который мы можем игнорировать. Текст справа от двоеточия - это фактический текст, который будет отображаться на веб-сайте.

    {
       "partials": {
          "cookiebar": {
             "close": "Close"
          },
          "disqus": {
             "noscript1": "Please enable JavaScript to view the",
             "noscript2": "comments powered by Disqus."
          },
          "menu": {
             "label": "Menu"
          },
          "pagination": {
             "prev": "Previous",
             "next": "Next"
          },
          "shareButtons": {
             "shareWithFacebook": "Share with Facebook",
             "shareWithTwitter": "Share with Twitter",
             "shareWithGooglePlus": "Share with Google Plus",
             "shareWithPinterest": "Share with Pinterest",
             "shareWithStumbleUpon": "Share with StumbleUpon",
             "shareWithLinkedIn": "Share with LinkedIn",
             "shareWithBuffer": "Share with Buffer"
          }
       },
       "slider": {
          "button": "View project",
          "slide": "Slide %s"
       },
       "post": {
          "publishedBy": "By",
          "publishedOn": "Published on",
          "previousPost": "Previous Post",
          "nextPost": "Next Post"
       },
       "common": {
          "readmore": "View more"
       }
    }
    
  4. Переводите каждый фрагмент текста справа от двоеточия; не изменяйте текст категории или текст слева от двоеточия в каждой строке, поскольку они используются в коде темы, чтобы указать Publii, какой текст заменить:

     {
       "partials": {
          "cookiebar": {
             "close": "Your close button text here"
          },
          "disqus": {
             "noscript1": "Your enable Javascript message here",
             "noscript2": "Your Disqus intro text here"
          },
          "menu": {
             "label": "Your menu label here"
          },
          "pagination": {
             "prev": "Your previous button text here",
             "next": "Your next button text here"
          },
          "shareButtons": {
             "shareWithFacebook": "Your Facebook share button text here",
             "shareWithTwitter": "Your Twitter share button text here",
             "shareWithGooglePlus": "Your Google+ share button text here",
             "shareWithPinterest": "Your Pinterest share button text here",
             "shareWithStumbleUpon": "Your StumbleUpon share button text here",
             "shareWithLinkedIn": "Your LinkedIn share button text here",
             "shareWithBuffer": "Your Buffer share button text here"
          }
       },
       "slider": {
          "button": "Your slide button text here",
          "slide": "Your slide text here"
       },
       "post": {
          "publishedBy": "Your published by text here",
          "publishedOn": "Your publication date text here",
          "previousPost": "Your previous post button text here",
          "nextPost": "Your next post button text here"
       },
       "common": {
          "readmore": "Your readmore button text here"
       }
    }
    
  5. Заменив текст вашим собственным переводом или интерпретацией, сохраните изменения в файле. Теперь, когда Publii создает веб-сайт для загрузки, созданный вами новый языковой файл будет использоваться для переопределения параметров языкового файла по умолчанию, и вы увидите переведенный текст, отображаемый на вашем веб-сайте в режиме реального времени или для предварительного просмотра.

Для продвинутых пользователей

Более продвинутым пользователям следует отметить две вещи; нет необходимости включать весь код из исходного языкового файла в переопределяемую версию файла. Вместо этого вы можете включить только строку, которую хотите изменить. Итак, если бы мы хотели изменить только метку кнопки для слайд-шоу на главной странице в теме портфолио, мы могли бы создать языковой файл со следующим кодом внутри:

{
   "partials": {   
      "menu": {
         "label": "Menu"
      }
   },
   "slider": {
      "button": "View project",
      "slide": "Slide %s"
   }
}
 
Это переопределит текст кнопки, оставив остальное нетронутым. Во-вторых, важно отметить назначение текста %s, который можно увидеть в некоторых текстах перевода, например, в примере выше; "слайд %s". Текст %s представляет переменную, которая должна быть взята из другой части Publii. Например, текстовая строка может гласить "Добро пожаловать на мой сайт, от %s", а на рабочем сайте текст %s будет заменен именем автора, так что получится "Добро пожаловать на мой сайт, от AuthorName". Символ %s представляет собой число, символ или текстовую строку, которые могут быть заменены другими переменными, поэтому перед их изменением важно проверить, что это за отображаемая переменная, чтобы убедиться в соответствии вашего перевода.

Подробнее об этом можно прочитать ниже, в переменной %s

Как работает языковой файл .json

Итак, вы разобрались, как делать переводы, но хотели бы узнать немного больше о том, как это работает? Читайте дальше! В стандартной теме веб-сайта дополнительный текст жестко запрограммирован и спрятан в файлах темы, что затрудняет доступ к нему. Конечно, если у вас есть небольшие практические знания о тематизации или коде, то изменить ее чрезвычайно легко непосредственно в файлах. Однако в большинстве случаев это неэффективное решение; обычный человек не будет обладать большими знаниями о программировании, потому что это не обязательно; в конце концов, именно поэтому существуют приложения, подобные Publii! Во-вторых, всякий раз, когда файлы темы обновляются, изменения перезаписываются, и текст возвращается к значению по умолчанию.

Таким образом, очевидно, что требуется более простой и удобный для пользователя метод перевода тем. В случае с Publii вместо жесткого кодирования текста в темах мы используем язык .файл json, который действует немного как своего рода кодовая книга. По сути, вместо того, чтобы помещать текст в код темы, мы поместим фрагмент текста-заполнителя; а в языковом файле мы определим, чем следует заменить каждый бит текста-заполнителя. Затем, когда Publii создаст файлы для веб-сайта, он будет искать весь текст-заполнитель и заменять их соответствующими переводами из языкового файла. Думайте об этом как о чтении фрагмента алгебры; формула типа "x + y = z" сама по себе ничего не значит, но если вы определяете и "x", и "y", то формулу можно вычислить. В теме Publii "x" и "y" будут текстом-заполнителем, который затем определяется в языковом файле.

Структура языкового файла

Лучший способ понять языковой файл - это ознакомиться с содержимым; несмотря на расширение .json, вы можете просмотреть файл практически в любом текстовом редакторе, даже в Блокноте! Давайте откроем файл portfolio.lang.json, который можно найти в папке Publii → темы → портфолио:

{
   "partials": {
      "cookiebar": {
         "close": "Close"
      },
      "disqus": {
         "noscript1": "Please enable JavaScript to view the",
         "noscript2": "comments powered by Disqus."
      },
      "menu": {
         "label": "Menu"
      },
      "pagination": {
         "prev": "Previous",
         "next": "Next"
      },
      "shareButtons": {
         "shareWithFacebook": "Share with Facebook",
         "shareWithTwitter": "Share with Twitter",
         "shareWithGooglePlus": "Share with Google Plus",
         "shareWithPinterest": "Share with Pinterest",
         "shareWithStumbleUpon": "Share with StumbleUpon",
         "shareWithLinkedIn": "Share with LinkedIn",
         "shareWithBuffer": "Share with Buffer"
      }
   },
   "slider": {
      "button": "View project",
      "slide": "Slide %s"
   },
   "post": {
      "publishedBy": "By",
      "publishedOn": "Published on",
      "previousPost": "Previous Post",
      "nextPost": "Next Post"
   },
   "common": {
      "readmore": "View more"
   }
}
 
Как мы можем видеть в приведенном выше коде, существует несколько групп текста, разделенных фигурными скобками. Каждая строка текста может быть отнесена к одному из двух типов; либо это категория, либо заполнитель с переводом. Категория используется для разделения переводов на группы, чтобы их было легко найти, и при необходимости в каждой категории могут быть подкатегории. В приведенном выше примере мы можем видеть, что первая строка представляет собой категорию, partials, которая содержит несколько подкатегорий; cookiebardisqusmenupagination и shareButtons. Легко определить, является ли строка категорией, потому что в ней будет только непрерывная текстовая строка в кавычках, за которой следует двоеточие, например, "newCategory":. Обратите внимание, что переводы не обязательно группировать по категориям; это просто хорошая практика, чтобы другие пользователи, работающие с кодом и переводами, могли легко найти то, что им нужно.

Второй тип содержимого - это заполнитель с переводами; это настоящая суть файла. В отличие от категорий, ссылки и переводы будут содержать два отдельных слова в кавычках, слева и справа от двоеточия, вот так: "placeholderText": "translationText". Текст слева от двоеточия (в данном случае "placeholderText") - это заполнитель, который будет введен в код темы для замены Publii при создании веб-сайта. Текст справа от двоеточия ("translationText") - это текст, который Publii будет использовать для замены текста-заполнителя на всем веб-сайте.

Переопределяющий языковой файл

Поскольку основные файлы темы будут заменяться с каждым обновлением, была добавлена дополнительная функция, разрешающая переводы; Переопределяет. Создав файл с тем же именем, что и языковой файл, но поместив его в папку sites/websiteName / input /languages (где websiteName - это название сайта, определенное во внутренней части приложения Publii), вы можете добавить свои собственные переводы, которые заменят языковой файл, как описано в разделе перевода ранее в этой статье. Когда Publii создает страницы для вашего сайта, он сначала берет текст-заполнитель из языкового файла, но затем проверяет наличие файла переопределения. Если она будет найдена, она найдет любые текстовые строки перевода для замены в файле переопределения и использует их для замены текста, который был взят из языкового файла. Это позволит вам изменять текст, не возясь с основными файлами и не беспокоясь о потере изменений при выходе обновления.

Переменная %s

%s, который вы иногда видите в тексте, представляет собой еще один фрагмент текста-заполнителя, но в этом случае он будет извлекать переменную, которая может быть динамической или изменяемой. Допустим, что тема содержит фрагмент текста на первой странице, который гласит "Привет от людей с websiteName", где websiteName - это название веб-сайта. У каждого пользователя, устанавливающего эту тему, будет свой веб-сайт, поэтому они не могут просто жестко прописать название определенного веб-сайта в теме. Вместо этого они будут использовать элемент %s в языковом файле, затем в коде темы они определят, какой должна быть переменная, например, @website.name. Таким образом, когда Publii создаст текущий код сайта, он автоматически заменит %s переменной website name, которая будет разной для каждого веб-сайта.

Например, на странице Тегов вместо %s давайте поставим количество всех тегов. Для этого мы будем использовать тег {{tagsNumber}} (https://getpublii.com/dev/tags-page-tags/#templatespecific-tags).

Языковой файл:

{
   "tags": {
		"pageTitle": "Tags",
		"description": "Collection of all %s tags"	
   },
}
в файле tags.hbs укажите следующим образом:
{{ translate "tags.description" tagsNumber }}

в результате мы получим: "Коллекция всех 5 тегов", где 5 - количество всех доступных тегов.

Subscribe

Get the latest news, updates and more delivered directly to your email inbox

...