Added Amount in Word in Bulgarian Language.

https://sourceforge.net/tracker/?func=detail&atid=883808&aid=1858664&group_id=176962
This commit is contained in:
trifonnt 2007-12-27 20:52:27 +00:00
parent 301ecfee7f
commit 288b1238a4
1 changed files with 247 additions and 0 deletions

View File

@ -0,0 +1,247 @@
/******************************************************************************
* Product: Adempiere ERP & CRM Smart Business Solution *
* Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
*****************************************************************************/
package org.compiere.util;
/**
*Amount in Words for Bulgarian
*
*@author Kostadin Mitev -The class is based on the AmtInWords_EN.java written by jjanke
*@version $Id: AmtInWords_BG.java,v 0.1 2007/12/21 $
*/
public class AmtInWords_BG implements AmtInWords
{
/**
* AmtInWords_BG
*/
public AmtInWords_BG ()
{
super ();
}
private static final String zero = "\u041D\u0443\u043B\u0430"; // "Nula";
private static final String negative = "\u041D\u0443\u043B\u0430"; // "minus";
private static final String concat = "\u0438"; // "i";
private static final String lev[] = {"\u043B\u0435\u0432","\u043B\u0435\u0432\u0430"}; // {"lev","leva"};
/** Thousands plus */
private static final String[][] majorNames = {
{"",""},
{"\u0425\u0438\u043B\u044F\u0434\u0430","\u0425\u0438\u043B\u044F\u0434\u0438"}, //{"Hiliada","Hiliadi"},
{"\u041C\u0438\u043B\u0438\u043E\u043D","\u041C\u0438\u043B\u0438\u043E\u043D\u0430"}, //{"Million","Miliona"},
{"\u041C\u0438\u043B\u0438\u0430\u0440\u0434","\u041C\u0438\u043B\u0438\u0430\u0440\u0434\u0430"}, //{"Miliard","Miliarda"},
{"\u0422\u0440\u0438\u043B\u0438\u043E\u043D","\u0422\u0440\u0438\u043B\u0438\u043E\u043D\u0430"}, //{"Trilion","Triliona"},
{"\u041A\u0432\u0430\u0434\u0440\u0430\u043B\u0438\u043E\u043D","\u041A\u0432\u0430\u0434\u0440\u0430\u043B\u0438\u043E\u043D\u0430"}, //{"Quadrilion","Quadriliona"},
{"\u041A\u0432\u0438\u043D\u0442\u0438\u043B\u0438\u043E\u043D","\u041A\u0432\u0438\u043D\u0442\u0438\u043B\u0438\u043E\u043D\u0430"} //{"Quintillion","Quintillion"}
};
/** Ten to Ninety */
private static final String[] tensNames = {
"",
"\u0414\u0435\u0441\u0435\u0442", // "Deset",
"\u0414\u0432\u0430\u0434\u0435\u0441\u0435\u0442", // "Dvadeset",
"\u0422\u0440\u0438\u0434\u0435\u0441\u0435\u0442", // "Trideset",
"\u0427\u0435\u0442\u0438\u0440\u0438\u0434\u0435\u0441\u0435\u0442", //"Chetirdeset",
"\u041F\u0435\u0442\u0434\u0435\u0441\u0435\u0442", // "Petdeset",
"\u0428\u0435\u0441\u0442\u0434\u0435\u0441\u0435\u0442", // "Shestdeset",
"\u0421\u0435\u0434\u0435\u043C\u0434\u0435\u0441\u0435\u0442", // "Sedemdeset",
"\u041E\u0441\u0435\u043C\u0434\u0435\u0441\u0435\u0442", // "Osemdeset",
"\u0414\u0435\u0432\u0435\u0442\u0434\u0435\u0441\u0435\u0442" // "Devetdeset"
};
/* 100-1000 */
private static final String [] hundredNames = {
"",
"\u0421\u0442\u043E", // "Sto",
"\u0414\u0432\u0435\u0441\u0442\u0430", // "Dvesta",
"\u0422\u0440\u0438\u0441\u0442\u0430", // "Trista",
"\u0427\u0435\u0442\u0438\u0440\u0438\u0441\u0442\u043E\u0442\u0438\u043D", //"Chetiristotin",
"\u041F\u0435\u0442\u0441\u0442\u043E\u0442\u0438\u043D", //"Petstotin",
"\u0428\u0435\u0441\u0442\u0441\u0442\u043E\u0442\u0438\u043D", //"Sheststotin",
"\u0421\u0435\u0434\u0435\u043C\u0441\u0442\u043E\u0442\u0438\u043D", //"Sedemstotin",
"\u041E\u0441\u0435\u043C\u0441\u0442\u043E\u0442\u0438\u043D", // "Osemstotin",
"\u0414\u0435\u0432\u0435\u0442\u0441\u0442\u043E\u0442\u0438\u043D" //"Devetstotin"
};
/** numbers to 19 */
private static final String[][] numNames = {
{"",""},
{"\u0415\u0434\u0438\u043D","\u0415\u0434\u043D\u0430"}, // {"Edin","Edna"},
{"\u0414\u0432\u0430","\u0414\u0432\u0435"}, // {"Dva","Dve"},
{"\u0422\u0440\u0438","\u0422\u0440\u0438"}, // {"Tri","Tri"},
{"\u0427\u0435\u0442\u0438\u0440\u0438","\u0427\u0435\u0442\u0438\u0440\u0438"}, //{"Chetiri","Chetiri"},
{"\u041F\u0435\u0442","\u041F\u0435\u0442"}, // {"Pet","Pet"},
{"\u0428\u0435\u0441\u0442","\u0428\u0435\u0441\u0442"}, // {"Shest","Shest"},
{"\u0421\u0435\u0434\u0435\u043C","\u0421\u0435\u0434\u0435\u043C"}, //{"Sedem","Sedem"},
{"\u041E\u0441\u0435\u043C","\u041E\u0441\u0435\u043C"}, // {"Osem","Osem"},
{"\u0414\u0435\u0432\u0435\u0442","\u0414\u0435\u0432\u0435\u0442"}, //{"Devet","Devet"},
{"\u0414\u0435\u0441\u0435\u0442","\u0414\u0435\u0441\u0435\u0442"}, //{"Deset","Deset"},
{"\u0415\u0434\u0438\u043D\u0430\u0434\u0435\u0441\u0435\u0442","\u0415\u0434\u0438\u043D\u0430\u0434\u0435\u0441\u0435\u0442"}, //{"Edinadeset","Edinadeset"},
{"\u0414\u0432\u0430\u043D\u0430\u0434\u0435\u0441\u0435\u0442","\u0414\u0432\u0430\u043D\u0430\u0434\u0435\u0441\u0435\u0442"}, //{"Dvanadeset","Dvanadeset"},
{"\u0422\u0440\u0438\u043D\u0430\u0434\u0435\u0441\u0435\u0442","\u0422\u0440\u0438\u043D\u0430\u0434\u0435\u0441\u0435\u0442"}, //{"Trinadeset","Trinadeset"},
{"\u0427\u0435\u0442\u0438\u0440\u0438\u043D\u0430\u0434\u0435\u0441\u0442","\u0427\u0435\u0442\u0438\u0440\u0438\u043D\u0430\u0434\u0435\u0441\u0442"}, //{"Cheterinadeset","Cheterinadeset"},
{"\u041F\u0435\u0442\u043D\u0430\u0434\u0435\u0441\u0435\u0442","\u041F\u0435\u0442\u043D\u0430\u0434\u0435\u0441\u0435\u0442"}, //{"Petnadeset","Petnadeset"},
{"\u0428\u0435\u0441\u0442\u043D\u0430\u0434\u0435\u0441\u0435\u0442","\u0428\u0435\u0441\u0442\u043D\u0430\u0434\u0435\u0441\u0435\u0442"}, //{"Shestnadeset","Shestnadeset"},
{"\u0421\u0435\u0434\u0435\u043C\u043D\u0430\u0434\u0435\u0441\u0435\u0442","\u0421\u0435\u0434\u0435\u043C\u043D\u0430\u0434\u0435\u0441\u0435\u0442"}, //{"Sedemnadeset","Sedemnadeset"},
{"\u041E\u0441\u0435\u043C\u043D\u0430\u0434\u0435\u0441\u0435\u0442","\u041E\u0441\u0435\u043C\u043D\u0430\u0434\u0435\u0441\u0435\u0442"}, //{"Osemnadeset","Osemnadeset"},
{"\u0414\u0435\u0432\u0435\u0442\u043D\u0430\u0434\u0435\u0441\u0435\u0442","\u0414\u0435\u0432\u0435\u0442\u043D\u0430\u0434\u0435\u0441\u0435\u0442"} //{"Devetnadest","Devetnadest"}
};
/**
*Convert Less Than One Thousand
*@param number
*@return amt
*/
private String convertLessThanOneThousand (int number,int w)
{
String soFar;
//Below 20
if (number % 100 < 20)
{
soFar = numNames[number % 100][w];
number /= 100;
}
else
{
soFar = numNames[number % 10][w];
number /= 10;
if(soFar.compareTo("") == 0){
soFar = tensNames[number % 10];
} else {
soFar = tensNames[number % 10] + " " + concat + " " + soFar;
}
number /= 10;
}
if (number == 0)
return soFar;
return hundredNames[number] + " " + soFar;
} //convertLessThanOneThousand
/**
*Convert
*@param number
*@return amt
*/
private String convert (long number)
{
/* special case */
if (number == 0)
{
return zero;
}
String prefix = "";
if (number < 0)
{
number = -number;
prefix = negative + " ";
}
String soFar = "";
int place = 0;
do
{
long n = number % 1000;
if (n != 0)
{
String s = convertLessThanOneThousand ((int)n,place == 1? 1:0);
if((place == 1) && (s.compareTo(numNames[1][1]) == 0)){
soFar = " " + majorNames[place][0] + " " + soFar;
} else {
soFar = s + " " + majorNames[place][n > 1?1:0] + " " + soFar;
}
}
place++;
number /= 1000;
}
while (number > 0);
return (prefix + soFar).trim ();
} //convert
/**************************************************************************
*Get Amount in Words
*@param amount numeric amount (352.80)
*@return amount in words (three*five*two 80/100)
*@throws Exception
*/
public String getAmtInWords (String amount) throws Exception
{
if (amount == null)
return amount;
//
StringBuffer sb = new StringBuffer ();
int pos = amount.lastIndexOf (',');
String oldamt = amount;
amount = amount.replaceAll (" ", "").replaceAll("\u00A0", "");
int newpos = amount.lastIndexOf (',');
long levs = Long.parseLong(amount.substring (0, newpos));
sb.append (convert (levs));
for (int i = 0; i < oldamt.length (); i++)
{
if (pos == i) //we are done
{
String stotinki = oldamt.substring (i + 1);
if(stotinki.length() > 2){
stotinki = stotinki.substring(0,2);
}
sb.append (" " + lev[levs ==1?0:1] + " " + concat + " ").append (convert(Long.parseLong(stotinki))).append (" \u0441\u0442\u043E\u0442\u0438\u043D\u043A\u0438"); // "lw i cents stotinki"
break;
}
}
return sb.toString ();
} //getAmtInWords
/**
*Test Print
*@param amt amount
*/
private void print (String amt)
{
try
{
System.out.println(amt + " = " + getAmtInWords(amt));
}
catch (Exception e)
{
e.printStackTrace();
}
} //print
/**
*Test
*@param args ignored
*/
public static void main (String[] args)
{
AmtInWords_BG aiw = new AmtInWords_BG();
aiw.print ("0,23");
aiw.print ("1,23");
aiw.print ("12,345");
aiw.print ("123,45");
aiw.print ("1 234,56");
aiw.print ("12 345,78");
aiw.print ("123 457,89");
aiw.print ("1 234 578,90");
aiw.print("10,00");
aiw.print("50,00");
aiw.print("100,00");
aiw.print("300,00");
aiw.print("1 000,00");
aiw.print("3 000,00");
aiw.print("10 000,00");
aiw.print("1 000 000,00");
aiw.print("100 000 000,00");
aiw.print("100 000 000 000 000 0000,00");
} //main
} //AmtInWords_BG