MGL::System::Locale#

概要#

MGL::System::Localeは地域に依存した設定を管理するためのクラスです。言語設定や時差、数値表現などの制御はこのクラスを通して行います。

宣言#

namespace MGL::System
{
    class Locale;
}

利用例#

設定言語を英語に変更する例
MGL::System::Locale().SetLanguage(MGL::System::Language::English);
時差が反映された現在時刻を取得する例
// 現在時刻を取得
auto currentDateTime = MGL::System::Locale().GetLocalDateTime();

// トレース表示
MGL_TRACE("現在時刻: %d-%02d-%02d %02d:%02d:%02d",
            currentDateTime.year,
            currentDateTime.month,
            currentDateTime.day,
            currentDateTime.hour,
            currentDateTime.minute,
            currentDateTime.second);

// 時差を表示
MGL_TRACE("時差(秒): %d", currentDateTime.timeDifference);
現在時刻: 2024-03-24 01:51:54
時差(秒): 32400

メンバ情報#

種類

名前

内容

バージョン

関数

GetLanguage

現在の設定言語を取得

1.0.0+

関数

GetDefaultLanguage

デフォルトの設定言語を取得

1.0.0+

関数

SetLanguage

使用する言語の設定

1.0.0+

関数

GetTimeDifference

時差を取得

1.0.0+

関数

GetDefaultTimeDifference

デフォルトの時差を取得

1.0.0+

関数

SetTimeDifference

時差を設定

1.0.0+

関数

GetLocalDateTime

現在のローカル時間を取得

1.1.12+

関数

GetGroupingSize

数値の桁区切り間隔を取得

1.0.0+

関数

GetDefaultGroupingSize

数値の桁区切り間隔のデフォルト設定を取得

1.0.0+

関数

SetGroupingSize

数値の桁区切り間隔を設定

1.0.0+

関数

GetGroupingSeparator

数値の桁区切りを取得

1.0.0+

関数

GetDefaultGroupingSeparator

数値の区切り文字のデフォルト設定を取得

1.0.0+

関数

SetGroupingSeparator

数値の区切り文字を設定

1.0.0+

関数

GetDecimalSeparator

小数点記号を取得

1.0.0+

関数

GetDefaultDecimalSeparator

小数点記号のデフォルト設定を取得

1.0.0+

関数

SetDecimalSeparator

小数点記号を設定

1.0.0+


GetLanguage#

現在の設定言語を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        Language GetLanguage() const noexcept;
    };
}

戻り値#

MGL::System::Language

現在設定されている言語

説明#

現在の設定言語を取得します。

MGLは初期化時にシステムの設定言語を参照し、可能な限り適切な言語を選択して設定します。設定言語はSetLanguageにて変更可能です。

変更前のデフォルトの設定言語を取得する場合はGetDefaultLanguageを使用してください。

利用例#

// 設定言語が日本語であるかを判別する例
if (MGL::System::Locale.GetLanguage() == MGL::System::Language::Japanese)
{
    MGL_TRACE("日本語に設定中");
}
else
{
    MGL_TRACE("日本語ではない");
}

バージョン情報#

MGL 1.0.0から利用可能

関連#


GetDefaultLanguage#

デフォルトの設定言語を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        Language GetDefaultLanguage() const noexcept;
    };
}

戻り値#

MGL::System::Language

現在設定されている言語

説明#

MGL初期化時に設定された言語を取得します。

MGLは初期化時にシステムの設定言語を参照し、可能な限り適切な言語を選択して設定します。この関数はSetLanguageでは変更されず、常に初期化時に設定された言語を返します。

変更可能な設定言語を取得する場合はGetLanguageを使用してください。

利用例#

MGL::System::Locale locale;

// 使用言語を英語に設定
locale.SetLanguage(MGL::System::Language::English);

// 現在の言語が英語であるかをチェック
if (locale.GetLanguage() == MGL::System::Language::English)
{
    // ここには必ず到達する
}

// デフォルトの言語が英語であるかをチェック
if (locale.GetDefaultLanguage() == MGL::System::Language::English)
{
    // ここには到達するとは限らない(元から英語だった場合は到達する)
}

バージョン情報#

MGL 1.0.0から利用可能

関連#


SetLanguage#

使用する言語の設定

宣言#

namespace MGL::System
{
    class Locale
    {
        void SetLanguage(Language language) noexcept;
    };
}

引数#

MGL::System::Language language

設定する言語

説明#

使用する言語を変更します。

この関数で指定した言語はGetLanguageによって取得可能です。GetDefaultLanguageはこの関数では変更されません。

利用例#

// 使用言語をイタリア語に設定
MGL::System::Locale().SetLanguage(MGL::System::Language::Italiano);

バージョン情報#

MGL 1.0.0から利用可能

関連#


GetTimeDifference#

時差を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        int32_t GetTimeDifference() const noexcept;
    };
}

戻り値#

int32_t

現在設定されている時差(秒)

説明#

現在設定されている時差を秒単位で取得します。この値はMGL::System::DateTimeをUNIXエポック時間で初期化する際に、コンストラクタの第2引数timeDifferenceへとそのまま渡せます。

時差はSetTimeDifferenceにて変更可能です。システム設定から取得したデフォルトの時差を取得したい場合はGetDefaultTimeDifferenceを使用してください。

利用例#

/* ------------------------------------------------------------------------- */
/*!
 *  \brief      UNIXエポック時間を実行環境の時差で補正する例
 *  \param[in]  epochTime   UNIXエポック時間
 *  \return     時差で補正した時刻
 */
/* ------------------------------------------------------------------------- */
MGL::System::DateTime GetLocalDateTime(MGL::System::EpochTime epochTime) noexcept
{
    // MGL::System::DateTime のコンストラクタの第2引数にそのまま渡せる
    return MGL::System::DateTime(
            epochTime,
            MGL::System::Locale().GetTimeDifference());
}

ヒント

UNIXエポック時間は世界協定時を基準とした時間表現であるため、UNIXエポック時間そのものに時差を適用することは推奨されません。可能な限り時刻はUNIXエポック時間で管理し、ユーザーに表示する場合にのみMGL::System::DateTimeに変換して出力することを推奨します。

バージョン情報#

MGL 1.0.0から利用可能

関連#


GetDefaultTimeDifference#

デフォルトの時差を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        int32_t GetDefaultTimeDifference() const noexcept;
    };
}

戻り値#

int32_t

システムに設定されている時差(秒)

説明#

システムに設定されているデフォルトの時差を取得します。

この関数で取得できる時差はSetTimeDifferenceの影響を受けません。

その他の性質はGetTimeDifferenceと同様になります。

利用例#

時差を変更して表示する例
// 太平洋標準時の時差定義 (-8:00)
constexpr int32_t kTimeDifferencePST = MGL::System::Chrono::HoursToSeconds(-8);

MGL::System::Locale locale;

// 時差を太平洋標準時に変更
locale.SetTimeDifference(kTimeDifferencePST);

// デフォルトの時差と変更後の時差をトレース表示
MGL_TRACE("システムに設定された時差: %d秒", locale.GetDefaultTimeDifference());
MGL_TRACE("現在の時差: %d秒", locale.GetTimeDifference());
実行結果 (タイムゾーンに日本標準時(+9:00)を設定している場合)
システムに設定された時差: 32400秒
現在の時差: -28800秒

バージョン情報#

MGL 1.0.0から利用可能

関連#


SetTimeDifference#

時差を設定

宣言#

namespace MGL::System
{
    class Locale
    {
        void SetTimeDifference(int32_t timeDifference) noexcept;
    };
}

引数#

int32_t

設定する時差(秒)

説明#

時差の設定を変更します。引数timeDifferenceには設定する時差を秒単位で指定してください。

この関数による時差の変更は、GetTimeDifferenceおよびGetLocalDateTimeへと影響を与えます。

利用例#

時差を太平洋標準時に変更して表示する例
// 太平洋標準時の時差を定義 (-8:00)
constexpr int32_t kTimeDifferencePST = MGL::System::Chrono::HoursToSeconds(-8);

MGL::System::Locale locale;

// 現在のローカル時間を取得して表示
auto localDateTime = locale.GetLocalDateTime();
MGL_TRACE("デフォルトの時刻: %d-%02d-%02d %02d:%02d:%02d",
            localDateTime.year,
            localDateTime.month,
            localDateTime.day,
            localDateTime.hour,
            localDateTime.minute,
            localDateTime.second);

// 時差を太平洋標準時に変更
locale.SetTimeDifference(kTimeDifferencePST);

// 変更後の時間を取得して表示
auto pstDateTime = locale.GetLocalDateTime();
MGL_TRACE("太平洋標準時に変更後の時刻: %d-%02d-%02d %02d:%02d:%02d",
            pstDateTime.year,
            pstDateTime.month,
            pstDateTime.day,
            pstDateTime.hour,
            pstDateTime.minute,
            pstDateTime.second);
実行結果 (タイムゾーンに日本標準時(+9:00)を設定している場合)
デフォルトの時刻: 2024-03-24 01:43:38
太平洋標準時に変更後の時刻: 2024-03-23 08:43:38

バージョン情報#

MGL 1.0.0から利用可能

関連#


GetLocalDateTime#

現在のローカル時間を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        DateTime GetLocalDateTime() noexcept;
    };
}

戻り値#

MGL::System::DateTime

現在の時刻

説明#

現在時刻を取得します。

この関数が返す時刻はGetTimeDifferenceで取得可能な時差が適用されます。時差を含まない世界協定時での時刻を取得したい場合はMGL::System::Chrono::GetCurrentEpochTimeを使用してください。

利用例#

現在時刻を取得して表示する例
// 現在時刻を取得
auto currentDateTime = MGL::System::Locale().GetLocalDateTime();

// トレース表示
MGL_TRACE("現在時刻: %d-%02d-%02d %02d:%02d:%02d",
            currentDateTime.year,
            currentDateTime.month,
            currentDateTime.day,
            currentDateTime.hour,
            currentDateTime.minute,
            currentDateTime.second);

// 時差を表示
MGL_TRACE("時差(秒): %d", currentDateTime.timeDifference);
実行結果 (タイムゾーンに日本標準時(+9:00)を設定している場合)
現在時刻: 2024-03-24 01:51:54
時差(秒): 32400

バージョン情報#

MGL 1.1.12から利用可能

関連#


GetGroupingSize#

数値の桁区切り間隔を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        uint8_t GetGroupingSize() const noexcept;
    };
}

戻り値#

uint8_t

数値の桁区切り間隔の数

説明#

現在設定されている数値の桁区切り間隔を取得します。

桁区切り間隔はテキスト整形の際に区切り文字を挿入する間隔です。この間隔は地域によって3や4などが用いられており、多くのシステムでは変更可能な設定となっています。

テキスト整形についてはテキスト整形を参照してください。

利用例#

桁区切り間隔の表示と、その設定で数値を整形して表示する例
// 桁区切り間隔を取得して表示
MGL_TRACE("桁区切り間隔: %d", MGL::System::Locale().GetGroupingSize());

// 数値を整形して表示した場合の例
MGL_TRACE(MGL::Text::Format("数値の整形表示: {,}", 1234567890).c_str());
実行結果
桁区切り間隔: 3
数値の整形表示: 1,234,567,890

バージョン情報#

MGL 1.0.0から利用可能

関連#


GetDefaultGroupingSize#

数値の桁区切り間隔のデフォルト設定を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        uint8_t GetDefaultGroupingSize() const noexcept;
    };
}

戻り値#

uint8_t

デフォルトの桁区切り間隔

説明#

システム設定から取得したデフォルトの桁区切り間隔を取得します。この関数で取得できる間隔はSetGroupingSizeの影響を受けません。

利用例#

桁区切り間隔を3から4に変更した場合の例
MGL::System::Locale locale;

// 桁区切り間隔を4に変更
locale.SetGroupingSize(4);

// デフォルトの間隔と現在の間隔をトレース表示
MGL_TRACE("システムに設定された桁区切り間隔: %d", locale.GetDefaultGroupingSize());
MGL_TRACE("現在の桁区切り間隔: %d", locale.GetGroupingSize());
実行結果
システムに設定された桁区切り間隔: 3
現在の桁区切り間隔: 4

バージョン情報#

MGL 1.0.0から利用可能

関連#


SetGroupingSize#

数値の桁区切り間隔を設定

宣言#

namespace MGL::System
{
    class Locale
    {
        void SetGroupingSize(uint8_t groupingSize) noexcept;
    };
}

引数#

uint8_t groupingSize

設定する桁区切り間隔

説明#

数値の桁区切り間隔を指定した値に設定します。

この変更はMGL::Text::FormatMGL::Render::Font::Printなどのテキスト整形の表示結果に影響を与えます。詳細はテキスト整形を参照してください。

注釈

この関数による変更はMGLのAPIのみに適用されます。CやC++の標準APIには影響を与えない点にご注意ください。

利用例#

区切り間隔を変更して表示する例
// 表示する値
constexpr auto kTestValue = 1234567890;

MGL::System::Locale locale;

// 3桁区切りで整形して表示
locale.SetGroupingSize(3);
MGL_TRACE(MGL::Text::Format("3桁区切り: {,}", kTestValue).c_str());

// 4桁区切りで整形して表示
locale.SetGroupingSize(4);
MGL_TRACE(MGL::Text::Format("4桁区切り: {,}", kTestValue).c_str());
実行結果
3桁区切り: 1,234,567,890
4桁区切り: 12,3456,7890

バージョン情報#

MGL 1.0.0から利用可能

関連#


GetGroupingSeparator#

数値の区切り文字を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        const char *GetGroupingSeparator() const noexcept;
    };
}

戻り値#

const char *

現在の区切り文字

説明#

現在設定されている数値の区切り文字を取得します。

区切り文字はテキスト整形の際に一定間隔おきに挿入される文字です。この文字は地域によって「,」(コンマ)や「.」(ピリオド)、空白などが用いられており、多くのシステムでは変更可能な設定となっています。

テキスト整形についてはテキスト整形を参照してください。

利用例#

区切り文字の表示と、その設定で数値を整形して表示する例
// 区切り文字を取得して表示
MGL_TRACE("区切り文字: \"%s\"", MGL::System::Locale().GetGroupingSeparator());

// 数値を整形して表示した場合の例
MGL_TRACE(MGL::Text::Format("数値の整形表示: {,}", 1234567890).c_str());
実行結果
区切り文字: ","
数値の整形表示: 1,234,567,890

バージョン情報#

MGL 1.0.0から利用可能

関連#


GetDefaultGroupingSeparator#

数値の区切り文字のデフォルト設定を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        const char *GetDefaultGroupingSeparator() const noexcept;
    };
}

戻り値#

const char *

デフォルトの区切り文字

説明#

システム設定から取得したデフォルトの区切り文字を取得します。この関数で取得できる区切り文字はSetGroupingSeparatorの影響を受けません。

利用例#

区切り文字を「,」から「.」に変更する場合の例
MGL::System::Locale locale;

// 区切り文字を `.` に変更
locale.SetGroupingSeparator(".");

// デフォルトの区切り文字と現在の区切り文字をトレース表示
MGL_TRACE("システムに設定された区切り文字: \"%s\"", locale.GetDefaultGroupingSeparator());
MGL_TRACE("現在の区切り文字: \"%s\"", locale.GetGroupingSeparator());
実行結果
システムに設定された区切り文字: ","
現在の区切り文字: "."

バージョン情報#

MGL 1.0.0から利用可能

関連#


SetGroupingSeparator#

数値の区切り文字を設定

宣言#

namespace MGL::System
{
    class Locale
    {
        void SetGroupingSeparator(const char *separator) noexcept;
    };
}

引数#

const char * separator

設定する区切り文字

説明#

数値の区切り文字を指定した文字に設定します。

この変更はMGL::Text::FormatMGL::Render::Font::Printなどのテキスト整形の表示結果に影響を与えます。詳細はテキスト整形を参照してください。

注釈

この関数による変更はMGLのAPIのみに適用されます。CやC++の標準APIには影響を与えない点にご注意ください。

利用例#

数値の区切り文字を変更して表示する例
// 表示する値
constexpr auto kTestValue = 1234567890;

MGL::System::Locale locale;

// 区切り文字に ','(コンマ) を使用
locale.SetGroupingSeparator(",");
MGL_TRACE(MGL::Text::Format("\",\"(コンマ)を使用:   {,}", kTestValue).c_str());

// 区切り文字に ' '(スペース) を使用
locale.SetGroupingSeparator(" ");
MGL_TRACE(MGL::Text::Format("\" \"(スペース)を使用: {,}", kTestValue).c_str());
実行結果
","(コンマ)を使用:   1,234,567,890
" "(スペース)を使用: 1 234 567 890

バージョン情報#

MGL 1.0.0から利用可能

関連#


GetDecimalSeparator#

小数点記号を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        const char *GetDecimalSeparator() const noexcept;
    };
}

戻り値#

const char *

現在の小数点記号

説明#

現在設定されている小数点記号を取得します。

小数点記号は小数点数の整数部と小数部の区切り記号として用いられる文字です。この記号は地域によって「,」(コンマ)や「.」(ピリオド)、「」(中黒点)などが用いられており、多くのシステムでは変更可能な設定となっています。

テキスト整形についてはテキスト整形を参照してください。

利用例#

小数点記号の表示と、その設定で数値を整形して表示する例
// 小数点記号を取得して表示
MGL_TRACE("区切り文字: \"%s\"", MGL::System::Locale().GetDecimalSeparator());

// 数値を整形して表示した場合の例
MGL_TRACE(MGL::Text::Format("数値の整形表示: {.7}", MGL::Math::kPi).c_str());
実行結果
区切り文字: "."
数値の整形表示: 3.1415927

バージョン情報#

MGL 1.0.0から利用可能

関連#


GetDefaultDecimalSeparator#

小数点記号のデフォルト設定を取得

宣言#

namespace MGL::System
{
    class Locale
    {
        const char *GetDefaultDecimalSeparator() const noexcept;
    };
}

戻り値#

const char *

デフォルトの小数点記号

説明#

システム設定から取得したデフォルトの小数点記号を取得します。この関数で取得できる記号はSetGroupingSeparatorの影響を受けません。

利用例#

小数点記号を「.」から「,」に変更する場合の例
MGL::System::Locale locale;

// 小数点記号を `,` に変更
locale.SetDecimalSeparator(",");

// デフォルトの記号と現在の記号トレース表示
MGL_TRACE("システムに設定された小数点記号: \"%s\"", locale.GetDefaultDecimalSeparator());
MGL_TRACE("現在の小数点記号: \"%s\"", locale.GetDecimalSeparator());
実行結果
システムに設定された小数点記号: "."
現在の小数点記号: ","

バージョン情報#

MGL 1.0.0から利用可能

関連#


SetDecimalSeparator#

小数点記号を設定

宣言#

namespace MGL::System
{
    class Locale
    {
        void SetDecimalSeparator(const char *separator) noexcept;
    };
}

引数#

const char * separator

設定する小数点記号

説明#

小数点記号を指定した文字に設定します。

この変更はMGL::Text::FormatMGL::Render::Font::Printなどのテキスト整形の表示結果に影響を与えます。詳細はテキスト整形を参照してください。

注釈

この関数による変更はMGLのAPIのみに適用されます。CやC++の標準APIには影響を与えない点にご注意ください。

利用例#

数値の区切り文字を変更して表示する例
MGL::System::Locale locale;

// 小数点記号に '.'(ピリオド) を使用
locale.SetDecimalSeparator(".");
MGL_TRACE(MGL::Text::Format("\".\"(ピリオド)を使用: {.7}", MGL::Math::kPi).c_str());

// 小数点記号に ','(コンマ) を使用
locale.SetDecimalSeparator(",");
MGL_TRACE(MGL::Text::Format("\",\"(コンマ)を使用:   {.7}", MGL::Math::kPi).c_str());
実行結果
"."(ピリオド)を使用: 3.1415927
","(コンマ)を使用:   3,1415927

バージョン情報#

MGL 1.0.0から利用可能

関連#