anegostudios / VintageStory-Issues

Vintage Story's public issue tracker for reporting bugs, crashes and the like
46 stars 16 forks source link

Translatable dynamic meal descriptions #231

Closed Heptagon-ru closed 5 years ago

Heptagon-ru commented 5 years ago

In Russian (I am not a linguist and can be wrong in details and grammatical definitions),

  1. Adverbs and adjectives which qualify main noun, change their form depending of noun's grammatical gender, quantity, ... E.g. hearty cabbage soup will be sytnuy kapustnuy soop, but hearty cabbage porridge will be sytnaya kapustnaya kasha, because soup is masculine, but porridge is feminine. Ofc, there is no cabbage porridge, but just for an example.
  2. Adverbs, adjectives and nouns change their forms depending of grammarical case. E.g. cabbage is kapusta, but soup with cabbage is soop s kapustoi
  3. Nouns usually (or even ever) can't be used as adjectives/adverbs. E.g. in pumpkin-cabbage soup: pumpkin will be strictly adverb, cabbage - strictly adjective: tykvenno-kapustnuy soop. If you change definitions order: cabbage-pumpkin soup: kapustno-tykvennuy soop And btw different words have different adverb/adjective prefixes.

I guess in other languages this may be also as problematic, but in different way.

I have no experience how these things are usually dealt with. E.g. with current approach we could try to somehow store the source words with context. Context may be included to the source (doesnt seem to be possible), or may be only visible in the key string. E.g. if I know that this hearty will go with soup, not to porridge, I will write the matched translation. Same with point 2, with cabbage. Also with cabbage-pumpkin case (even with more-general case of cabbage-pumpkin-turnip-onion case): all words except the last one are adverbs, last one is adjective, which can depend from grammatical gender and quantity.

Without such improvement, the awesome feature - dynamic meal descriptions - will look terrible in Russian and may damage VS reputation a lot. Better not to translate at all. In Russia there were many widely known cases when in movies (usually US ones) or in games the translations were awful (e.g. just a random set of cyrillic characters instead of a person's surname), and people laughed on these translations and looked at them very negatively.

:tired_face:

tyronx commented 5 years ago

@tatsu011 whats the state of this?

tatsu011 commented 5 years ago

..was wondering why I didn't see anything mentioned as things for me to do during January for translations last month. Though I did just come up with an idea of how to deal with this.

Lets go back to the Hearty Cabbage Soup example. We have the translation for the words Hearty Cabbage Soup

However, if we decide to add in more ingredients, instead of adding to the name, we add them to the tooltip with the format of Secondary-Primary-Type with a format for each type.

The idea being that we add in some format lines for the cooking system that covers Secondary-Primary-Type and Primary-Type. The list of ingredients for that food would be in the tooltip, and not in the name.

tatsu011 commented 5 years ago

The change to fix this has been pushed to the next main version. As of now this change is complete.

tyronx commented 5 years ago

@Heptagon-ru I'll upload the new 1.9.0 translations soon-ish. If the improvements by tatsu do not suffice for a correct translation do let us know please. I fully agree on your statement, either we properly translate it or not translate it at all.

Heptagon-ru commented 5 years ago

@tyronx , @tatsu011 So the Type is soup/porridge/...? Then yeah, it might work, if at least Primary will be separate for each type. Need to see live to understand better. Yeah, will try to keep an eye on the new translations and check and report back.

tyronx commented 5 years ago

These are the new language entries that tatsu added:

"cooking-porridge-format-g1": "{1} {0}",
"cooking-porridge-format-g2": "{1}-{2} {0}",
"cooking-porridge-format-g1o": "{1} {0} with {2}",
"cooking-porridge-format-g2o": "{1}-{2} {0} with {3}",
"cooking-porridge-format-g1h": "{2} topped {1} {0}",
"cooking-porridge-format-g2h": "{3} topped {1}-{2} {0}",
"cooking-porridge-format-g1oh": "{3} topped {1} {0} with {2}",
"cooking-porridge-format-g2oh": "{4} topped {1}-{2} {0} with {3}",
"meaty": "meaty",
"cooking-stew-format-m1": "{1} {0}",
"cooking-stew-format-m2": "{2} {1} {0}",
"cooking-stew-format-m1o": "{1} {0} with {2}",
"cooking-stew-format-m2o": "{2} {1} {0} with {3}",
"cooking-stew-format-m1h": "{2} topped {1} {0}",
"cooking-stew-format-m2h": "{3} topped {2} {1} {0}",
"cooking-stew-format-m1oh": "{3} topped {1} {0} with {2}",
"cooking-stew-format-m2oh": "{4} topped {2} {1} {0} with {3}",
"cooking-stew-format-v1": "{1} {0}",
"cooking-stew-format-v2": "{2} {1} {0}",
"cooking-stew-format-v1o": "{1} {0} with {2}",
"cooking-stew-format-v2o": "{2} {1} {0} with {3}",
"cooking-soup-format-a1": "{1} {0}",
"cooking-soup-format-a2": "{2} {1} {0}",
"cooking-soup-format-a1o": "{1} {0} with {2}",
"cooking-soup-format-a2o": "{2} {1} {0} with {3}",
Heptagon-ru commented 5 years ago

If I understand correctly, {0} is "porridge"/"stew"/"soup", {1} is main ingredient, {2} is additional, {3} is topping.

I may see 3 kinds of problems. 1. For porridge, in case "{1} {0}" and in case "{1}-{2} {0}", even if {1} is e.g. rye, it will be two different word forms. For "{1} {0}" it will be adjective, e.g. "rye porridge" = "ржаная каша", but for "{1}-{2} {0}" it will be adverb, e.g. "rye-rice porridge" = "ржано-рисовая каша". Kinda because the last word in chain X-Y-X remains adjective, and all previous become adverbs. And I think you can't build the chain without dashes using only adjectives, because the adjectives are of the same type/tier. I guess the same in English - you probably can't say "rye rice porridge", but can "tasty rice porridge", because tasty and rice are adjectives of different "type", they describe different attribute "slots" of porridge.

  1. Sometimes one ingredient, e.g. vegetable, is used in recipes of different types, therefore we need to have a separate form of the ingredient for each type, because meal types have different gender and therefore their adjectives need to have different gender. E.g. "stew" has neuter gender, "soup" has masculine gender. So "cabbage stew" will be "капустное рагу", but "cabbage soup" will be "капустный суп".

  2. When e.g. "poultry" is used before meal type for stews, it will be adjective, when after (for soups) - usually a noun: "poultry stew" - "куриное рагу", "cabbage soup with poultry" - "капустный суп с курицей". Again need to have separate words for substitutions.

So unless there is more of the new entries, I feel this will not save us. @tyronx , could you please cross-check all this through Saraty? She knows Russian quite good I'm sure, and she is much closer to you and she worked more with the dynamic meals. Maybe I am missing something. Also if you will try to modify the methodology, she will give much faster analysis if it works for Russian. Ofc if she distastes :) this kind of work, you are stuck with me only :D

tyronx commented 5 years ago

Oki, thank you hepta, I'll talk to saraty about it, maybe she can help indeed.

tatsu011 commented 5 years ago

I am curious if "Poultry in cabbage soup" is written differently than "Cabbage soup with poultry"

Heptagon-ru commented 5 years ago

@tatsu011, yes. "Poultry in cabbage soup" - Курица в капустном супе "Cabbage soup with poultry" - Капустный суп с курицей For reference: cabbage - капуста, poultry - курица, soup - суп

In this example all the changes in suffixes are because of grammatical cases. According to Wiki, English mostly lost all cases, remained only 3 simplified cases for personal pronouns: I/ me/mine(my), he/him/his, ...

(Btw, strictly speaking, poultry is translated differently, and I actually used translation of "chicken". But the word transformation is the same. It is just that in Russian there is no good short accurate word for poultry, the usual translation is "bird meat" which is not quite correct, because poultry is not all birds. That's why poultry is one of the most hated by me words in VS OneSky translation, where I used "bird meat" :DDD)

tatsu011 commented 5 years ago

I approve of that little bit of info. I also approve of changing the format of how things are laid out so that words can flow in the same sort of direction. What I've put there works for English, but if it's possible to change that formatting to work for Russian, then by all means, change the formatting. (that's what it's there for. )

Heptagon-ru commented 5 years ago

Aww, I was hoping you guys will find the way with your bright young brains :D I will try to think of something, but I don't feel positive I can :)

tatsu011 commented 5 years ago

Since I'm not exactly multilingual, (just monolingual English speaker) I wanted to build something that others can work with. Thus: I give you formatting.

tyronx commented 5 years ago

Saraty may be able to help. Let's see

tyronx commented 5 years ago

Unfortunately the system proposed by tatsu is insufficient. New system, as discussed with @Heptagon-ru:

Base language Entries

"meal-normal-porridge": "{0} porridge {1}",
"meal-normal-stew": "{0} stew {1}",
"meal-normal-soup": "{0} soup {1}",

"meal-hearty-porridge": "Hearty {0} porridge {1}",
"meal-hearty-stew": "Hearty {0} stew {1}",
"meal-hearty-soup": "Hearty {0} soup {1}",

"meal-hefty-porridge": "Hefty {0} porridge {1}",
"meal-hefty-stew": "Hefty {0} stew {1}",
"meal-hefty-soup": "Hefty {0} soup {1}",

"meal-normal-porridge-honey": "Honey topped {0} porridge {1}",
"meal-normal-stew-honey": "Honey topped {0} stew {1}",
"meal-normal-soup-honey": "Honey topped {0} soup {1}",

"meal-hearty-porridge-honey": "Honey topped hearty {0} porridge {1}",
"meal-hearty-stew-honey": "Honey topped hearty {0} stew {1}",
"meal-hearty-soup-honey": "Honey topped hearty {0} soup {1}",

"meal-hefty-porridge-honey": "Honey topped hefty {0} porridge {1}",
"meal-hefty-stew-honey": "Honey topped hefty {0} stew {1}",
"meal-hefty-soup-honey": "Honey topped hefty {0} soup {1}",

in above list {0} will be replaced by: The list of primary/secondary ingredients connected with dashes as before, but using primary/secondary language entries for all of possible ingredients:

"meal-ingredient-porridge-secondary-rice": "Rice as adverb",
"meal-ingredient-porridge-primary-rice": "Rice as adjective",

"meal-ingredient-soup-secondary-rice": "Rice as adverb",
"meal-ingredient-soup-primary-rice": "Rice as adjective",
etc.....

whereas {1} will be replaced by:

"meal-adds-generic": " with {0}",
"meal-adds-meatystew-boiled": " with boiled {0}",
"meal-adds-vegetablestew-garnish": " with {0} garnish",
"meal-adds-porridge-mashed": " with mashed {0}",
"meal-adds-porridge-sprinkled": " with sprinkled {0}",
"meal-adds-porridge-mashed-and-sprinkled: " with mashed {0} and sprinkled {1}",
"meal-adds-porridge-mash-aswellas-sprinkled": " with mashed {0} as well as sprinkled {1}",

in this list {0}/{1} will be replaced by item lists

"meal-ingredientlist-1": "{0}",
"meal-ingredientlist-2": "{0} and {1}",
"meal-ingredientlist-3": "{0}, {1} and {2}",
"meal-ingredientlist-4": "{0}, {1}, {2} and {3}",
etc... (until 10)

items inside the item list will use language entries of all ingredients in instrumental case

"meal-ingredient-cranberry-instrumentalcase": "cranberry+oi",
"meal-ingredient-carrot-instrumentalcase": "carrot+oi"
etc....

@Heptagon-ru as requested in our talk, please verify if above system suffices for a grammatically correct translation of meals into russian. Thank you :-)

Heptagon-ru commented 5 years ago

Yes, I have checked it again and cross-checked with Discord messages, it seems we covered all and the system should work. Can't wait to see if it will work flawlessly, or completely fail because of a minorest detail we missed :DDDDDD Thank you for this noice participation opportunity! Little did @tatsu011 know, when suggested the "format" approach, we quickly mega-exploded it into the Mega Multy Format approach :D Anyway, blame Pushkin and Tolstoy, not us!!! :DDDDD

tatsu011 commented 5 years ago

The only thing I'd actually suggest changing on the new format is give "Honey" it's own name and allow for other toppings. eg "{2} topped hefty {0} soup {1}"

And the only reason I'm suggesting this is the existence of sauces, and ease of mod ability.

Heptagon-ru commented 5 years ago

Yeah, this should work, even with other liquid sauces addition. And we can (or even should) avoid adding a new keyword type for this, we can/should reuse "meal-ingredient-*-instrumentalcase", i.e. "meal-ingredient-honey-instrumentalcase", because honey here will have the same "with what" grammatical case.

tyronx commented 5 years ago

Nah, don't do that for now. Add that at a later point when it becomes relevant please.

tatsu011 commented 5 years ago

Might I ask why to leave it as "Honey topped" instead of "{x} topped"? The formatting required doesn't really add much and it's very easy to do.

tyronx commented 5 years ago
tatsu011 commented 5 years ago

This task is now complete and waiting on a merge request.

tatsu011 commented 5 years ago

As of current, the only major feature missing is the implementation of InsturmentalCase as I had no clue how that was supposed to be handled in code- as the formatting for it looked strange. This will be completed once I get a rough draft of the Launcher in place.

tatsu011 commented 5 years ago

All fixed. Will be pushed with my updates for this month.