locale_ko.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { Grammar } from '../../rule_engine/grammar.js';
  2. import { createLocale } from '../locale.js';
  3. import { nestingToString } from '../locale_util.js';
  4. import { NUMBERS } from '../numbers/numbers_ko.js';
  5. import * as tr from '../transformers.js';
  6. let locale = null;
  7. export function ko() {
  8. if (!locale) {
  9. locale = create();
  10. }
  11. return locale;
  12. }
  13. function create() {
  14. const loc = createLocale();
  15. loc.NUMBERS = NUMBERS;
  16. loc.FUNCTIONS.radicalNestDepth = nestingToString;
  17. loc.FUNCTIONS.plural = function (unit) {
  18. return unit;
  19. };
  20. loc.FUNCTIONS.si = (prefix, unit) => {
  21. return prefix + unit;
  22. };
  23. loc.FUNCTIONS.combineRootIndex = function (index, postfix) {
  24. return index + postfix;
  25. };
  26. loc.ALPHABETS.combiner = tr.Combiners.prefixCombiner;
  27. loc.ALPHABETS.digitTrans.default = NUMBERS.numberToWords;
  28. loc.CORRECTIONS.postposition = (name) => {
  29. if (['같다', '는', '와', '를', '로'].includes(name))
  30. return name;
  31. const char = name.slice(-1);
  32. const value = (char.charCodeAt(0) - 44032) % 28;
  33. let final = value > 0 ? true : false;
  34. if (char.match(/[r,l,n,m,1,3,6,7,8,0]/i))
  35. final = true;
  36. Grammar.getInstance().setParameter('final', final);
  37. return name;
  38. };
  39. loc.CORRECTIONS.article = (name) => {
  40. const final = Grammar.getInstance().getParameter('final');
  41. if (final)
  42. Grammar.getInstance().setParameter('final', false);
  43. if (name === '같다')
  44. name = '는';
  45. const temp = { 는: '은', 와: '과', 를: '을', 로: '으로' }[name];
  46. return temp !== undefined && final ? temp : name;
  47. };
  48. return loc;
  49. }