You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.1 KiB

6 years ago
5 years ago
5 years ago
  1. /* global lang_str lang_non_translated */
  2. /* eslint camelcase:0 */
  3. const sprintf = require('sprintf-js')
  4. var OverpassLayer = require('overpass-layer')
  5. var tagLang = null
  6. OverpassLayer.twig.extendFunction('keyTrans', function () {
  7. return tagTranslationsTrans.call(this, arguments[0], undefined, arguments[1])
  8. })
  9. OverpassLayer.twig.extendFunction('tagTrans', function () {
  10. return tagTranslationsTrans.apply(this, arguments)
  11. })
  12. OverpassLayer.twig.extendFunction('tagTransList', function () {
  13. return tagTranslationsTransList.apply(this, arguments)
  14. })
  15. OverpassLayer.twig.extendFunction('localizedTag', function (tags, id) {
  16. if (tagLang && id + ':' + tagLang in tags) {
  17. return tags[id + ':' + tagLang]
  18. }
  19. return tags[id]
  20. })
  21. OverpassLayer.twig.extendFunction('trans', function () {
  22. return lang.apply(this, arguments)
  23. })
  24. OverpassLayer.twig.extendFunction('isTranslated', function (str) {
  25. return tagTranslationsIsTranslated(str)
  26. })
  27. OverpassLayer.twig.extendFunction('repoTrans', function (str) {
  28. if (!global.currentCategory.repository) {
  29. return str
  30. }
  31. const lang = global.currentCategory.repository.lang
  32. const format = lang && str in lang ? lang[str] : str
  33. return vsprintf(format, Array.from(arguments).slice(1))
  34. })
  35. function tagTranslationsIsTranslated (str) {
  36. return !(str in lang_non_translated) && (str in lang_str)
  37. }
  38. function tagTranslationsTrans () {
  39. var tag = arguments[0]
  40. var value
  41. var count
  42. if (arguments.length > 1) {
  43. value = arguments[1]
  44. }
  45. if (arguments.length > 2) {
  46. count = arguments[2]
  47. }
  48. if (typeof value === 'undefined') {
  49. return lang('tag:' + tag, count)
  50. } else {
  51. return lang('tag:' + tag + '=' + value, count)
  52. }
  53. }
  54. function tagTranslationsTransList (key, values) {
  55. if (typeof values === 'undefined') {
  56. return null
  57. }
  58. values = values.split(';')
  59. values = values.map(function (key, value) {
  60. return tagTranslationsTrans(key, value.trim())
  61. }.bind(this, key))
  62. return lang_enumerate(values)
  63. }
  64. module.exports = {
  65. trans: tagTranslationsTrans,
  66. isTranslated: tagTranslationsIsTranslated,
  67. setTagLanguage: function (lang) {
  68. tagLang = lang
  69. }
  70. }