projectfluent / fluent

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

Term's attributes can't be used as variable values #338

Open caridy opened 2 years ago

caridy commented 2 years ago

I can think of two important use-cases for this, but I'm afraid I'm missing some important about the design principles behind fluent, but first, let's see the example from the documentation:

-brand-name = Aurora
    .gender = feminine

update-successful =
    { -brand-name.gender ->
        [masculine] { -brand-name} został zaktualizowany.
        [feminine] { -brand-name } została zaktualizowana.
       *[other] Program { -brand-name } został zaktualizowany.
    }

In this example, -brand-name.gender is used as a selector, and it works just fine. This feature allows developers to keep the information about the brand name in a single place, and reuse it the value in various places.

Lets now see another example:

-brand-name = Aurora
    .gender = feminine

-foo = { $gender -> 
    [feminine] some
    *[masculine] another
}

x = { -foo(gender: "feminine") }
y = { -foo(gender: -brand-name.gender) }

In this case, y message throws during parsing with E0014: Expected literal, which I suspect is related to https://github.com/projectfluent/fluent/issues/337. This prevents reusing the attribute of a term as the value of a variable.

cc @gonzalocordero

zbraniecki commented 2 years ago

@stasm @eemeli

eemeli commented 2 years ago

This seems to be a special case of the same change as proposed in #230, yes?