WPF - การแปลเป็นภาษาท้องถิ่น

การแปลเป็นภาษาท้องถิ่นคือการแปลทรัพยากรของแอปพลิเคชันเป็นเวอร์ชันที่แปลเป็นภาษาท้องถิ่นสำหรับวัฒนธรรมเฉพาะที่แอปพลิเคชันรองรับ

เมื่อคุณพัฒนาแอปพลิเคชันของคุณและแอปพลิเคชันของคุณมีให้บริการในภาษาเดียวแสดงว่าคุณกำลัง จำกัด จำนวนลูกค้าและขนาดของธุรกิจของคุณ หากคุณต้องการเพิ่มฐานลูกค้าซึ่งจะเพิ่มธุรกิจของคุณด้วยผลิตภัณฑ์ของคุณจะต้องพร้อมใช้งานและเข้าถึงได้จากผู้ชมทั่วโลก คุ้มค่าlocalization ผลิตภัณฑ์ของคุณเป็นวิธีที่ดีที่สุดและประหยัดที่สุดวิธีหนึ่งในการเข้าถึงลูกค้าจำนวนมากขึ้น

ใน WPF แอปพลิเคชันที่แปลเป็นภาษาท้องถิ่นนั้นสร้างได้ง่ายมาก resxซึ่งเป็นทางออกที่ง่ายที่สุดสำหรับการแปล ลองมาดูตัวอย่างง่ายๆเพื่อทำความเข้าใจวิธีการทำงาน -

  • สร้างโปรเจ็กต์ WPF ใหม่ด้วยชื่อ WPFLocalization.

  • ในตัวสำรวจโซลูชันของคุณคุณจะเห็นไฟล์ Resources.resx ภายใต้โฟลเดอร์ Properties

  • เปลี่ยนตัวแก้ไขการเข้าถึงจากภายในเป็นสาธารณะเพื่อให้สามารถเข้าถึงได้ในไฟล์ XAML

  • ตอนนี้เพิ่มชื่อและค่าของสตริงต่อไปนี้ซึ่งเราจะใช้ในแอปพลิเคชันของเรา

  • ทำสำเนาไฟล์ Resources.resx สองชุดโดยใช้ชื่อ Resources.en.resx และ Resources.ru-RU.resx นี่คือรูปแบบการตั้งชื่อเฉพาะสำหรับภาษาและชื่อประเทศ / ภูมิภาคและสามารถพบได้ใน National Language Support (NLS) API Reference (https://msdn.microsoft.com/en-us/goglobal/bb896001.aspx ) หน้า

  • เปลี่ยนค่าใน Resources.ru-RU.resx เป็นคำภาษารัสเซียดังที่แสดงด้านล่าง

  • ไปที่หน้าต่างออกแบบแล้วลากกล่องข้อความสามช่องป้ายกำกับสามปุ่มและปุ่มสามปุ่ม

  • ในไฟล์ XAML ขั้นแรกให้เพิ่มการประกาศเนมสเปซเพื่อใช้โลคัลไลซ์รีซอร์สxmlns: p = "clr-namespace: WPFLocalization.Properties"

  • ตั้งค่าคุณสมบัติของคอนโทรลทั้งหมดตามที่แสดงด้านล่าง ในตัวอย่างนี้เราจะไม่ใช้สตริงแบบฮาร์ดโค้ดสำหรับเนื้อหาของป้ายกำกับปุ่มและชื่อของหน้าต่างในไฟล์ XAML เราจะใช้สตริงที่กำหนดไว้ในไฟล์ * .resx ตัวอย่างเช่นสำหรับ Title of window เราใช้สตริง Title ซึ่งกำหนดไว้ในไฟล์ * .resx เช่นนี้“ Title =” {x: Static p: Resources.Title} "”

  • นี่คือไฟล์ XAML ซึ่งตัวควบคุมถูกสร้างและเริ่มต้นด้วยคุณสมบัติที่แตกต่างกัน

<Window x:Class = "WPFLocalization.MainWindow" 
   xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
   xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
   xmlns:local = "clr-namespace:WPFLocalization" 
   xmlns:p = "clr-namespace:WPFLocalization.Properties"
   Title = "{x:Static p:Resources.Title}" Height = "350" Width = "604">
	
   <Grid> 
      <TextBox x:Name = "textBox" HorizontalAlignment = "Left" Height = "23" 
         Margin = "128,45,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "304"/>
			
      <Label x:Name = "label" Content = "{x:Static p:Resources.Name}"
         HorizontalAlignment = "Left" Margin = "52,45,0,0" VerticalAlignment = "Top" Width = "86"/>
			 
      <TextBox x:Name = "textBox1" HorizontalAlignment = "Left" Height = "23" 
         Margin = "128,102,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "304"/> 
			
      <Label x:Name = "label1" Content = "{x:Static p:Resources.Address}" 
         HorizontalAlignment = "Left" Margin = "52,102,0,0" VerticalAlignment = "Top" Width = "86"/>
			
      <TextBox x:Name = "textBox2" HorizontalAlignment = "Left" Height = "23" 
         Margin = "128,157,0,0" TextWrapping = "Wrap" VerticalAlignment = "Top" Width = "80"/>
			
      <Label x:Name = "label2" Content = "{x:Static p:Resources.Age}" 
         HorizontalAlignment = "Left" Margin = "52,157,0,0" VerticalAlignment = "Top" Width = "86"/>
			
      <Button x:Name = "button" Content = "{x:Static p:Resources.OK_Button}" 
         HorizontalAlignment = "Left" Margin = "163,241,0,0" VerticalAlignment = "Top" Width = "75"/> 
			
      <Button x:Name = "button1" Content = "{x:Static p:Resources.Cancel_Button}" 
         HorizontalAlignment = "Left" Margin = "282,241,0,0" VerticalAlignment = "Top" Width = "75"/>
			
      <Button x:Name = "button2" Content = "{x:Static p:Resources.Help_Button}" 
         HorizontalAlignment = "Left" Margin = "392,241,0,0" VerticalAlignment = "Top" Width = "75"/> 
   </Grid> 
	
 </Window>
  • เมื่อโค้ดด้านบนถูกคอมไพล์และดำเนินการคุณจะเห็นหน้าต่างต่อไปนี้ซึ่งมีการควบคุมที่แตกต่างกัน

  • โดยค่าเริ่มต้นโปรแกรมจะใช้ Resources.resx เริ่มต้น หากคุณต้องการแสดงข้อความในภาษารัสเซียซึ่งกำหนดไว้ในไฟล์ Resources.ru-RU.resx คุณจะต้องตั้งค่าวัฒนธรรมอย่างชัดเจนเมื่อโปรแกรมเริ่มต้นในไฟล์ App.xaml ดังที่แสดงด้านล่าง

using System.Windows;

namespace WPFLocalization {
   /// <summary> 
      /// Interaction logic for App.xaml 
   /// </summary> 
	
   public partial class App : Application {
	
      App() { 
         System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("ru-RU");
         //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en"); 
      } 
   } 
}

เมื่อคุณเรียกใช้แอปพลิเคชันคุณจะเห็นข้อความทั้งหมดเป็นภาษารัสเซีย

เราขอแนะนำให้คุณรันโค้ดด้านบนและสร้างไฟล์ resx สำหรับวัฒนธรรมอื่นด้วย