[Kmymoney-devel] Another locale puzzle - CSV Importer

Allan agander93 at gmail.com
Fri May 30 11:25:10 UTC 2014


Hi Thomas

On 30/05/14 07:00, Thomas Baumgart wrote:
> Hi Allen,
>
> On Thursday 29 May 2014 12:36:42 Allan wrote:
>
>> Previously, I dealt successfully with importing with a user's locale,
>> but now I'm hitting a problem.
>>
>> I'm working on a patch to fix "[Bug 334995] CSV import Debit/Credit mode
>> only looks at one column, credits become 0.00".  I have the patch
>> working for my own locale - UK.  However, for other locales, I converted
>> my test file to use comma decimal and semi-colon separator.  This is
>> giving me grief.  What I'm trying to do is to convert a QString currency
>> amount to double, to be able to test if the amount is non-zero, as
>> against empty.
>>
>> The basic problem came as a surprise, when I found that QString was not
>> locale-aware.  I'm getting caught between QLocale and KLocale.  I am
>> setting the country to, say, France.  However, QLocale still seems to be
>> set to UK.  Things seem to work if I set QLocale::default() to France,
>> but how do I know which country the user is in?
>>
>> It looks like QLocale doesn't take account of KDE country change, but
>> retains the original system locale.  How can I get the KDE locale to
>> give a country that QLocale will accept?
>>
>> Or, am I missing the simple answer?
>
> Doesn't KLocale::readMoney(const QString &numStr, bool * ok) work for you?
>

Sadly, no.

In the importer, when importing a comma symbol file, the comma becomes a 
dot.

As a quick test, if I do -

bool OK;
       KLocale* loc = KGlobal::locale();
       QString str1 = "123.45";
       QString str2 = "123,45";
       qDebug()<<"QIFProc"<<(QString::number(loc->readMoney(str1, &OK), 
'f', 2))<<loc->country()<<loc->countryCodeToName(loc->country());
 
qDebug()<<"QIFProc"<<loc->readMoney(str2)<<loc->country()<<loc->countryCodeToName(loc->country());

the first fails, and the second gives -

QIFProc "123.45" "fr" "France".

So, it's picking up my current locale of France, but converts to UK (my 
normal locale) for some reason.

I can't see what I'm doing wrongly.  Help!

Allan



More information about the KMyMoney-devel mailing list