Bagikan melalui


Properti System.Globalization.CultureInfo.CurrentUICulture

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Properti CurrentUICulture adalah properti per utas. Artinya, setiap utas memiliki budaya UI sendiri saat ini. Properti ini setara dengan mengambil atau mengatur objek yang CultureInfo ditetapkan ke System.Threading.Thread.CurrentThread.CurrentUICulture properti . Ketika utas dimulai, budaya UI-nya awalnya ditentukan sebagai berikut:

  • Dengan mengambil budaya yang ditentukan oleh DefaultThreadCurrentUICulture properti di domain aplikasi tempat utas dijalankan, jika nilai properti bukan null.

  • Jika utas adalah utas kumpulan utas yang menjalankan operasi asinkron berbasis tugas dan aplikasi menargetkan .NET Framework 4.6 atau versi yang lebih baru dari .NET Framework, budaya UI-nya ditentukan oleh budaya UI dari utas panggilan. Contoh berikut mengubah budaya UI saat ini menjadi Portugis (Brasil) dan meluncurkan enam tugas, yang masing-masing menampilkan ID utasnya, ID tugasnya, dan budaya UI-nya saat ini. Setiap tugas (dan utas) telah mewarisi budaya UI dari utas panggilan.

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Runtime.Versioning;
    using System.Threading;
    using System.Threading.Tasks;
    
    public class Example
    {
        public static async Task Main()
        {
            var tasks = new List<Task>();
            Console.WriteLine("The current UI culture is {0}",
                              Thread.CurrentThread.CurrentUICulture.Name);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo("pt-BR");
            // Change the current UI culture to Portuguese (Brazil).
            Console.WriteLine("Current UI culture changed to {0}",
                              Thread.CurrentThread.CurrentUICulture.Name);
            Console.WriteLine("Application thread is thread {0}",
                              Thread.CurrentThread.ManagedThreadId);
            // Launch six tasks and display their current culture.
            for (int ctr = 0; ctr <= 5; ctr++)
                tasks.Add(Task.Run(() =>
                {
                    Console.WriteLine("UI Culture of task {0} on thread {1} is {2}",
                                      Task.CurrentId,
                                      Thread.CurrentThread.ManagedThreadId,
                                      Thread.CurrentThread.CurrentUICulture.Name);
                }));
    
            await Task.WhenAll(tasks.ToArray());
        }
    }
    // The example displays output like the following:
    //     The current UI culture is en-US
    //     Current UI culture changed to pt-BR
    //     Application thread is thread 9
    //     UI Culture of task 2 on thread 11 is pt-BR
    //     UI Culture of task 1 on thread 10 is pt-BR
    //     UI Culture of task 3 on thread 11 is pt-BR
    //     UI Culture of task 5 on thread 11 is pt-BR
    //     UI Culture of task 6 on thread 11 is pt-BR
    //     UI Culture of task 4 on thread 10 is pt-BR
    
    Imports System.Globalization
    Imports System.Threading
    
    Module Example1
        Public Sub Main()
            Dim tasks As New List(Of Task)
            Console.WriteLine("The current UI culture is {0}",
                              Thread.CurrentThread.CurrentUICulture.Name)
            Thread.CurrentThread.CurrentUICulture = New CultureInfo("pt-BR")
            ' Change the current UI culture to Portuguese (Brazil).
            Console.WriteLine("Current culture changed to {0}",
                              Thread.CurrentThread.CurrentUICulture.Name)
            Console.WriteLine("Application thread is thread {0}",
                              Thread.CurrentThread.ManagedThreadId)
            ' Launch six tasks and display their current culture.
            For ctr As Integer = 0 To 5
                tasks.Add(Task.Run(Sub()
                                       Console.WriteLine("Culture of task {0} on thread {1} is {2}",
                                                         Task.CurrentId,
                                                         Thread.CurrentThread.ManagedThreadId,
                                                         Thread.CurrentThread.CurrentUICulture.Name)
                                   End Sub))
            Next
            Task.WaitAll(tasks.ToArray())
        End Sub
    End Module
    ' The example displays output like the following:
    '     The current culture is en-US
    '     Current culture changed to pt-BR
    '     Application thread is thread 9
    '     Culture of task 2 on thread 11 is pt-BR
    '     Culture of task 1 on thread 10 is pt-BR
    '     Culture of task 3 on thread 11 is pt-BR
    '     Culture of task 5 on thread 11 is pt-BR
    '     Culture of task 6 on thread 11 is pt-BR
    '     Culture of task 4 on thread 10 is pt-BR
    

    Untuk informasi selengkapnya, lihat bagian "Budaya dan operasi asinkron berbasis tugas" dalam CultureInfo dokumentasi.

  • Dengan memanggil fungsi Windows GetUserDefaultUILanguage .

Untuk mengubah budaya antarmuka pengguna yang digunakan oleh utas, atur Thread.CurrentUICulture properti ke budaya baru. Jika Anda secara eksplisit mengubah budaya UI utas dengan cara ini, perubahan tersebut tetap ada jika utas melewati batas domain aplikasi.

Catatan

Jika Anda mengatur nilai properti ke CultureInfo objek yang mewakili budaya baru, nilai Thread.CurrentThread.CurrentCulture properti juga berubah.

Dapatkan budaya UI saat ini

Properti CultureInfo.CurrentUICulture adalah pengaturan per utas; artinya, setiap utas dapat memiliki budaya UI sendiri. Anda mendapatkan budaya UI dari utas saat ini dengan mengambil nilai CultureInfo.CurrentUICulture properti, seperti yang diilustrasikan contoh berikut.

using System;
using System.Globalization;

public class Example2
{
    public static void Main()
    {
        CultureInfo culture = CultureInfo.CurrentUICulture;
        Console.WriteLine("The current UI culture is {0} [{1}]",
                          culture.NativeName, culture.Name);
    }
}
// The example displays output like the following:
//       The current UI culture is English (United States) [en-US]
Imports System.Globalization

Module Example3
    Public Sub Main()
        Dim culture As CultureInfo = CultureInfo.CurrentCulture
        Console.WriteLine("The current UI culture is {0} [{1}]",
                        culture.NativeName, culture.Name)
    End Sub
End Module
' The example displays output like the following:
'     The current UI culture is English (United States) [en-US]

Anda juga dapat mengambil nilai budaya UI utas saat ini dari Thread.CurrentUICulture properti .

Secara eksplisit mengatur budaya UI saat ini

Dimulai dengan .NET Framework 4.6, Anda dapat mengubah budaya UI saat ini dengan menetapkan CultureInfo objek yang mewakili budaya baru ke CultureInfo.CurrentUICulture properti . Budaya UI saat ini dapat diatur ke budaya tertentu (seperti en-US atau de-DE) atau ke budaya netral (seperti en atau de). Contoh berikut menetapkan budaya UI saat ini ke fr-FR atau Prancis (Prancis).

using System;
using System.Globalization;

public class Example1
{
    public static void Main()
    {
        Console.WriteLine("The current UI culture: {0}",
                          CultureInfo.CurrentUICulture.Name);

        CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");
        Console.WriteLine("The current UI culture: {0}",
                          CultureInfo.CurrentUICulture.Name);
    }
}
// The example displays output like the following:
//       The current UI culture: en-US
//       The current UI culture: fr-FR
Imports System.Globalization

Module Example2
    Public Sub Main()
        Console.WriteLine("The current UI culture: {0}",
                        CultureInfo.CurrentUICulture.Name)

        CultureInfo.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR")
        Console.WriteLine("The current UI culture: {0}",
                        CultureInfo.CurrentUICulture.Name)
    End Sub
End Module
' The example displays output like the following:
'       The current UI culture: en-US
'       The current UI culture: fr-FR

Dalam aplikasi multithread, Anda dapat secara eksplisit mengatur budaya UI dari utas apa pun dengan menetapkan CultureInfo objek yang mewakili budaya tersebut ke properti utas Thread.CurrentUICulture . Jika utas yang budayanya ingin Anda tetapkan adalah utas saat ini, Anda dapat menetapkan budaya baru ke CultureInfo.CurrentUICulture properti. Ketika budaya UI utas diatur secara eksplisit, utas tersebut mempertahankan budaya yang sama meskipun melewati batas domain aplikasi dan menjalankan kode di domain aplikasi lain.

Secara implisit mengatur budaya UI saat ini

Ketika utas, termasuk utas aplikasi utama, pertama kali dibuat, secara default budaya UI-nya saat ini diatur sebagai berikut:

  • Dengan menggunakan budaya yang ditentukan oleh DefaultThreadCurrentUICulture properti untuk domain aplikasi saat ini jika nilai properti bukan null.
  • Dengan menggunakan budaya default sistem. Pada sistem yang menggunakan sistem operasi Windows, runtime bahasa umum memanggil fungsi Windows GetUserDefaultUILanguage untuk mengatur budaya UI saat ini. GetUserDefaultUILanguage mengembalikan budaya UI default yang ditetapkan oleh pengguna. Jika pengguna belum mengatur bahasa UI default, pengguna mengembalikan budaya yang awalnya diinstal pada sistem.

Jika utas melewati batas aplikasi dan menjalankan kode di domain aplikasi lain, budayanya ditentukan dengan cara yang sama seperti utas yang baru dibuat.

Perhatikan bahwa jika Anda menetapkan budaya UI tertentu yang berbeda dari budaya UI yang diinstal sistem atau budaya UI pilihan pengguna, dan aplikasi Anda memulai beberapa utas, budaya UI saat ini dari utas tersebut akan menjadi budaya yang dikembalikan oleh GetUserDefaultUILanguage fungsi, kecuali Anda menetapkan budaya ke DefaultThreadCurrentUICulture properti di domain aplikasi tempat utas dijalankan.

Pertimbangan keamanan

Mengubah budaya utas SecurityPermission saat ini memerlukan izin dengan ControlThread kumpulan nilai.

Perhatian

Memanipulasi utas berbahaya karena status keamanan yang terkait dengan utas. Oleh karena itu, izin ini harus diberikan hanya untuk kode yang dapat dipercaya, dan kemudian hanya seperlunya. Anda tidak dapat mengubah budaya utas dalam kode semi-tepercaya.

Budaya UI saat ini dan aplikasi UWP

Di aplikasi Platform Windows Universal (UWP), CurrentUICulture properti adalah baca-tulis, sama seperti di aplikasi .NET Framework dan .NET Core; Anda dapat menggunakannya untuk mendapatkan dan mengatur budaya saat ini. Namun, aplikasi UWP tidak membedakan antara budaya saat ini dan budaya UI saat ini. Properti CurrentCulture dan CurrentUICulture memetakan ke nilai pertama dalam koleksi Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages .

Di aplikasi .NET Framework dan .NET Core, budaya UI saat ini adalah pengaturan per utas, dan CurrentUICulture properti mencerminkan budaya UI dari utas saat ini saja. Di aplikasi UWP, budaya saat ini memetakan ke properti Windows.ApplicationModel.Resources.Core.ResourceManager.DefaultContext.Languages , yang merupakan pengaturan global. Mengatur properti mengubah CurrentCulture budaya seluruh aplikasi; budaya tidak dapat diatur berdasarkan per utas.