OpenCRVS
v1.3
v1.3
  • 👋Introduction
  • Product Specifications
    • Functional Architecture
    • Workflow management
    • Status Flow Diagram
    • Users
      • Examples
    • Core functions
      • 1. Notify event
      • 2. Declare event
      • 3. Validate event
      • 4. Register event
      • 5. Print certificate
      • 5. Issue certificate
      • 6. Search for a record
      • 7. View record
      • 8. Correct record
      • 9. Verify record
      • 10. Archive record
      • 11. Vital statistics export
    • Support functions
      • 10. Login
      • 11. Audit
      • 12. Deduplication
      • 13. Performance management
      • 14. Payment
      • 15. Learning
      • 16. User support
    • Admin functions
      • 17. User management
      • 18. Comms management
      • 19. Content management
      • 20. Config management
    • Data functions
      • 21. Legacy data import
      • 22. Legacy paper import
  • Technology
    • Architecture
      • Performance tests
    • Standards
      • FHIR Documents
        • Event Composition
        • Person
        • Registration Task
        • Event Observations
        • Locations
    • Security
    • Interoperability
      • Create a client
      • Authenticate a client
      • Event Notification clients
      • Record Search clients
      • Webhook clients
      • National ID client
      • FHIR Location REST API
      • Other ways to interoperate
  • Default configuration
    • Intro to Farajaland
    • Civil registration in Farajaland
    • OpenCRVS configuration in Farajaland
      • User / role mapping
      • Application settings
      • Declaration forms
      • Certificate templates
    • Business process flows in Farajaland
  • Setup
    • 1. Establish team
    • 2. Gather requirements
    • 3. Installation
      • 3.1 Set-up a local development environment
        • 3.1.1 Install the required dependencies
        • 3.1.2 Install OpenCRVS locally
        • 3.1.3 Starting and stopping OpenCRVS
        • 3.1.4 Log in to OpenCRVS locally
        • 3.1.5 Tooling
      • 3.2 Set-up your own country configuration
        • 3.2.1 Fork your own country configuration repository
        • 3.2.2 Set up administrative address divisions
          • 3.2.2.1 Prepare source file for administrative structure
          • 3.2.2.2 Prepare source file for statistics
        • 3.2.3 Set up CR offices and Health facilities
          • 3.2.3.1 Prepare source file for CRVS Office facilities
          • 3.2.3.2 Prepare source file for health facilities
        • 3.2.4 Set up employees & roles for testing or production
          • 3.2.3.1 Prepare source file for employees
          • 3.2.3.2 Configure role titles
        • 3.2.5 Set up application settings
          • 3.2.5.1 Configuring Metabase Dashboards
        • 3.2.6 Configure certificate templates
        • 3.2.7 Configure declaration forms
          • 3.2.7.1 Configuring an event form
        • 3.2.8 Seeding your local development environment database
          • 3.2.8.1 Clearing your local development environment database
        • 3.2.9 Countryconfig APIs explained
          • 3.2.9.1 Managing language content
      • 3.3 Set-up a server-hosted environment
        • 3.3.1 Provision your server nodes with SSH access
        • 3.3.2 Provision environment
        • 3.3.3 Provision a comms gateway
        • 3.3.4 Set up an SMTP server for OpenCRVS monitoring alerts
        • 3.3.5 Setup DNS A records
        • 3.3.6 Deploy (Automated & Manual)
        • 3.3.7 Seeding & clearing data on a server
        • 3.3.8 Automated & manual backup and manual restore
    • 4. Functional configuration
      • 4.1 Configure application settings
      • 4.2 Configure registration periods and fees
      • 4.3 Create new user roles
      • 4.4 Managing system users
    • 5. Testing
    • 6. Go-live
    • 7. Monitoring
      • 7.1 Application logs
      • 7.2 Infrastructure health
      • 7.3 Routine monitoring checklist
      • 7.4 Setting up alerts
      • 7.5 Managing a Docker Swarm
  • General
    • Contributing
    • Releases
      • v1.3.5: Release notes
      • v1.3.4: Release notes
      • v1.3.2: Release notes
      • v1.3.1: Release notes
      • v1.3.* to v1.3.* Migration notes
      • v1.3.0: Release notes
      • v1.2.* to v1.3.* Migration notes
        • v1.2 to v1.3: Form migration
      • v1.2.1: Release notes
      • Patch: Elasticsearch 7.10.2
      • v1.2.0: Release notes
      • v1.1.* to v1.2.* Migration notes
      • v.1.1.2: Release notes
      • v.1.1.1: Release notes
      • v1.1.0: Release notes
    • Interoperability roadmap
    • Product roadmap
Powered by GitBook
On this page
  1. Setup
  2. 3. Installation
  3. 3.2 Set-up your own country configuration
  4. 3.2.9 Countryconfig APIs explained

3.2.9.1 Managing language content

Previous3.2.9 Countryconfig APIs explainedNext3.3 Set-up a server-hosted environment

Last updated 1 year ago

It is possible to amend all text copy in OpenCRVS and introduce as as many content translations as you like.

Technical background

The multi-lingual text content approach for OpenCRVS is developed using . It is worthwhile reading their documentation to understand how this technically works, particularly this .

FormatJS uses industry-wide i18n standards to import text content. This JSON standard is also exported by enterprise level content management systems such as or .

If you are not using a content management system, you edit text copy directly in these JSON files that are served to the client. Therefore, you will need a code editor like VSCode, explained in step .

Editing text content

You can edit copy at any time, even after OpenCRVS goes live. The code to serve this JSON to the application is provided in the country configuration repo and requires no configuration in order to serve.

The content JSON looks like this:

{
  "data": [
    {
      "lang": "en",
      "displayName": "English",
      "messages": {
        "buttons.add": "Add",
        "buttons.apply": "Apply",
        ...

You can duplicate the blocks in the "data" array for every language you want to support. Duplicate the entire block. In our Farajaland example you can see that we have duplicated the block for French.

  • The displayName is how you want this language selection to be displayed in the user language select component in a content management system.

  • Inside the messages object are all the possible content keys that OpenCRVS uses. You can edit the value but not the key itself. You must not remove any keys as they are ALL required.

For example, in cases like the below, the areas in bold are the areas to translate and you leave the rest of the syntax in English as it is code:

{year}-Farajaland-{event, select, birth{birth} death{death} other{birth}}-event-statistics.csv {fileSize} This is the most complex example:

{event, select, declaration {{eventType, select, birth {birth} death {death} other{birth}} declaration has been sent for review.} registration {{eventType, select, birth {birth} death {death} other{birth}} has been registered.} duplication {{eventType, select, birth {birth} death {death} other{birth}} has been registered.} rejection {{eventType, select, birth {birth} death {death} other{birth}} declaration has been rejected.} certificate {{eventType, select, birth {birth} death {death} other{birth}} certificate has been completed.} offline {{eventType, select, birth {birth} death {death} other{birth}} declaration will be sent when you reconnect.} other {{eventType, select, birth {birth} death {death} other{birth}}}

Setting up a content management system

It requires professional expertise in NodeJS if you want to set up a content management system other than Contentful.

If you are using Contentful we automatically export JSON files ready for Contentful import if you wish to use it.

To perform an initial import to Contentful:

  1. First create a space in Contentful and add your locales for your translations. Copy your space-id from Contentful settings.

  2. Run the following command to export your space as you will need ids for your locales: contentful space export --space-id=<your-space-id>

  3. You can run the following command to generate a contentful-import.json file: yarn contentful:prepare:import

  4. Run the Contentful import script: contentful space import --content-file src/features/languages/generated/contentful-import.json --space-id=<your-space-id>

The lang key is an language code

The value uses the approach using braces {} and English variables to occasionally substitute dynamic text. You must read the and understand how this works if you are editing these values. Dynamic variables must remain in English.

Edit text for the client application in JSON in this file: . The descriptions for the use-case of each of these client content keys is described in this JSON .

Edit text for the login application in JSON in this file: . The descriptions for the use-case of each of these login content keys is described in this JSON .

Edit SMS notifications JSON in this file: . The descriptions for the use-case of each of these SMS notifications content keys is described in this JSON .

Some dynamc content is rendered using ICU Message Syntax, explained here: \

After editing the content, if the JSON is not valid, it will not load properly in the client. You can use an online validator like to check that your JSON is valid. VSCode also warns you by highlighting any errors.

You can see the functions that decide to serve either the static JSON text files or JSON from Contentful . If you want to use a different system, you can code whatever integration you like in the getLanguages function provided it returns language JSON to the clients in the same format as the static JSON files.

Update this environment to enable a content management system appropriately.

Download and install the

Open the exported file and copy the required ids to this

Get your API key from Contentful settings and add it to an environment variable .env file, or paste for use in development. DO NOT SUBMIT API KEYS TO A PUBLIC REPO!

FormatJS
page
JSON
Transifex
Contentful
3.1.5 Tooling
JSON Object
ISO 639-1
unicode ICU Message Syntax
unicode documentation
client.json
file
login.json
file
notifications.json
file
https://formatjs.io/docs/core-concepts/icu-syntax
this one
here
variable
Contentful cli
file
here