20#ifndef INCLUDED_UNOTOOLS_LOCALEDATAWRAPPER_HXX
21#define INCLUDED_UNOTOOLS_LOCALEDATAWRAPPER_HXX
23#include <com/sun/star/uno/Reference.hxx>
24#include <com/sun/star/uno/Sequence.hxx>
25#include <com/sun/star/i18n/LocaleItem.hpp>
26#include <com/sun/star/i18n/LocaleDataItem2.hpp>
27#include <com/sun/star/i18n/LanguageCountryInfo.hpp>
28#include <com/sun/star/i18n/ForbiddenCharacters.hpp>
29#include <com/sun/star/i18n/reservedWords.hpp>
30#include <rtl/ustring.hxx>
80 css::uno::Reference< css::uno::XComponentContext >
m_xContext;
81 css::uno::Reference< css::i18n::XLocaleData5 >
xLD;
89 OUString aLocaleItem[css::i18n::LocaleItem::COUNT2];
100 void loadDateAcceptancePatterns(
const std::vector<OUString> & rOverrideDateAcceptancePatterns);
102 const OUString& getOneLocaleItem( sal_Int16 nItem )
const;
104 const OUString& getOneReservedWord( sal_Int16 nWord )
const;
106 void loadCurrencyFormats();
108 void scanCurrFormatImpl( std::u16string_view rCode,
109 sal_Int32 nStart, sal_Int32& nSign,
110 sal_Int32& nPar, sal_Int32& nNum,
111 sal_Int32& nBlank, sal_Int32& nSym )
const;
113 void loadDateOrders();
114 LongDateOrder scanDateOrderImpl( std::u16string_view rCode )
const;
116 void ImplAddFormatNum( rtl::OUStringBuffer& rBuf,
117 sal_Int64 nNumber, sal_uInt16 nDecimals,
118 bool bUseThousandSep,
bool bTrailingZeros )
const;
120 void loadDigitGrouping();
124 const css::uno::Reference< css::uno::XComponentContext > & rxContext,
133 const std::vector<OUString> & rOverrideDateAcceptancePatterns = {}
142 const css::uno::Reference<
154 css::i18n::LanguageCountryInfo getLanguageCountryInfo()
const;
156 const css::i18n::LocaleDataItem2& getLocaleItem()
const;
158 css::uno::Sequence< css::i18n::Calendar2 > getAllCalendars()
const;
160 css::uno::Sequence< css::i18n::Currency2 > getAllCurrencies()
const;
161 css::uno::Sequence< css::i18n::FormatElement > getAllFormats()
const;
162 css::i18n::ForbiddenCharacters getForbiddenCharacters()
const;
163 const css::uno::Sequence< css::lang::Locale > & getAllInstalledLocaleNames()
const;
164 const css::uno::Sequence< OUString > & getDateAcceptancePatterns()
const;
168 static const css::uno::Sequence< css::lang::Locale > & getInstalledLocaleNames();
177 static const std::vector< LanguageType > & getInstalledLanguageTypes();
183 const std::shared_ptr< css::i18n::Calendar2 >& getDefaultCalendar()
const;
186 css::uno::Sequence< css::i18n::CalendarItem2 >
const & getDefaultCalendarDays()
const;
189 css::uno::Sequence< css::i18n::CalendarItem2 >
const & getDefaultCalendarMonths()
const;
193 bool doesSecondaryCalendarUseEC( std::u16string_view rName )
const;
205 const css::uno::Sequence< sal_Int32 >& getDigitGrouping()
const;
210 {
return getOneLocaleItem( css::i18n::LocaleItem::DATE_SEPARATOR ); }
212 {
return getOneLocaleItem( css::i18n::LocaleItem::THOUSAND_SEPARATOR ); }
214 {
return getOneLocaleItem( css::i18n::LocaleItem::DECIMAL_SEPARATOR ); }
216 {
return getOneLocaleItem( css::i18n::LocaleItem::DECIMAL_SEPARATOR_ALTERNATIVE ); }
218 {
return getOneLocaleItem( css::i18n::LocaleItem::TIME_SEPARATOR ); }
220 {
return getOneLocaleItem( css::i18n::LocaleItem::TIME_100SEC_SEPARATOR ); }
222 {
return getOneLocaleItem( css::i18n::LocaleItem::LIST_SEPARATOR ); }
224 {
return getOneLocaleItem( css::i18n::LocaleItem::SINGLE_QUOTATION_START ); }
226 {
return getOneLocaleItem( css::i18n::LocaleItem::SINGLE_QUOTATION_END ); }
228 {
return getOneLocaleItem( css::i18n::LocaleItem::DOUBLE_QUOTATION_START ); }
230 {
return getOneLocaleItem( css::i18n::LocaleItem::DOUBLE_QUOTATION_END ); }
232 {
return mapMeasurementStringToEnum( getOneLocaleItem( css::i18n::LocaleItem::MEASUREMENT_SYSTEM ) ); }
234 {
return getOneLocaleItem( css::i18n::LocaleItem::TIME_AM ); }
236 {
return getOneLocaleItem( css::i18n::LocaleItem::TIME_PM ); }
238 {
return getOneLocaleItem( css::i18n::LocaleItem::LONG_DATE_DAY_OF_WEEK_SEPARATOR ); }
240 {
return getOneLocaleItem( css::i18n::LocaleItem::LONG_DATE_DAY_SEPARATOR ); }
242 {
return getOneLocaleItem( css::i18n::LocaleItem::LONG_DATE_MONTH_SEPARATOR ); }
244 {
return getOneLocaleItem( css::i18n::LocaleItem::LONG_DATE_YEAR_SEPARATOR ); }
271 double stringToDouble( std::u16string_view aString,
bool bUseGroupSep,
272 rtl_math_ConversionStatus* pStatus, sal_Int32* pParseEnd )
const;
302 rtl_math_ConversionStatus* pStatus,
const sal_Unicode** ppParseEnd )
const;
305 const OUString& getCurrSymbol()
const;
306 const OUString& getCurrBankSymbol()
const;
307 sal_uInt16 getCurrPositiveFormat()
const;
308 sal_uInt16 getCurrNegativeFormat()
const;
309 sal_uInt16 getCurrDigits()
const;
315 OUString getDate(
const Date& rDate )
const;
316 OUString getTime(
const tools::Time& rTime,
bool bSec =
true,
317 bool b100Sec =
false )
const;
319 bool bSec =
true,
bool b100Sec =
false )
const;
330 OUString getNum( sal_Int64 nNumber, sal_uInt16 nDecimals,
331 bool bUseThousandSep =
true,
332 bool bTrailingZeros =
true )
const;
335 OUString getCurr( sal_Int64 nNumber, sal_uInt16 nDecimals,
336 std::u16string_view rCurrencySymbol,
337 bool bUseThousandSep =
true )
const;
353 {
return getOneReservedWord( css::i18n::reservedWords::TRUE_WORD ); }
355 {
return getOneReservedWord( css::i18n::reservedWords::FALSE_WORD ); }
357 {
return getOneReservedWord( css::i18n::reservedWords::ABOVE_WORD ); }
359 {
return getOneReservedWord( css::i18n::reservedWords::BELOW_WORD ); }
362 {
return getOneReservedWord( css::i18n::reservedWords::QUARTER1_ABBREVIATION + nQuarter ); }
371 if (nLocaleDataChecking == 0)
372 evaluateLocaleDataChecking();
373 return nLocaleDataChecking == 1;
378 OUString appendLocaleInfo(std::u16string_view rDebugMsg)
const;
383 static void outputCheckMessage( std::u16string_view rMsg );
384 static void outputCheckMessage(
const char* pStr);
391 const css::lang::Locale & getMyLocale()
const;
393 static void evaluateLocaleDataChecking();
Reference< XComponentContext > m_xContext
This class can be accessed without locking because we load all of the data in the constructor.
const OUString & getLongDateMonthSep() const
const OUString & getDateSep() const
const OUString & getTime100SecSep() const
sal_Unicode getCurrZeroChar() const
const OUString & getTimeSep() const
const OUString & getDoubleQuotationMarkStart() const
const css::uno::Reference< css::uno::XComponentContext > & getComponentContext() const
Get the service factory, meant to be able to create a CalendarWrapper from a LocaleDataWrapper.
const OUString & getBelowWord() const
static sal_uInt8 nLocaleDataChecking
const OUString & getTimeAM() const
const OUString & getNumThousandSep() const
const OUString & getFalseWord() const
std::vector< OUString > aReservedWords
LocaleDataWrapper(const css::uno::Reference< css::uno::XComponentContext > &rxContext, LanguageTag aLanguageTag)
static bool isNumTrailingZeros()
const OUString & getListSep() const
const OUString & getLongDateYearSep() const
const OUString & getNumDecimalSepAlt() const
const OUString & getQuarterAbbreviation(sal_Int16 nQuarter) const
return a quarter abbreviation string matching nQuarter (0..3) => "Q1" .. "Q2"
MeasurementSystem getMeasurementSystemEnum() const
const OUString & getLongDateDaySep() const
css::uno::Sequence< sal_Int32 > aGrouping
LongDateOrder nLongDateOrder
const OUString & getQuotationMarkStart() const
sal_uInt16 nCurrPositiveFormat
const OUString & getAboveWord() const
const OUString & getTimePM() const
LocaleDataWrapper(const LocaleDataWrapper &)=delete
LocaleDataWrapper & operator=(const LocaleDataWrapper &)=delete
const OUString & getDoubleQuotationMarkEnd() const
const OUString & getTrueWord() const
const OUString & getNumDecimalSep() const
static bool areChecksEnabled()
Return whether locale data checks are enabled.
css::i18n::LocaleDataItem2 aLocaleDataItem
LanguageTag maLanguageTag
static sal_uInt16 getNumDigits()
standard decimal places
static bool isNumLeadingZero()
const OUString & getQuotationMarkEnd() const
css::uno::Reference< css::uno::XComponentContext > m_xContext
sal_uInt16 nCurrNegativeFormat
css::uno::Sequence< OUString > aDateAcceptancePatterns
std::shared_ptr< css::i18n::Calendar2 > xSecondaryCalendar
std::shared_ptr< css::i18n::Calendar2 > xDefaultCalendar
css::uno::Reference< css::i18n::XLocaleData5 > xLD
const OUString & getLongDateDayOfWeekSep() const
const LanguageTag & getLanguageTag()