locale_de.js 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { Grammar } from '../../rule_engine/grammar.js';
  2. import { localFont } from '../locale_util.js';
  3. import { createLocale } from '../locale.js';
  4. import { NUMBERS } from '../numbers/numbers_de.js';
  5. const germanPrefixCombiner = function (letter, font, cap) {
  6. if (cap === 's') {
  7. font = font
  8. .split(' ')
  9. .map(function (x) {
  10. return x.replace(/s$/, '');
  11. })
  12. .join(' ');
  13. cap = '';
  14. }
  15. letter = cap ? cap + ' ' + letter : letter;
  16. return font ? font + ' ' + letter : letter;
  17. };
  18. const germanPostfixCombiner = function (letter, font, cap) {
  19. letter = !cap || cap === 's' ? letter : cap + ' ' + letter;
  20. return font ? letter + ' ' + font : letter;
  21. };
  22. let locale = null;
  23. export function de() {
  24. if (!locale) {
  25. locale = create();
  26. }
  27. return locale;
  28. }
  29. function create() {
  30. const loc = createLocale();
  31. loc.NUMBERS = NUMBERS;
  32. loc.COMBINERS['germanPostfix'] = germanPostfixCombiner;
  33. loc.ALPHABETS.combiner = germanPrefixCombiner;
  34. loc.FUNCTIONS.radicalNestDepth = (x) => {
  35. return x > 1 ? loc.NUMBERS.numberToWords(x) + 'fach' : '';
  36. };
  37. loc.FUNCTIONS.combineRootIndex = (postfix, index) => {
  38. const root = index ? index + 'wurzel' : '';
  39. return postfix.replace('Wurzel', root);
  40. };
  41. loc.FUNCTIONS.combineNestedRadical = (a, b, c) => {
  42. a = c.match(/exponent$/) ? a + 'r' : a;
  43. const count = (b ? b + ' ' : '') + a;
  44. return c.match(/ /) ? c.replace(/ /, ' ' + count + ' ') : count + ' ' + c;
  45. };
  46. loc.FUNCTIONS.fontRegexp = function (font) {
  47. font = font
  48. .split(' ')
  49. .map(function (x) {
  50. return x.replace(/s$/, '(|s)');
  51. })
  52. .join(' ');
  53. return new RegExp('((^' + font + ' )|( ' + font + '$))');
  54. };
  55. loc.CORRECTIONS.correctOne = (num) => num.replace(/^eins$/, 'ein');
  56. loc.CORRECTIONS.localFontNumber = (font) => {
  57. const realFont = localFont(font);
  58. return realFont
  59. .split(' ')
  60. .map(function (x) {
  61. return x.replace(/s$/, '');
  62. })
  63. .join(' ');
  64. };
  65. loc.CORRECTIONS.lowercase = (name) => name.toLowerCase();
  66. loc.CORRECTIONS.article = (name) => {
  67. const decl = Grammar.getInstance().getParameter('case');
  68. const plural = Grammar.getInstance().getParameter('plural');
  69. if (decl === 'dative') {
  70. return { der: 'dem', die: plural ? 'den' : 'der', das: 'dem' }[name];
  71. }
  72. return name;
  73. };
  74. loc.CORRECTIONS.masculine = (name) => {
  75. const decl = Grammar.getInstance().getParameter('case');
  76. if (decl === 'dative') {
  77. return name + 'n';
  78. }
  79. return name;
  80. };
  81. return loc;
  82. }