projectfluent / fluent

Fluent — planning, spec and documentation
https://projectfluent.org
Apache License 2.0
1.37k stars 43 forks source link

Korean markers (조사. e.g. 은/는, 이/가, 을/를, 와/과, ...) support? #335

Open foriequal0 opened 2 years ago

foriequal0 commented 2 years ago

I couldn't find an example for supporting korean markers.

Some korean markers depend on whether a previous noun ends with a consonant or with a vowel (without a consonant). With a consonant, we use 은, 이, 을, 과, and without a consonant, we use 는, 가, 를, 와.

Let me assume that I want to translate following sentence: Do you want to delete a user?

Then it might be translated into 사용자를 삭제하시겠습니까?. '를' after '사용자' is an object marker. The last character of '사용자' is '자', and it doesn't have a letter at its bottom, so it ends with a vowel (ㅓ), without a consonant. If we change '사용자' to '계정' (account), the message should be 계정을 삭제하시겠습니까?. '을' after '계정' is also an object marker. The last character of '계정' is '정', and it has a letter 'ㅇ' at its bottom, so it ends with a consonant. This is similar to other markers. Their usages depend on whether a previous noun ends with a consonant or not.

If we make '사용자' or '계정' a variable such as $type, then we should have a way to tell whether $type ends wth a consonant or not. Should this be implemented in custom function like this?

delete-prompt = { KOREAN_ENDS_WITH($type) ->
  [consonant] {$type}을 삭제하시겠습니까?
  [vowel]     {$type}를 삭제하시겠습니까?
}
doodoori2 commented 2 years ago

I'm sorry it wasn't an answer your question. ;)

Unreal engines have similar functions. see also hangulpost-positions section. it seems to be a reference about your question. https://docs.unrealengine.com/4.26/en-US/ProductionPipelines/Localization/Formatting/#hangulpost-positions

armoha commented 2 years ago

This seems to related with https://github.com/projectfluent/fluent/issues/80. Localization example on (comment):

-creature-fairy = fairy
-creature-elf = elf
    .StartsWith = vowel

you-see =
    You see { $object.StartsWith ->
        [vowel] an { $object }
       *[consonant] a { $object }
    }.

(r-)eul 을/를 Korean postposition with same example:

-creature-fairy = 요정
-creature-elf = 엘프
    .EndsWith = vowel

you-see =
    당신은 { $object.EndsWith ->
        [vowel] { $object }를
       *[consonant] { $object }을
    } 발견했다.