Skip to content

i18n for fixed problem description strings #150

Open
@thorehusfeldt

Description

@thorehusfeldt

Problemtools allows problem descriptions in multiple languages, but the fixed headlines are hard-coded in English like this:

\newcommand{\sampleinputname}{Sample Input}

It would be nice if those few headlines were localised, based on the two-letter language code of the problem description file.

One way I can think of doing that, implemented on https://github.com/thorehusfeldt/problemtools/tree/feat/i18n is to provide localisations in a yaml file in the template directory /problemtools/templates/latex/strings.yaml

.en:
    sampleinputname: Sample Input
    sampleoutputname: Sample Output
    sampleinteractname: Sample Interaction
    sampleinteractreadname: Read
    sampleinteractwritename: Write
.sv:
    sampleinputname: Exempel på indata
    sampleoutputname: Exempel på utdata
    sampleinteractname: Exempel på interaktion
    sampleinteractreadname: Läs
    sampleinteractwritename: Skriv

Then /problemtools/templates/latex/template.tex gets a few new placeholders:

\renewcommand{\sampleinputname}{%(sampleinputname)s}
\renewcommand{\sampleoutputname}{%(sampleoutputname)s}
\renewcommand{\sampleinteractname}{%(sampleinteractname)s}
\renewcommand{\sampleinteractreadname}{%(sampleinteractreadname)s}
\renewcommand{\sampleinteractwritename}{%(sampleinteractwritename)s}

and the templating mechanism in problemtools/template.py takes care of replacing strings into self.language, falling back on English.

   if self.language in self.strings:
            strings = self.strings[self.language]
        else:
            strings = self.strings['.en']
            print('Unable to find string translations into {}, using English instead'.format(self.language))
        for s in strings:
            data[s] = strings[s]

Other approaches exist, such as using templates in problemset.cls. Or using babel. But the above works, and is quite light-weight.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions