Ticket #2802 (closed enhancement: fixed)

Opened 21 months ago

Last modified 21 months ago

Need to tweak the JSON formatting of the localisations

Reported by: aron.carroll Owned by: aron.carroll
Priority: major Milestone: demo phase 3
Component: ckan Keywords:
Cc: Repository: ckan
Theme: none


This is what we need the JSON to look like. Taken from the Jed documentation (http://slexaxton.github.com/Jed/).


      // The empty string key is used as the configuration
      // block for each domain
      "" : {
        // Domain name
        "domain" : "the_domain",

        // Language code
        "lang" : "en",

        // Plural form function for language
        "plural_forms" : "nplurals=2; plural=(n != 1);"

      // Other keys in a domain contain arrays as values
      // that map to the translations for that key.
      // Gettext suggests that you use english as your keys
      // in case the key isn't found, and it can just pass
      // the value directly through.
      // Note: by convention, the 0-index location of the translations
      // is never accessed. It's just a thing, I guess.
      "a key" : [ null, "the translation", "the plural translations", ... ],

      // The plural form string is converted into a function
      // and the value that's passed into the gettext call
      // is passed into the plural form function. It's result
      // (plus 1) is the index that the translation comes from.

      // We're using sprintf interpolation on our keys so we can
      // then sub in the _actual_ values into the result.
      "%d key" : [ null, "%d key", "%d keys" ],

      // Contexts are keys that are just prefixed with a context string
      // with a unicode \u0004 as the delimiter.
      // You can use it for anything. Usually it's just for being content aware
      // in some way (e.g. male vs. female, product vs. category)
      "context\u0004%d key": [ null, "context %d key", "context %d keys" ]

This looks like an appropriate python library to do the formatting. http://pypi.python.org/pypi/pojson/ but I'll leave to your discretion.

Finally an API endpoint that returns the appropriate request would save us making requests to the i18n directory.


For example if the current url is http://localhost:5000/pl/dataset then the client would request:


This should return the Content-Type: application/json and a 200 with an appropriate JSON body (this can be the language requested or an appropriate fallback). I think that if the fallback is the default language (in most cases English) then we just return a 204 No Content to save data.

Change History

comment:1 Changed 21 months ago by toby

  • Owner changed from toby to aron.carroll
  • Status changed from new to assigned


I've done most of this

to test

get strings python setup.py extract_messages

mangle the zh_TW creates .po/.mo files - I may need to fix plurals paster trans mangle -c .ini

create .js files only zh_TW will be correct due to other .po/.mo files being 1.7 ones paster trans js -c .ini

/api/i18n/zh_TW should be correct

please note we do not have en.js I'm returning {} I think this is the correct response (maybe something else as we should just use the default _('...') strings - maybe we need to do something else

for what it's worth pojson does not provide the format you wanted so I adapted it

reassign if you need fixes

comment:2 Changed 21 months ago by aron.carroll

  • Status changed from assigned to closed
  • Resolution set to fixed

Cool, this is in as of 8b72d1f8e9ba

Note: See TracTickets for help on using tickets.