.NET - рджрд░реНрдж рдХреЗ рдмрд┐рдирд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдгред (рдПрди) рдЧреЗрдЯреЗрдХреНрд╕реНрдЯ + рдкреЛрдПрдбрд┐рдЯ



рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдореБрдЭреЗ WinForms рдХреЗ рд▓рд┐рдП рдпрд╛ рддреЛ * .resx рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдпрд╛ рдПрдХрддрд╛ рдХреЗ рд▓рд┐рдП I2Localization, рдпрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиред рдпреЗ рд╕рднреА рд╕рдорд╛рдзрд╛рди рд╕рдорд╛рди рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╣реИ, рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдФрд░ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдкрд╣рд▓реЗ рддреЛ рд╕рдмрдХреБрдЫ рдареАрдХ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╛рд░рд╛рдЬрд╝ рд╣реЛрдиреЗ рд▓рдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдб рдХреА рдХреБрдВрдЬреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрдм рдЖрдкрдХреЛ рдПрдХ рдмрдбрд╝реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛, рдореИрдВрдиреЗ рдпрд╣ рднреА рдирд╣реАрдВ рдХрд╣рд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред

рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдЬреИрд╕реЗ рдХрд┐ рдЧреНрдиреВ / рдЧреЗрдЯрдЯреЗрдХреНрд╕ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореМрдЬреВрдж рд╣реИред рдЬрдм рдЕрдкрдиреЗ рджреЛрд╕реНрддреЛрдВ рдФрд░ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ (рдЬреЛ .NET рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ) рд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ, рддреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд╛ рднреА рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдг рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд░рд▓ рд╣реИред рдЖрдк рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд░реЛрдд рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рдХреБрдВрдЬреА рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдкрд╛рда рдХреБрдВрдЬреА рд╣реИред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


1) Nu-get рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ NGettext рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
PM> рдЗрдВрд╕реНрдЯрд╛рд▓-рдкреИрдХреЗрдЬ NGettext

NGettext .NET рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо GNU / рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред

2) рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ:
https://github.com/neris/NGettext/blob/master/doc/examples/T.cs

рд╣рдо рдЙрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдЕрдиреБрд╡рд╛рдж рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрдВрдЧреЗ:
MyProj \ Loc \ ru-RU \ LC_Messages

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ:



3) T.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрде рдЬреЛрдбрд╝реЗрдВ:

static T() { var localesDir = Path.Combine(Directory.GetCurrentDirectory(), "Loc"); _Catalog = new Catalog("Test", localesDir, new CultureInfo("ru-RU")); } 

рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рд░реВрд╕реАред (рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рд╣реА рд╢рдмреНрджрдХреЛрд╢ рдкрдврд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ)

4) рд╣рдо рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред "рдкрд╛рда" рдХреЗ рдмрдЬрд╛рдп рд╣рдо T ._ ("рдкрд╛рда") рд▓рд┐рдЦрддреЗ рд╣реИрдВ

 namespace TestCode { static class Program { public static void Main(string[] args) { Console.WriteLine(T._("Hello, World!")); Console.WriteLine(T._("Cat")); Console.ReadKey(); } } } 

5) рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкреВрд░реЗ рдкрд╛рда рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред PoEdit рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдЕрдиреБрд╡рд╛рдж рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
рдлрд╝рд╛рдЗрд▓ -> рдмрдирд╛рдПрдБ -> LC_MESSAGES рдлрд╝реЛрд▓реНрдбрд░ -> Test.po



рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕реНрд░реЛрдд рд╕реНрдерд┐рдд рд╣реИрдВред рдЙрдирдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрдХреИрди рд╣реЛрдЧрд╛:



рдпрд╣ рднреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреАрд╡рд░реНрдб рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдП poEdit рдЦреЛрдЬреЗрдЧрд╛:



рд╣рдореЗрдВ рдЬреЛ рдЕрдиреБрд╡рд╛рдж рдЪрд╛рд╣рд┐рдП рдЙрд╕реЗ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВред



рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рдХреЙрдкреА рдХрд░реЗрдВ:
(рдЙрдиреНрд╣реЗрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд╣реА рдПрдореНрдмреЗрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ)



рд╣реЛ рдЧрдпрд╛ред рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ:



рд╕реЗрдЯрдЕрдк рддреИрдпрд╛рд░ рд╣реИред рд╢реЗрд╖ рд╕рд░рд▓ рд╣реИред рдХреЛрдб рд▓рд┐рдЦреЗрдВ - рдЕрдиреБрд╡рд╛рдж рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ


рдЖрдк рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

тЖТ WPF
тЖТ NGettext рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА
тЖТ GNU / рдЧреЗрдЯрдЯреЗрдХреНрд╕реНрдЯ рд╕реВрдЪрдирд╛

Source: https://habr.com/ru/post/hi432786/


All Articles