Delores: Brazilian Portuguese translation

or Google Docs, just add a comment and let’s get cracking

We can discuss translations here, also.

3 Likes

I tried to follow the 2 letters rule for naming the file, but it’s not ideal since pt (portuguese) is for portuguese from Portugal which is almostttttt the same, but not quite (similar enough so that we can understand everything, but it will sound weird sometimes). The correct naming would be “pt-br” (portuguese from brazil), I think. Could I change to that without loading errors?

A serious problem that I found is with grammatical gender (https://en.wikipedia.org/wiki/Grammatical_gender). English is gender neutral, but languages like portuguese, french and german are not: the nouns can be masculine or feminine and the pronouns and articles (and sometimes verbs, numerals, adjectives, etc) must form an agreement with the gender of the noun.

Simple example: in english you would say “the fork” and “the knife”, using the same pronoun to both, but in portuguese it would be “o garfo” (‘o’ because fork/garfo is a masculine noun) and “a faca” (‘a’ because knife/faca is a feminine noun). Yes, all knifes are females in Brazil and they WILL cut you if you don’t call them by the proper pronoun. The same can be said with “a fork” and “a knife”: it would be “um garfo” and “uma faca”. So I think you can see the problem already.

Unfortunately, we cant expect to translate “the” or “a” by themselves, without knowing about what they are referring (or can refer), and think that they will work properly with languages with grammatical genders.

A possible solution is to add an extra tab (extra column) in the tsv files that specifies the gender of an object, char or noun so that we could add an IF in the code that would add the proper pronoun or article before the noun. But I don’t know if this is the best approach.

Meanwhile, this brazilian portuguese translation is as good as it gets (for the first try before many, many corrections and contributions, that is).

Great work! Please let me know if you need help revising or testing out the translation.

Starting out with a silly question: why would the absence of articles gender be a problem? For example, “knife” could be translated as “a faca” (article included). Or is it the case that the nouns are always prefixed by an article by Delores?

Thanks!

We recently went through and added articles for every object and new translation lines. I don’t know if this solves the problem or not.

2 Likes

Articles are added on the fly when you take a picture of something. So when you take a pic of a knife, the game takes “knife”, sees if there’s an article, and if not, adds “a”.

Then if Delores looks at the pic, she says “It’s a photo of” + “a knife”.

I just said it on the Italian topic but I’ll add it also here: as I added all the missing articles, I think I can quickly come up with a cheat sheet as a reference for the translators. I’ll post it in a new topic once it’s ready.

2 Likes

I suppose it would be more versatile to create an “array” of possible variations of each item (in your case at least two) and to keep them together. That would work even for declension in Slavic languages that I can’t properly handle now.

In Czech we have seven possible declensions (Czech declension - Wikipedia) of each noun. For Delores engine I could almost get away with just one (4th = accusative) that works with common verbs (Look at, Use, Push, Pull, etc.)

Sometimes I can cheat a little bit (“Talk to” needs 7th, so I can use “Address” that uses 4th), but unfortunately I need the 3rd for “Walk to” and “Give something to”, the 2nd for “Look into”, etc.

Of course, then it would be necessary to add a numeric parameter to each verb.

It could look like this:
English
knife|a knife
Give %1 to %1
photo of %2

German
das Messer|des Messers|dem Messer|das Messer
Foto %2

Portuguese
a face|uma faca|??? (sorry, I’m not an expert =)
IDK %2

Czech
nůž|nože|noži|nůž|noži|noži|nožem
Dát %4 %3 (Give %4 to %3)
Fotka %2 (Photo of %2)
Prozkoumat %4 (Examine %4)

However, I am not really sure Ron would be interested in coding such system… :blush:

1 Like

So it turns out adventure games are the reason why English became the international language :stuck_out_tongue:

5 Likes

I would love to come up with a good system to help translators and translations. I know English and a bit of French, but that’s the extent of my multilingualness. I find this discussion fascinating.

5 Likes

An Englishman living in Czechia told me (in Czech!) a few years ago: “English is not language. It’s Lego.”

3 Likes

I believe my suggestion is doable and it would definitely work for me :slightly_smiling_face: but unfortunately I can’t speak for all translators - even for Czech translators of games. I feel some of them got used to the fact that it’s impossible to create a proper translation of interactive texts.

I wonder what German users think about missing articles…?

BTW my 5yo daughter just asked me to tell you that she wants you to create another part of the game with the girl taking snapshots - even though she does not understand English at all. Oh well…

3 Likes

Maybe you could/should have a look at other Open Source systems that are used to translate software. Even if they aren’t applicable to games they could help in implementing such a system in your engine.

The concept of taking photos is really cool. :slight_smile: @RonGilbert: Maybe it’s an idea to use this in a new game? :wink: For example it would work perfectly in/as a (casual) mobile game.

See here for my own brief summary of what how you’d deal with some of this kind of stuff in gettext. The basic principle is you pass it an English singular and plural and it takes care of the rest. This is definitely relevant to at least some strings, like ^You need to turn in %d more photos before returning to your game developer job at MMucasFlem.

ngettext("1 item", "%1 items", num_items)

The translation file has a formula to indicate what kind of plurals there are, like this:

"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"

But there are newer systems (supposedly) building on top of lessons learned from gettext, like Fluent, also see here.

Translations are isolated; locale-specific logic doesn’t leak to other locales. Authors can iteratively improve translations without impact on other languages.

Its front page example boasts about how you can implement stuff like gender logic in the Fluent translation itself (which would certainly be quite useful for languages like German or Finnish):

1 Like

Mobile ports of this engine may take some while. In the meantime play this, I’ve heard it was made by nice guys, especially the artsy one: Photographs

2 Likes

No DRM free version for PC :frowning_face:

They haven’t added the link for some reason… here we go:

2 Likes

I can’t imagine doing something like this for a full adventure game with 16K lines of text that’s mostly spoken dialog.

3 Likes

Absolutely, I don’t see how that Fluent stuff would go together with voice recording.

The multiple plural concept is mainly something to be aware of. To clarify, in some languages a phrase like “here we are” would need to be translated in different ways, depending on if there are 2 or 3 of us. Think something like:

  • 1 person: here I am
  • 2 people: here youme are
  • 3 people: here we are

tl;dr As long as the scripts don’t try to be too smart and include a few seemingly redundant strings all should be well.

1 Like
2 Likes

To be clear, I was just using that example because I think it succinctly illustrates how languages can do things we might not expect, but the specifics could be quite different. One of the most complex ones I’ve encountered is Russian, which has 3 or 4 different plural forms and goes something like this:

  • 1
  • 2, 3, 4 (also 22, 23, 24, 32, 33, 34, etc. but not 12, 13, 14)
  • 5, 6, 7, 8, 9, 0 (also 25, 35, etc., also includes 11, 12, 13, 14)

The gettext formula, which I didn’t bother trying to parse to write the above so please excuse any inaccuracies, looks like this:

"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
"%100>=11 && n%100<=14)? 2 : 3);\n"