【问题标题】:Locale specific date in jekylljekyll 中的区域设置特定日期
【发布时间】:2012-05-29 17:00:06
【问题描述】:

我正在尝试使用 jekyll 来创建网站。我正在使用 jekyll-bootstrap。

默认配置具有页面存档,其中所有帖子都按发布日期的年份和月份分组列出。目前月份以英文显示。我查看了代码,这是负责放置日期的摘录:

{% capture this_month %}{{ post.date | date: "%B" }}{% endcapture %}

我找到了很多信息here,所以有一种方法可以指定所需的语言环境。但是你怎么能让 jekyll 尊重它呢?只需添加

default_locale: "lt"

_config.yml自然不行。

【问题讨论】:

    标签: jekyll liquid date-formatting


    【解决方案1】:

    您可以使用 Liquid 日期格式覆盖当前月份:

    {% assign m = page.date | date: "%-m" %}
    {{ page.date | date: "%-d" }}
    {% case m %}
      {% when '1' %}Januar
      {% when '2' %}Februar
      {% when '3' %}März
      {% when '4' %}April
      {% when '5' %}Mai
      {% when '6' %}Juni
      {% when '7' %}Juli
      {% when '8' %}August
      {% when '9' %}September
      {% when '10' %}Oktober
      {% when '11' %}November
      {% when '12' %}Dezember
    {% endcase %}
    {{ page.date | date: "%Y" }}
    

    如果您的日期是,例如 2015-02-20,则输出将为 20 Februar 2015

    【讨论】:

      【解决方案2】:

      因为 i18n 在 github 页面上不可用,我建立在 @Kleo Petroff 的 answer 和 @Falc 的 answer 的基础上,我设置了一种在 YAML 文件中定义区域名称的日期:

      没有整个case语句的代码几乎相同:

      {% capture i18n_date %}
      {{ page.date | date: "%-d" }}
      {% assign m = page.date | date: "%-m" | minus: 1 %}
      {{ site.data.fr.months[m] }}
      {{ page.date | date: "%Y" }}
      {% endcapture %}
      

      我设置了以下数据结构(可以在_config.yml,或者在一些_data/some.yml文件中),在上面的代码中文件是_data/fr.yml

      months:
          - Janvier
          - Février
          - Mars
          - Avril
          - Mai
          - Juin
          - Juillet
          - Aout
          - Septembre
          - Octobre
          - Novembre
          - Décembre
      

      注意page.date | date: "%-m" 将月份数字输出为字符串,即六月数字实际上是"6" 而不是6,liquid 默默地将该字符串转换为数字管道minus filter. During development it was not something I was aware and thus liquid didn't returned anything when passingmwith the value "6" tosite.data.fr.months[m]`时,我只在查看Falc答案时看到了技巧。

      【讨论】:

        【解决方案3】:

        使用来自 jekyll 支持的插件 page 的插件 i18n

        请注意,github 页面不支持本地插件。请参阅related issue

        【讨论】:

        • 如何指定 pt-BR 语言环境?也就是语言环境的区域部分?
        • 只需指定“pt-BR”而不是“lt”,支持的语言环境列表在这里:github.com/svenfuchs/rails-i18n/tree/master/rails/locale
        • 液体异常:对象必须是日期、日期时间或时间对象。没有给出。在 _posts/2012-09-15-test.html.evn:ruby 2.0 ,jekyll-newest
        • 这是一年前的答案,也许有些改变。
        【解决方案4】:

        轮到我分享我的解决方案了,没有插件,灵感来自之前的: 我创建了一个包含一些参数的包含,例如:{% translated_date.html ... %}

        我们的想法是使用日期过滤器语法(例如:“%A %-d %B %Y”)转换符合格式的月份和日期名称。用于翻译的字符串存储在 _data 的 yaml 文件中。

        代码和用法可在 repo oncleben31/jekyll-date-basic-i18n 上找到。

        在我的博客中与回购oncleben31/oncleben31-cc 中提供的 Jekyll 源集成的示例。查看 post.htmlhome.html 的布局。

        【讨论】:

        • 它适用于 github 页面,是我找到的最佳解决方案
        【解决方案5】:

        我开始使用@mpictas 建议的i18n 插件,但是当 Jekyll 重新生成一个页面时,它开始打印“错误”而不是本地化日期。于是我去掉了插件,开始使用这个简单的代码,类似于“case/when”的解决方案:

        {% assign months = "Enero|Febrero|Marzo|Abril|Mayo|Junio|Julio|Agosto|Septiembre|Octubre|Noviembre|Diciembre" | split: "|" %}
        {% assign m = page.date | date: "%-m" | minus: 1 %}
        {% assign day = page.date | date: "%d" %}
        {% assign month = months[m] %}
        {% assign year = page.date | date: "%Y" %}
        <span class="date">{{ day }}/{{ month }}/{{ year }}</span>
        

        【讨论】:

          【解决方案6】:

          您还可以在 Ruby 文件中编写自己的 Liquid 过滤器,如下所示:

          module DateFilter
            MONTHS = %w(Januar Februar März April Mai Juni July August September Oktober November Dezember)
          
            def german_long_month(input)
              MONTHS[input.strftime("%m").to_i - 1]
            end
          end
          
          Liquid::Template.register_filter(DateFilter)
          

          当您将此文件放入 Jekyll 站点的 _plugins 文件夹时,您可以像使用其他过滤器一样在模板文件中使用过滤器。

          {{ post.date | german_long_month }}
          

          【讨论】:

            【解决方案7】:

            您可以将@Falc 答案与jekyll-multiple-languages-plugin 结合使用:

            在模板中简单使用:

            {% assign months = "january|february|march|april|may|june|july|august|september|october|november|december" | split: "|" %}
            {% assign m = post.date | date: "%-m" | minus: 1 %}
            {% assign day = post.date | date: "%d" %}
            {% assign month = months[m] %}
            {% assign year = post.date | date: "%Y" %}
            <span class="post-meta">{{day}} {% t month %} {{year}}</span>
            

            然后在_i18n/en.yml.../pl.yml.../any-language.yml

            january: January
            february: February
            march: March
            april: April
            may: May
            june: June
            july: July
            august: August
            september: September
            october: October
            november: November
            december: December
            

            【讨论】:

              【解决方案8】:

              基于@Brice 的answer,我想出了这个以西班牙语输出月份名称的解决方案。

              <p class="post-meta">
                  {% assign mes_index = page.date | date: "%-m" | minus: 1 %}
                  {% assign mes = site.data.spanish.meses[mes_index] %}
              
                  <time datetime="{{ page.date | date_to_xmlschema }}">
                      {{ page.date | date: "%-d" }} de {{ mes }} de {{ page.date | date: "%Y" }}
                  </time>
              </p>
              

              “Mes”在西班牙语中的意思是“月”。

              _data/spanish.yml

              meses:
                - Enero
                - Febrero
                - Marzo
                - Abril
                - Mayo
                - Junio
                - Julio
                - Agosto
                - Septiembre
                - Octubre
                - Noviembre
                - Diciembre
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2018-05-10
                • 2020-03-07
                • 1970-01-01
                相关资源
                最近更新 更多