/core/locale.d

http://github.com/wilkie/djehuty · D · 80 lines · 55 code · 15 blank · 10 comment · 0 complexity · 3f51bdc0e7df4af875b540f12036733b MD5 · raw file

  1. /*
  2. * locale.d
  3. *
  4. * This module handles locale and internationalization.
  5. *
  6. * Author: Dave Wilkinson
  7. * Originated: September 15th, 2009
  8. *
  9. */
  10. module core.locale;
  11. import core.time;
  12. import core.date;
  13. import core.string;
  14. import core.definitions;
  15. // Supported Locales
  16. import locales.all;
  17. enum LocaleId : uint {
  18. English_US,
  19. English_GB,
  20. French_FR,
  21. }
  22. class Locale {
  23. static:
  24. LocaleId id() {
  25. return _localeId;
  26. }
  27. void id(LocaleId value) {
  28. _localeId = value;
  29. switch(_localeId) {
  30. default:
  31. case LocaleId.English_US:
  32. _localeEngine = new LocaleEnglish_US();
  33. break;
  34. case LocaleId.French_FR:
  35. _localeEngine = new LocaleFrench_FR();
  36. break;
  37. }
  38. }
  39. string formatNumber(double value) {
  40. return _localeEngine.formatNumber(value);
  41. }
  42. string formatCurrency(long fixed, long scale) {
  43. return _localeEngine.formatCurrency(fixed, scale);
  44. }
  45. string formatCurrency(double amount) {
  46. return _localeEngine.formatCurrency(amount);
  47. }
  48. string formatTime(Time time) {
  49. return _localeEngine.formatTime(time);
  50. }
  51. string formatDate(Date date) {
  52. return _localeEngine.formatDate(date);
  53. }
  54. private:
  55. LocaleId _localeId = LocaleId.English_US;
  56. LocaleInterface _localeEngine;
  57. }
  58. interface LocaleInterface {
  59. string formatTime(Time time);
  60. string formatDate(Date date);
  61. string formatNumber(double value);
  62. string formatNumber(long fixed, long scale, long round);
  63. string formatCurrency(double amount);
  64. string formatCurrency(long fixed, long scale);
  65. }