Please note: this page describes work planning for VIVO 1.5 – please see the extensive additional work in multi-language support for VIVO 1.6

up to all Development Components for VIVO 1.5

Component description

Study, design, and implement methods for moving VIVO from an English-centric application to a language-neutral application.

Scope of the component for v1.5

In scope:

The component breaks down neatly into three different levels of effort:

  1. Support non-English versions of VIVO
    • All text that appears in templates, error messages, etc. must be configurable through templates or similar mechanism.
  2. Support multi-language versions of VIVO
    • Each user sees templates and messages in their own preferred language.
      • Initially as configured in the browser; changeable if logged in.
  3. Support multi-language content in VIVO
    • Each individual might have multiple labels: one for each supported language. The user sees the label of his preferred language.
    • This could apply to all literals in RDF data.

Out of scope:

  1. Multi-language support in the application logs.

Design work needed for the component

Each stage requires its own design elements:

Level 1 design:

  • Some design – how should we store the strings of text in each language?
    • How does this relate to extensions/modules?
    • What is required to implement an additional language?
  • Not really design, but a lot of inspection of the code base.
    • Where are these hard-coded strings appearing?
      • In the templates.
      • In the controllers (in particular, error messages).
      • In warnings and error messages at startup time.
  • Which of these strings could/should be stored in the application ontology as annotations, instead of being in the controllers or templates?
    • Do we need to jump right to multi-language content just to handle them??

Level 2 design:

  • How to determine the user’s preferred language.
    • What if their preference is for a language that the installation doesn't support?
  • How to make the selected language particular to each request or each session, instead of pertaining to the entire context.

Level 3 design:

This one is quite challenging.

  • Although RDF specifies a way of adding a language tag to a literal, some Ontologies specify alternate ways.
    • For example, create properties like “name-en” and “name-sp” as English and Spanish sub-properties of “name”.
  • Does this require that we do property inferencing?
  • How does this affect SPARQL queries that only return values, and not property names?
  • There is not even a de facto standard. How far do we go to support those non-standard schemes? How flexible do we want to try to be?
  • What do we do if we find English and French versions of a value, but the user’s preferred language is Italian?
    • Show the English?
    • Show nothing?

Can this component be addressed in stages?

 

Task

Depends on

Time

1a

Design the mechanism for "dictionary files", and implement it for Java and for Freemarker.

 

6 days

1b

Scour the code base for strings that should be language-dependent. Use the new mechanism instead.

1a

10 days

2

Create mechanism for choosing a language for each request, including default.

1a, 1b

4 days

3a

Design for multi-language content

  • Decide how far we want to go with handling non-standard language designators,
    and what mechanism we will use.
  • Decide how to handle the main case and edge cases
    • data available in preferred language
    • data only available in other languages
    • data available in multiple languages

 

8 days

3b

Implement multi-language content

3a

Dependent on design

Dependency on any other component

Essentially none, although the configuration design should take the extension framework into account.

A suggested incremental plan

For release 1.5:

  • Nothing

For later releases:

  • If Levels 1 and 2 are considered useful, move forward with them.
  • Do some of the design work for Level 3, so we can form some opinion about the level of effort it would require.
  • No labels