KLazyLocalizedString Class

Lazy-initialized variant of KLocalizedString. More...

Header: #include <KLazyLocalizedString>
CMake: find_package(KF6 REQUIRED COMPONENTS I18n)
target_link_libraries(mytarget PRIVATE KF6::I18n)
Since: 5.89

Public Functions

KLazyLocalizedString()
KLocalizedString ignoreMarkup() const
KLocalizedString inContext(const QString &key, const QString &value) const
bool isEmpty() const
KLocalizedString relaxSubs() const
KLocalizedString subs(QChar a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const
KLocalizedString subs(const KLocalizedString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const
KLocalizedString subs(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const
KLocalizedString subs(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const
KLocalizedString subs(long a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const
KLocalizedString subs(qlonglong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const
KLocalizedString subs(qulonglong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const
KLocalizedString subs(uint a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const
KLocalizedString subs(ulong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const
KLocalizedString subs(double a, int fieldWidth = 0, char format = 'g', int precision = -1, QChar fillChar = QLatin1Char(' ')) const
QString toString() const
QString toString(Kuit::VisualFormat format) const
QString toString(const QStringList &languages) const
QString toString(const char *domain) const
const char *untranslatedText() const
KLocalizedString withDomain(const char *domain) const
KLocalizedString withFormat(Kuit::VisualFormat format) const
KLocalizedString withLanguages(const QStringList &languages) const
KLocalizedString operator KLocalizedString() const
(since 5.89) KLazyLocalizedString kli18n(const char *text)
(since 5.89) KLazyLocalizedString kli18nc(const char *context, const char *text)
(since 5.89) KLazyLocalizedString kli18ncp(const char *context, const char *singular, const char *plural)
(since 5.89) KLazyLocalizedString kli18np(const char *singular, const char *plural)
(since 5.89) KLazyLocalizedString klxi18n(const char *text)
(since 5.89) KLazyLocalizedString klxi18nc(const char *context, const char *text)
(since 5.89) KLazyLocalizedString klxi18ncp(const char *context, const char *singular, const char *plural)
(since 5.89) KLazyLocalizedString klxi18np(const char *singular, const char *plural)

Detailed Description

This is a safer replacement for the I18N_NOOP set of macros and allows marking strings for extraction without runtime-initializing KLocalizedString instances, for storing in static data tables.

Instances of KLazyLocalizedString are not created directly, unless they should be empty. Instead they have to be obtained via the kli18n* functions (similar to KLocalizedString and the ki18n* functions).

Example usage in a static message table:

struct {
    MyClass::VehicleType type;
    KLazyLocalizedString msg;
} static constexpr const vehicle_msg_table[] = {
    { MyClass::Train, kli18np("%1 train", "%1 trains") },
    { MyClass::Bus, kli18ncp("the vehicle, not the USB one", "%1 bus", "%1 buses") },
    ...
};

...

const auto it = std::find_if(std::begin(vehicle_msg_table), std::end(vehicle_msg_table), [vehicleType](const auto &m) { return m.type == vehicleType; });
QString translatedMessage = (*it).msg.subs(vehicleCount).toString();

Note: KLazyLocalizedString is primarily meant for storage in e.g. message tables, not for use in API, especially not across translation domains. This is due to it not carrying the translation domain in which it was created, but using the active translation domain at the point of converting to a KLocalizedString.

Member Function Documentation

[constexpr noexcept] KLazyLocalizedString::KLazyLocalizedString()

Construct an empty message.

Direct construction is used when e.g. a KLazyLocalizedString field in a data table needs to be set, but there is not message to be used. Directly constructed instances are not valid for finalization by toString methods.

See also isEmpty.

KLocalizedString KLazyLocalizedString::ignoreMarkup() const

Do not resolve KUIT markup.

If the message is markup-aware (constructed by one of xi18n calls), this function can be used to make it non-markup-aware. This may be useful for debugging markup.

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::inContext(const QString &key, const QString &value) const

Add dynamic context to the message.

See dyn_ctxt for use cases.

key context key

value context value

Returns updated KLocalizedString

[constexpr] bool KLazyLocalizedString::isEmpty() const

Check whether the message is empty.

The message is considered empty if the object was constructed via the default constructor.

Empty messages are not valid for finalization. The behavior of calling toString() on them is undefined. In debug mode, an error mark may appear in the returned string.

Returns true if the message is empty, false otherwise

KLocalizedString KLazyLocalizedString::relaxSubs() const

Relax matching between placeholders and arguments.

Normally the placeholders should start from %1 and have no gaps, and on finalization there must be exactly as many arguments supplied through subs methods as there are unique plaecholders. If this is not satisfied, in debug mode warnings are printed and the finalized string may contain error marks.

This method relaxes the placeholder-argument matching, such that there must only be an argument available for every present unique placeholder (taking placeholder numbers to be 1-based indices into the argument list). This can come useful in some situations.

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(QChar a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const

Substitute a QChar argument into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(const KLocalizedString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const

Substitute another KLocalizedString into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' ')) const

Substitute a QString argument into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(int a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const

Substitute an int argument into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

base the radix used to represent the number as a string. Valid values range from 2 to 36

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(long a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const

Substitute a long argument into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

base the radix used to represent the number as a string. Valid values range from 2 to 36

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(qlonglong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const

Substitute a long long argument into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

base the radix used to represent the number as a string. Valid values range from 2 to 36

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(qulonglong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const

Substitute an unsigned long long argument into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

base the radix used to represent the number as a string. Valid values range from 2 to 36

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(uint a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const

Substitute an unsigned int argument into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

base the radix used to represent the number as a string. Valid values range from 2 to 36

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(ulong a, int fieldWidth = 0, int base = 10, QChar fillChar = QLatin1Char(' ')) const

Substitute an unsigned long argument into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

base the radix used to represent the number as a string. Valid values range from 2 to 36

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::subs(double a, int fieldWidth = 0, char format = 'g', int precision = -1, QChar fillChar = QLatin1Char(' ')) const

Substitute a double argument into the message.

a the argument

fieldWidth width of the formatted field, padded by spaces. Positive value aligns right, negative aligns left

format type of floating point formatting, like in QString::arg

precision number of digits after the decimal separator

fillChar the character used to fill up the empty places when field width is greater than argument width

Returns updated KLocalizedString

QString KLazyLocalizedString::toString() const

Finalize the translation.

Creates translated QString. If the string has placeholders, make sure to call instead KLazyLocalizedString::subs and further KLocalizedString::subs methods before finalizing. Translated text is searched for based on the global locale.

Returns finalized translation

QString KLazyLocalizedString::toString(Kuit::VisualFormat format) const

Like toString(), but resolve KUIT markup into given visual format.

Given visual format overrides that implied by the context UI marker. If the message is not markup-aware, this is same as toString().

format the target visual format

Returns finalized translation

QString KLazyLocalizedString::toString(const QStringList &languages) const

Like toString(), but look for translation only in given languages.

Given languages override languages defined by the global locale. If languages is empty, original message is returned.

languages list of language codes (by decreasing priority) Returns finalized translation

QString KLazyLocalizedString::toString(const char *domain) const

Like toString(), but look for translation in the given domain.

domain the translation domain

Returns finalized translation

[constexpr] const char *KLazyLocalizedString::untranslatedText() const

Returns the raw untranslated text as passed to kli18n*.

KLocalizedString KLazyLocalizedString::withDomain(const char *domain) const

Indicate to look for translation in the given domain.

domain the translation domain

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::withFormat(Kuit::VisualFormat format) const

Indicate to resolve KUIT markup into given visual format.

If the message is not markup-aware, this has no effect.

format the target visual format

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::withLanguages(const QStringList &languages) const

Indicate to look for translation only in given languages.

languages list of language codes (by decreasing priority)

Returns updated KLocalizedString

KLocalizedString KLazyLocalizedString::operator KLocalizedString() const

Convert to a KLocalizedString to actually perform the translation and obtain a concrete localized string.

The translation domain active at this point will be used. This means this has to be called in the same translation domain the corresponding kli18n call is in.

Related Non-Members

[since 5.89] KLazyLocalizedString kli18n(const char *text)

Mark the string text for extraction.

text string to translate

Returns KLazyLocalizedString for deferred translation.

This function was introduced in 5.89.

[since 5.89] KLazyLocalizedString kli18nc(const char *context, const char *text)

Mark the string text with context for extraction.

context context of the string

text string to translate

Returns KLazyLocalizedString for deferred translation.

This function was introduced in 5.89.

[since 5.89] KLazyLocalizedString kli18ncp(const char *context, const char *singular, const char *plural)

Mark the string singular and plural with context for extraction.

context context of the string

singular singular form of the string to translate

plural plural form of the string to translate

Returns KLazyLocalizedString for deferred translation.

This function was introduced in 5.89.

[since 5.89] KLazyLocalizedString kli18np(const char *singular, const char *plural)

Mark the string singular and plural for extraction.

singular singular form of the string to translate

plural plural form of the string to translate

Returns KLazyLocalizedString for deferred translation.

This function was introduced in 5.89.

[since 5.89] KLazyLocalizedString klxi18n(const char *text)

Mark the markup-aware string text for extraction.

text string to translate

Returns KLazyLocalizedString for deferred translation.

This function was introduced in 5.89.

[since 5.89] KLazyLocalizedString klxi18nc(const char *context, const char *text)

Mark the markup-aware string text with context for extraction.

context context of the string

text string to translate

Returns KLazyLocalizedString for deferred translation.

This function was introduced in 5.89.

[since 5.89] KLazyLocalizedString klxi18ncp(const char *context, const char *singular, const char *plural)

Mark the markup-aware string singular and plural with context for extraction.

context context of the string

singular singular form of the string to translate

plural plural form of the string to translate

Returns KLazyLocalizedString for deferred translation.

This function was introduced in 5.89.

[since 5.89] KLazyLocalizedString klxi18np(const char *singular, const char *plural)

Mark the markup-aware string singular and plural for extraction.

singular singular form of the string to translate

plural plural form of the string to translate

Returns KLazyLocalizedString for deferred translation.

This function was introduced in 5.89.