First time hacktoberfesting
Tags: hacktoberfest
Published: 2020-10-25 21:12:35

## Progress
I've finished my 4 PRs (plus one extra) and ordered my t-shirt yesterday. Can't wait to wear it! :heart_eyes:

## My contribution: translations!
The idea of contributing code as such a newbie felt intimidating to me so I stayed in my comfort zone and decided to check if anyone wanted Finnish translations for their project. I began by looking for issues with the word 'translation' in them – and the hacktoberfest tag, of course.

### OmniaWrite
The first project that got me interested was [OmniaWrite](https://github.com/TorstenDittmann/OmniaWrite), a text editor engineered for creative writing. It's built with svelte and the localisation files are JSON. Easy peasy!
```json
{
  "header": {
    "write": {
      "title": "Write"
    },
(...)
```
The JSON is nicely organized and easy to follow while looking at [the web interface](https://app.omniawrite.com/).

There was a bit of a mistake with my very first PR because the Hacktoberfest introduction video failed to mention that you should refresh your fork from upstream before creating a PR. :flushed: Luckily I didn't mess things up too badly and the maintainer resolved the conflicts on my behalf. Phew! After that faux pas, I carefully followed [this instruction](https://digitaldrummerj.me/git-syncing-fork-with-original-repo/) before creating any more PRs.

I haven't been able to test my translation yet because the stack is unfamiliar to me and I have no idea if I could test it, so I should probably look into that still...

### Flexbox Froggy
The next one was such a fortunate find! I've been going through Wes Bos's [What the Flexbox](https://flexbox.io/) video tutorial so CSS Flexbox was somewhat familiar to me, and now I found a game where you solve puzzles using Flexbox! [Flexbox Froggy](https://github.com/thomaspark/flexboxfroggy) is HTML+CSS+JS (my current faves :heart:) and the translations are grouped into three JavaScript files: docs, levels and messages.
```javascript
var levels = [
  {
    name: 'justify-content 1',
    instructions: {
      'en': '<p>Welcome to Flexbox Froggy [...snipsnip...]',
(...)
```
Here I was a bit worried about what would happen if someone else was adding another language at the same time, but it all went well. I think no one else was working on the files when I was, and I didn't mess up in Git either.

Here a wonderful feature was the fact that my translations were viewable right away in my browser! Very easy to test and see that everything looked ok.

### ScreenRuler
Then I came across [ScreenRuler](https://github.com/Bluegrams/ScreenRuler), a configurable screen measuring tool for Windows. Written in C# which I know zilch about. No worries! The localisation file format RESX, on the other hand, is very familiar to me so, Challenge Accepted.

The repo's issue description for adding translations is very useful because it explains the process well. There is also a tip about ResX Resource Manager to handle the translation work itself. The format of RESX is quite verbose and the tool helps to focus on the strings and not the format.

I installed the stand-alone version first and translated the strings. The tool seemed a bit unstable because sometimes it just lost some of my translations here and there, but eventually I got all strings translated.

Then I started wondering if I could test the translation because desktop applications can be tricky (space-wise etc.). Luckily I have a hubby who knows this stuff so I was able to set up Visual Studio with the project/solution, build the code and see the app localised. Looking good! The layout seemed to adapt to UI length dynamically, which was surprising.

Visual Studio was an inconsistently-working pain in the butt, too (like the ResX tool), because sometimes the build process was a success and sometimes it threw weird errors that disappeared after a clean or, I don't know, after me just scratching my head a bit. :roll_eyes:

### Grid Garden
For my 4th PR I was a little lost. I searched for projects but a lot of them had loads of text to translate (e.g. 1000 English words is about half a workday for a professional Finnish translator) and some seemed abandoned. How lucky was I when Thomas Park of Flexbox Froggy tipped me to this other game, [Grid Garden](https://github.com/thomaspark/gridgarden). A game where you learn the CSS Grid layout! I knew nothing about Grid but was about to look into it after the Flexbox tutorial. Two birds with one stone this was: a PR for Hacktoberfest and learned me some Grid. :muscle:

While doing my translations, I happened to notice something wonky about Vietnamese: the game has descriptions of each of the CSS properties and the possible values in Vietnamese were different from the original English. Therefore, I also created an issue for this repo and the original Vietnamese translator was able to fix the texts. Teamwork!

## My extra PR
At some point while working on the ScreenRuler translation, I noticed that a recent change in the code caused a crash when the user tried to open the in-app help. I beckoned my hubby to help again and I sent a super simple fix as a PR. The maintainer thanked me for noticing the bug and gave some great pointers about my too simple solution. Here came hubby again and we worked together on an idea I'd had all along (to check whether the help file for a specific language exists at all). I got to learn about some great IntelliSense features in Visual Studio, and how familiar the C# syntax is.

## Resources
I had hoped to be able to use a translation memory tool for these translation tasks but I was unable to get some working. I tried MateCat and OmegaT but the JSON from Flexbox Froggy/Grid Garden failed to be recognized in MateCat (although JSON is supported) and there was something else I couldn't be bothered with in OmegaT. (I'm most familiar with SDL Studio and I just wanted to get working on the translations asap.)

I did use [the Microsoft Glossary](https://www.microsoft.com/en-us/language/search) which is a great resource for checking current translations in Microsoft products. For Finnish at least, you'll have to be careful with the suggestions, though, because there are some stupid and inconsistent ones. But at least it helps you find a translation when you sort of already know what you're looking for but just can't remember it right then. :smile:

## Reflections
As mentioned, this was my first Hacktoberfest. I'm going to be honest and say I originally signed up for the swag but I ended up having a lot of fun, especially with the CSS games. I hope someone finds my translations useful and I'm curious to see if someone contributes improvements.

I'm willing to contribute more translations to open source projects but I don't feel quite ready yet to contribute code. But I'll keep learning, and perhaps there are still issues with helpful tags like "good first issue" after Hacktoberfest ends.

Look forward to next year's Hacktoberfest! Perhaps then I'll be brave and learned enough to tackle some code issues.