1. Fix the broken `gettext()` call in `courde_detail.js`
2. Change the string to avoid Transifex misunderstand the pattern '% o' in `checklist.underscore`.
3. Embed the `{filename}` part inside the string in `transcripts-choose.underscore` to provide better i18n flexibililty.
4. Remove all the call of `gettext()` and `${_()}` inside the `mock` directory to aovid mis-extraction by pybabel. (It seems that the `mock` directory is soly used in test? So the strings in this directory need not to be extracted and translated?)
5. The unicode char `\u2014` will trigger a bug inside pybabel which makes the extracted string untranslatable, so remove this char.
1. Extract the full sentence rather than parital of a sentence, so that languages with different word orders than English can benifit from this.
2. Using ngettext instead of gettext with 'xxx(s)', as Transifex treats `()` as special characters so that it enforces the translated string must have the same number of `()` pairs. Such enforcement makes translations difficult, as not every language can use forms like 'xxx(s)' to represent both singular & plural within a single word.
1. Spliting strings inside the call to `gettext()` in javascript breaks the string extraction process, so the string should kept in one line.
2. Using escape string inside a string in `gettext()` may cause the extractor to misunderstand the escape string, so that it will escape this escape string.
As some i18n features need ```ugettext``` or its shorcut ```_``` to be called on a non-string-literal, so the pylint check of ```translation-of-non-string``` should be explicitly disabled in such situations.
Imported VAL videos get the value "imported" for their status. We
considered not including imported videos on the upload page but have
instead decided to include them, so it is necessary to have a display
string for the imported status value.
This is required so that an a video module exported by one Open edX
deployment and imported by another will work correctly if it contains an
edx_video_id but does not populate other URL fields.
JIRA: MA-110
The written style ```interpolate(gettext('some text'), {...}, ...)``` will will cause the string inside gettext() not be extracted.
So a separate line is needed for ```gettext``` when gettext function is directly called inside a call to the interpolate function.
The replacement strings need to be unicode, so that when STUDIO_NAME contains non-ascii characters python can handle it correctly without raising exceptions.
Also, the value of STUDIO_SHORT_NAME can be read from cms.env.json.