Converting Jekyll Numbers to Words

Converting numbers into words should be simple right? Especially with something as well supported as Jekyll. Well what looked like a simple feature needed some extra brain power than first thought. But I got there in the end.

- 2 minutes read time

When using such a well supported and used static sight generator, the norm is any issues or ‘I wonder if it can do this’ is resolved by a quick [insert your search engine of choice]. But after seeing a some inspiration online, I was vexed with the question of how can I convert a number variable in Jekyll into words.

The inspiration

Being a long time reader of CSS-Tricks I came across a tweet promoting a personal website of TylerGaw.

Screenshot of Tyler Gaw website

When looking at his blog page I was interested in how previous year posts were under the year’s heading. But I wondered, would it look good as words rather than the number? Apparently, that’s not something Jekyll can do natively, so the question was….how could I pull it off.

What did the internet say

When researching, I was coming across very complex plugins to add to the site to pass the number variable into and then output the number in words. These plugins would enable any range of number to be thrown in and spit out the words. It wasn’t quite what I would like, for example it would output 2020 as Two Thousand and Twenty, rather than Twenty Twenty.

The solution

Seen as we need only say a dozen numbers converted (if my blog runs for longer than that I’ll be very happy!) I created a ‘_data’. folder with a file ‘year.csv’. In it I put the following text…

year,text
2016,Twenty Sixteen
2017,Twenty Seventeen
2018,Twenty Eighteen
2019,Twenty Nineteen
2020,Twenty Twenty
2021,Twenty Twenty One
2022,Twenty Twenty Two
2023,Twenty Twenty Three

Then, to get the years showing in your post-list page, I included the following


  {%- for posts in site.posts -%}
    {% capture this_year %}{{posts.date | date:"%Y"}}{% endcapture %}
    {% capture next_year %}{{posts.previous.date | date:"%Y"}}{% endcapture %}

    {% if forloop.first %}
      {% for year_text in site.data.year %}
        {% if {{this_year}} == year_text.year %}
          <h2 id="{{this_year}}-ref">{{ year_text.text }}</h2>
        {% endif %}
      {% endfor %}
    {% endif %}

    ...include your component to show the post here

    {% if forloop.last %}

    {% else %}
      {% if this_year != next_year %}
        {% for year_text in site.data.year %}
          {% if {{next_year}} == year_text.year %}
            <h2 id="{{next_year}}-ref">{{year_text.text}}</h2>
          {% endif %}
        {% endfor %}
      {% endif %}
    {% endif %}

  {%- endfor -%}

And there we have it, the years converted into words, breaking up your post-list page.

Hope this was helpful!

The Archives

Latest Posts

Securing a google form in Jekyll

I'm a keen user of Jekyll for my web design and personal blog, but one of the short falls is not being able to easily install a contact form of your design and control. Here I build talk about what I learned putting a google form on a jekyll website.

- 3 minutes read time

Magnets in a 3d Print

At some point you have to figure out how to combine 3D printed pieces. Although just a box with a lid, I was able to learn how to make magnets part of my 3D models going forward.

- 4 minutes read time

The Archives