langcode.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. const http = require("http");
  2. const convertFileFormat = require("../src/fileFormatConverter");
  3. const httpServer = require("../src/httpServer");
  4. const parseURL = require("../src/parseURL");
  5. const languages = require("../src/languages");
  6. const jsl = require("svjsl");
  7. const settings = require("../settings");
  8. const translate = require("../src/translate");
  9. jsl.unused(http);
  10. const meta = {
  11. "name": "LangCodes",
  12. "desc": "Returns the language code of the specified language",
  13. "usage": {
  14. "method": "GET",
  15. "url": `${settings.info.docsURL}/langcode/{LANGUAGE}`,
  16. "supportedParams": [
  17. "format",
  18. "lang"
  19. ]
  20. }
  21. };
  22. /**
  23. * Calls this endpoint
  24. * @param {http.IncomingMessage} req The HTTP server request
  25. * @param {http.ServerResponse} res The HTTP server response
  26. * @param {Array<String>} url URL path array gotten from the URL parser module
  27. * @param {Object} params URL query params gotten from the URL parser module
  28. * @param {String} format The file format to respond with
  29. */
  30. const call = (req, res, url, params, format) => {
  31. jsl.unused([req, params]);
  32. let statusCode = 200;
  33. let lang = (params && params["lang"]) ? params["lang"] : settings.languages.defaultLanguage;
  34. if(url[1] == undefined)
  35. {
  36. statusCode = 400;
  37. return httpServer.pipeString(res, convertFileFormat.auto(format, {
  38. "error": true,
  39. "message": translate(lang, "noLangCodeSpecified")
  40. }, lang), parseURL.getMimeTypeFromFileFormatString(format), statusCode);
  41. }
  42. let defaultValDisabled = (params && params.noDefault && params.noDefault == true);
  43. let responseText = "";
  44. let langCode = null;
  45. // if(!defaultValDisabled)
  46. // langCode = settings.languages.defaultLanguage;
  47. let language = url[1].toString().toLowerCase();
  48. let ltc = languages.languageToCode(language);
  49. langCode = (ltc === false ? (defaultValDisabled ? null : settings.languages.defaultLanguage) : ltc);
  50. if(langCode == null || ltc === false)
  51. {
  52. // error
  53. statusCode = 400;
  54. responseText = convertFileFormat.auto(format, {
  55. "error": true,
  56. "message": `The provided language "${decodeURIComponent(language)}" could not be resolved.`
  57. }, lang);
  58. }
  59. else
  60. {
  61. responseText = convertFileFormat.auto(format, {
  62. "error": false,
  63. "code": langCode
  64. }, lang);
  65. }
  66. httpServer.pipeString(res, responseText, parseURL.getMimeTypeFromFileFormatString(format), statusCode);
  67. };
  68. module.exports = { meta, call };