Skip to content

Policy request: If a string changes its meaning, use a new string ID #3331

@Wuzzy2

Description

@Wuzzy2

I suggest a new policy for when an existing string in the game is changed.

For example, when STR_1234 was "I need to go to the toilet.", but then a bug was found because the guest should have said "I do not need to go to the toilet.", the current policy is to change STR_1234.

I suggest to NOT do that and instead add a new string ID. Also, the old string ID should be considered deprecated from that point on and should no longer be used by the game anywhere.

Policy rules

The policy rule should state that whenever a string was changed, by default a new string ID should be used, and the old string ID must be deprecated.

There could be a list somewhere that lists all deprecated string IDs.

In some narrow cases, an exception is permissible when the meaning of the original string did not change and the overall change is very small. For example, a typo fix in the original string would not require a new string ID, unless the typo was a word with a different meaning. However, this exception should be used with care.

Why?

If you change the meaning of an existing string (for example, into it's complete opposite), this creates a huge problem for languages that have translated the old string. Because the old translation remains at the string ID, this means that suddenly, a wrong translation with the wrong meaning will appear in the game, with no fault of the translator. A translation that was correct before suddenly broke. This is bad.

Only with GitHub issues do we keep track of changing strings, but this approach is error-prone. It is very possible some outdated translations linger in the game and we have no idea they're outdated because we accidentally lost track of them.

In gettext-based programs, any string that was changed is usually kept in the files for reference, but is marked as outdated; the new string always starts untranslated or with a fuzzy translation (a translation that is incomplete and hasn't been verified yet and will be ignored by the program for now).

Is this possible?

TBH, I don't know if this policy is even possible. Is it reasonable to deprecate string IDs or are some string IDs so deeply hardcoded into the game they cannot be deprecated ever? If that's the case, then this whole suggestion admittedly falls apart.

Longterm solution

In the longterm, I wish OpenRCT2 just switches to gettext, because it doesn't have this problem to begin with and is way more robust and battle-tested. But that's of course much more complicated to do.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions