/locales/fr_fr.d

http://github.com/wilkie/djehuty · D · 185 lines · 152 code · 28 blank · 5 comment · 24 complexity · 83e09d8c736e248167c6bffbba3613c3 MD5 · raw file

  1. module locales.fr_fr;
  2. import core.locale;
  3. import core.time;
  4. import core.date;
  5. import core.string;
  6. import core.definitions;
  7. class LocaleFrench_FR : LocaleInterface {
  8. string formatTime(Time time) {
  9. string ret;
  10. long hr, min, sec;
  11. hr = time.hours;
  12. min = time.minutes % 60;
  13. sec = time.seconds % 60;
  14. ret = toStr(hr);
  15. ret ~= ":";
  16. if (min < 10) {
  17. ret ~= "0";
  18. }
  19. ret ~= toStr(min);
  20. ret ~= ":";
  21. if (sec < 10) {
  22. ret ~= "0";
  23. }
  24. ret ~= toStr(sec);
  25. return ret;
  26. }
  27. string formatDate(Date date) {
  28. string ret;
  29. ret = toStr(date.day);
  30. ret ~= " ";
  31. switch(date.month) {
  32. case Month.January:
  33. ret ~= "janvier";
  34. break;
  35. case Month.February:
  36. ret ~= "f\u00e9vier";
  37. break;
  38. case Month.March:
  39. ret ~= "mars";
  40. break;
  41. case Month.April:
  42. ret ~= "avril";
  43. break;
  44. case Month.May:
  45. ret ~= "mai";
  46. break;
  47. case Month.June:
  48. ret ~= "juin";
  49. break;
  50. case Month.July:
  51. ret ~= "juillet";
  52. break;
  53. case Month.August:
  54. ret ~= "ao\u00fbt";
  55. break;
  56. case Month.September:
  57. ret ~= "septembre";
  58. break;
  59. case Month.October:
  60. ret ~= "octobre";
  61. break;
  62. case Month.November:
  63. ret ~= "novembre";
  64. break;
  65. case Month.December:
  66. ret ~= "d\u00e9cembre";
  67. break;
  68. default:
  69. ret ~= "???";
  70. break;
  71. }
  72. ret ~= " " ~ toStr(date.year);
  73. return ret;
  74. }
  75. string formatCurrency(long whole, long scale) {
  76. return formatNumber(whole, scale, 2) ~ " \u20ac";
  77. }
  78. string formatCurrency(double amount) {
  79. return formatNumber(amount) ~ " \u20ac";
  80. }
  81. string formatNumber(long whole, long scale, long round = -1) {
  82. long intPart;
  83. long baseScale;
  84. long fracPart;
  85. // Get integer part of decimal
  86. intPart = whole;
  87. baseScale = 1;
  88. int precision;
  89. for (long i; i < scale; i++) {
  90. intPart /= 10;
  91. baseScale *= 10;
  92. precision++;
  93. }
  94. // Get fraction as an integer
  95. fracPart = whole % baseScale;
  96. // Round down
  97. for ( ; precision > round ; precision-- ) {
  98. fracPart /= 10;
  99. }
  100. return formatNumber(intPart) ~ "," ~ formatNumber(fracPart);
  101. }
  102. string formatNumber(long value) {
  103. if (value == 0) {
  104. return "0";
  105. }
  106. string ret;
  107. while (value > 0) {
  108. long part = value % 1000;
  109. value /= 1000;
  110. if (ret !is null) {
  111. ret = toStr(part) ~ " " ~ ret;
  112. }
  113. else {
  114. ret = toStr(part);
  115. }
  116. }
  117. return ret;
  118. }
  119. string formatNumber(double value) {
  120. string ret;
  121. long intPart = cast(long)value;
  122. while (intPart > 0) {
  123. long part = intPart % 1000;
  124. intPart /= 1000;
  125. if (ret !is null) {
  126. ret = toStr(part) ~ " " ~ ret;
  127. }
  128. else {
  129. ret = toStr(part);
  130. }
  131. }
  132. ret ~= ",";
  133. ret ~= toStr(value);
  134. // round last digit
  135. bool roundUp = (ret[$-1] >= '5');
  136. ret = ret[0..$-1];
  137. while (roundUp) {
  138. if (ret.length == 0) {
  139. return "0";
  140. }
  141. else if (ret[$-1] == ',' || ret[$-1] == '9') {
  142. ret = ret[0..$-1];
  143. continue;
  144. }
  145. ret[$-1]++;
  146. break;
  147. }
  148. // get rid of useless zeroes (and point if necessary)
  149. foreach_reverse(uint i, chr; ret) {
  150. if (chr != '0' && chr != ',') {
  151. ret = ret[0..i+1];
  152. break;
  153. }
  154. }
  155. return ret;
  156. }
  157. }