Language Dutch -> Crowdin

Hi,

I saw in the latest release that if you click on ‘enable localization mode’ that it redirects you to Crowdin. There I can’t select Dutch and also I don’t have a login.

Can I translate it do dutch?

Yes, we’d love that!

We don’t yet have a workflow for adding new languages to Crowdin, so I’ll take this opportunity to try to formalize that process.

Give me some time to make some progress with that. If you don’t hear from me for a few weeks just bump this thread and I’ll provide an update.

Justin

Thnx for the update.
In the older version I use translation into Dutch. How can I use it in the most recent version?

Yes, if you have the configuration set up properly, you should be able to continue using the translation file. Let me know if you encounter any issues.

Ok thanks, Any chance I can continue with Crowdin to speed things up? And you can use the language file also :wink:

Crowdin works a bit differently than our previous translation feature. Instead of retrieving default translations from messages*.properties and saving custom translations to the database, Crowdin handles all of that externally. So when you enter “translation mode” within OpenBoxes, your edits will be saved to Crowdin and then pushed to our github repo as pull requests.

As far as I remember, when you leave “translation mode”, the application will pull the default translations from messages*.properties.

We’re currently in a code freeze as we upgrade from Grails 1 to Grails 3. So I’m not sure how to proceed with enabling Crowdin. I guess you can try it on your end and let me know when you’ve attempted to create your first translation. I’m guessing you’ll need a Crowdin account and we’ll need to add you as a translator for the OpenBoxes project on our end.

In the meantime, send me the Dutch translation file you have so far and I can at least get that into the core system.

Justin

Hello,

You have to add an project on Crowdin, then I can request to join that project.

image

I’ve added Dutch (as well as several other languages that we’ve been asked to support over the years). I have also sent you an invite to participate as a Translator for the Dutch language. Let me know if there are other languages you’d like to be able to translate.

NOTE: New languages can be added easily to both Crowdin and OpenBoxes in case you don’t see your language in the list of target languages.

Hello! Thanks, I can also do German.

1 Like

@jmiranda if I open plain Openboxes the language Dutch is not listed.

image

If I edit the config file ofcourse it is.

Question:
Does Openboxes load the messages config from Crowdin or do you include a fully translated one in the config dir?

Maybe to enlight the problem.
If I enable localization mode I see the translated parts, if I disable it it’s gone.

In addition to adding an entry for Dutch (“nl”) to the openboxes.locale.supportedLocales config property, you need to include a messages_nl.properties in the WAR (or exploded WAR) for it all to work properly when not in “translation mode”.

In the meantime, send me the Dutch translation file you have so far and I can at least get that into the core system.

It may have been lost in the back-and-forth, but I need a messages_nl.properties file from you in order to add that to our codebase so you don’t need to keep adding that file yourself.

So let me know how you were storing the Dutch translations in previous versions of OpenBoxes.

In other words,

(1) Did you create your own messages_nl.properties file and copy that file into the openboxes exploded WAR directory under Tomcat’s webapps directory?

OR

(2) Were you saving the translations to the database using the old translation feature?

If you don’t know what I’m talking about, then you can copy messages.properties and add it under

cd /opt/tomcat/webapps/openboxes/WEB-INF/grails-app/i18n
cp messages.properties messages_nl.properties

NOTE: This assumes you’ve installed Tomcat under the recommended Tomcat home directory (/opt/tomcat). Otherwise, find the correct path for your system.

Make sure the file has the same permissions / ownership as the other files. I assume this’ll do the trick.

sudo chown tomcat:tomcat messages_nl.properties
sudo chmod +r messages_nl.properties

NOTE1: The openboxes_nl.properties file will be wiped out on any future deployment attempts so we need to make sure that file gets added to the source code to avoid frustration.

NOTE2: To reiterate what I said in a previous reply, any translations you add using the “translation mode” feature (Crowdin) need to go through the following process before they become available within the application.

  1. User submits translation through Crowdin In-Content
  2. Crowdin In-Context sends translation to Crowdin
  3. Crowdin creates a pull request in the OpenBoxes GitHub source repository
  4. [optionally] Proofreader reviews and approves new translations
  5. OpenBoxes developers code review and merge that change
  6. Bamboo CI runs a new snapshot or release build

Therefore, you won’t see Dutch translations when the “translation mode” is off because those translations haven’t been added to the code and won’t be included in a WAR file until we execute a new build process on the newly merged code.

Theoretically, the translations will be available in one of the next snapshot builds, but in reality, you’ll probably need to wait until the next release before seeing new translations.

If you need them sooner you can periodically (or even after every Crowdin pull request gets merged) grab the latest messages_nl.properties file from GitHub. There might even be a way of notifying you when that occurs or setting up a webhook to post a request to some serverless automaton to copy the file to your server. But that’s an exercise for the reader.

I just noticed that Crowdin has an “Over-The-Air” Content Delivery feature that would potentially allow these translations to be made available immediately, assuming the application itself used the Crowdin CDN instead of the messages*.properties files. However, I haven’t looked into whether that’s feasible for our project yet. Stay tuned.

Ah, I will continue the translations in Crowdin.

I made the current translations in my runnings version by adding them in the DB.

I’ll do some work and do it in Crowdin.
If i’m correct then I can download the messages file on crowdin and put it in the ‘WEB-INF/grails-app/i18n’ folder and then i should work, correct?

I’ll do some work and do it in Crowdin.

That should work. But uf you export those 444 translations using the Export Localizations button, then it should download those translations as a .properties file. You can send that to me and I can add that to our codebase and you won’t have to

Although it looks like you’ve already added 350, so if you feel ok going forward I guess we can skip that step.

If i’m correct then I can download the messages file on crowdin and put it in the ‘WEB-INF/grails-app/i18n’ folder and then i should work, correct?

Yes, that is correct.

Yes!

Btw, some pages are non translate-able. Is this a known issue?

stockTransfer/create
stockTransfer/list
replenishment/create
stockMovement/createInbound?direction=INBOUND
stockMovement/createRequest
stockMovement/list?direction=INBOUND
stockTransfer/createInboundReturn
putAway/create
stockMovement/createOutbound?direction=OUTBOUND
stockMovement/list?direction=OUTBOUND
stockMovement/list?direction=OUTBOUND&sourceType=ELECTRONIC
stockTransfer/createOutboundReturn
product/list
product/importAsCsv
requisitionTemplate/list

I’m not seeing that behavior myself.

Could you attach some screenshots or a video to demonstrate the behavior that you’re seeing?

I don’t see any edit options on this page. Yes for the top menu, but not like other pages that I can edit the words / buttons / etc.

However, Network Console shows this error:

image

Hmm. I’ve noticed that some content doesn’t load when ad blocking is enabled.

I use chrome and don’t have an adblocker installed :slight_smile:

Tested it on Firefox, Edge and Chrome :slight_smile:

Btw: https://d2gma3rgtloi6d.cloudfront.net/editor/a69d9f20/crowdin-editor/main.js.map is just not loading :slight_smile: But I dont think that is the problem.