সংস্থানগুলি সহ একটি পৃথক প্রকল্প ব্যবহার করুন
আমি এটিকে অভিজ্ঞতার বাইরে বলতে পারি, 12 টি 24 টি প্রকল্পের সাথে বর্তমান সমাধান রয়েছে যার মধ্যে এপিআই, এমভিসি, প্রকল্প গ্রন্থাগার (কোর কার্যকারিতা), ডব্লিউপিএফ, ইউডাব্লুপি এবং জ্যামারিন রয়েছে। এটি দীর্ঘস্থায়ী পোস্টটি পড়া মূল্যহীন যেহেতু আমি মনে করি এটি করার সর্বোত্তম উপায়। ভিএস সরঞ্জামগুলির সাহায্যে সহজেই রফতানিযোগ্য এবং আমদানিযোগ্য অনুবাদ সংস্থাগুলিতে প্রেরণ করা হয় বা অন্য লোকেরা পর্যালোচনা করে।
সম্পাদনা 02/2018: এখনও শক্তিশালী হচ্ছে, এটি একটি। নেট স্ট্যান্ডার্ড লাইব্রেরিতে রূপান্তর করা এটি এমনকি নেট ফ্রেমওয়ার্ক এবং নেট কোর জুড়ে এটি ব্যবহার সম্ভব করে তোলে। আমি এটিকে JSON এ রূপান্তর করার জন্য একটি অতিরিক্ত বিভাগ যুক্ত করেছি যাতে উদাহরণস্বরূপ কৌণিক এটি ব্যবহার করতে পারে।
সম্পাদনা 2019: জামারিনের সাথে এগিয়ে যাওয়া, এটি এখনও সমস্ত প্ল্যাটফর্ম জুড়ে কাজ করে। যেমন Xamarin.forms পাশাপাশি রেক্স ফাইল ব্যবহার করার পরামর্শ দেয়। (আমি এখনও জামারিনে কোনও অ্যাপ্লিকেশন বিকাশ করতে পারি নি ms ফর্মগুলিতে, তবে ডকুমেন্টেশনগুলি কেবল এটি শুরু করার জন্য বিশদভাবে জানানো হয়েছে, এটি কভার করে: জ্যামারিন.ফর্মস ডকুমেন্টেশন )। একে এটিকে JSON এ রূপান্তর করার মতো আমরা এটিকে Xamarin.Android এর জন্য .xML ফাইলে রূপান্তর করতে পারি।
সম্পাদনা 2019 (2): ডাব্লুপিএফ থেকে ইউডাব্লুপি-তে আপগ্রেড করার সময়, আমি মুখোমুখি হয়েছি যে ইউডাব্লুপিতে তারা অন্য একটি ফাইল টাইপ ব্যবহার করতে পছন্দ করে .resw
, যা সামগ্রীর মতো বিষয়গুলির ক্ষেত্রে তবে ব্যবহারটি পৃথক। আমি এটি করার একটি ভিন্ন উপায় খুঁজে পেয়েছি যা আমার মতে, ডিফল্ট সমাধানের পরে আরও ভাল কাজ করে ।
2020 সম্পাদনা করুন: বৃহত্তর (মডিউলার) প্রকল্পগুলির জন্য কিছু পরামর্শ আপডেট করেছে যাতে একাধিক ভাষা প্রকল্পের প্রয়োজন হতে পারে।
সুতরাং, এটি পেতে দিন।
প্রো এর
- প্রায় সর্বত্র জোরালোভাবে টাইপ করা।
- ডব্লিউপিএফ-এ আপনাকে মোকাবেলা করতে হবে না
ResourceDirectories
।
- এএসপি.এনইটি, ক্লাস লাইব্রেরি, ডব্লিউপিএফ, জামারিন,। নেট কোর,। নেট স্ট্যান্ডার্ডের জন্য সমর্থিত যতদূর আমি পরীক্ষা করে দেখেছি।
- কোনও অতিরিক্ত তৃতীয় পক্ষের লাইব্রেরির প্রয়োজন নেই।
- সংস্কৃতি ফালব্যাক সমর্থন করে: en-US -> en।
- কেবল ব্যাক-এন্ডই নয়, এমভিসির জন্য .cshtML এ ডাব্লুপিএফ এবং জ্যামারিন.ফর্মের জন্য এক্সএএমএল-তেও কাজ করে।
- পরিবর্তন করে ভাষাটি সহজেই হেরফের করুন
Thread.CurrentThread.CurrentCulture
- অনুসন্ধান ইঞ্জিনগুলি বিভিন্ন ভাষায় ক্রল করতে পারে এবং ব্যবহারকারী ভাষা-নির্দিষ্ট url প্রেরণ বা সংরক্ষণ করতে পারে।
কন এর
- ডাব্লুপিএফ এক্সএএমএল কখনও কখনও বগি হয়, নতুন যুক্ত স্ট্রিংগুলি সরাসরি প্রদর্শিত হয় না। পুনর্নির্মাণ হ'ল অস্থায়ী ফিক্স (vs2015)।
- ইউডাব্লুপি এক্সএএমএল ইন্টেলিজেন্স পরামর্শগুলি প্রদর্শন করে না এবং ডিজাইনের সময় পাঠ্যটি প্রদর্শন করে না।
- আমাকে বলুন.
সেটআপ
আপনার সমাধানে ভাষা প্রকল্প তৈরি করুন, এটি মাইপ্রজেক্টের মতো একটি নাম দিন L ভাষা । রিসোর্সস নামে একটি ফোল্ডার যুক্ত করুন এবং সেই ফোল্ডারে দুটি রিসোর্স ফাইল (.resx) তৈরি করুন। এক নামক Resources.resx এবং অন্য নামক Resources.en.resx (অথবা নির্দিষ্ট জন্য .en-GB.resx)। আমার বাস্তবায়নে, আমার কাছে ডিফল্ট ভাষা হিসাবে এনএল (ডাচ) ভাষা রয়েছে, যাতে এটি আমার প্রথম ফাইলে যায় এবং ইংরেজি আমার দ্বিতীয় ফাইলে যায়।
সেটআপটির মতো দেখতে হবে:
রিসোর্স.রেক্সের বৈশিষ্ট্যগুলি অবশ্যই:
কাস্টম সরঞ্জাম নামস্থানটি আপনার প্রকল্পের নামস্থানে সেট করা আছে তা নিশ্চিত করুন। এর কারণ হ'ল ডাব্লুপিএফ-তে আপনি Resources
এক্সএএমএল-এর ভিতরে উল্লেখ করতে পারবেন না ।
এবং রিসোর্স ফাইলের ভিতরে, অ্যাক্সেস মডিফায়ারটিকে সর্বজনীনতে সেট করুন:
আপনার যদি এত বড় অ্যাপ্লিকেশন থাকে (আসুন আলাদা আলাদা মডিউল বলি) আপনি উপরের মতো একাধিক প্রকল্প তৈরির বিষয়টি বিবেচনা করতে পারেন। সেক্ষেত্রে আপনি আপনার কী এবং উত্স শ্রেণীর নির্দিষ্ট মডিউলটির সাথে উপসর্গ করতে পারেন pre একক ওভারভিউতে সমস্ত ফাইল একত্রিত করার জন্য ভিজ্যুয়াল স্টুডিওতে রয়েছে এমন সেরা ভাষা সম্পাদক ব্যবহার করুন ।
অন্য প্রকল্পে ব্যবহার করা হচ্ছে
আপনার প্রকল্পের রেফারেন্স: রেফারেন্সগুলিতে ডান ক্লিক করুন -> উল্লেখ যুক্ত করুন -> প্রকল্পগুলি \ সমাধান।
কোনও ফাইলে নেমস্পেস ব্যবহার করুন: using MyProject.Language;
ব্যাক-এন্ডে এটির মতো ব্যবহার করুন:
string someText = Resources.orderGeneralError;
যদি রিসোর্স নামে আর কিছু থাকে তবে কেবল পুরো নেমস্পেসে রেখে দিন।
এমভিসিতে ব্যবহার করছি
এমভিসিতে আপনি ভাষাটি সেট করতে পছন্দ করতে পারেন তবে আমি প্যারামিটারাইজড ইউআরএল ব্যবহার করেছি, যা এটির মতো সেটআপ করা যেতে পারে:
অন্যান্য ম্যাপিংয়ের নীচে রুটকনফিগ। সি
routes.MapRoute(
name: "Locolized",
url: "{lang}/{controller}/{action}/{id}",
constraints: new { lang = @"(\w{2})|(\w{2}-\w{2})" },
defaults: new { controller = "shop", action = "index", id = UrlParameter.Optional }
);
ফিল্টারকনফিগ.সি.এস. (যদি তাই হতে FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
পারে তবে Application_start()
পদ্ধতিতে যুক্ত করুনGlobal.asax
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ErrorHandler.AiHandleErrorAttribute());
filters.Add(new LocalizationAttribute("nl-NL"), 0);
}
}
স্থানীয়করণঅ্যাট্রিবিউট
public class LocalizationAttribute : ActionFilterAttribute
{
private string _DefaultLanguage = "nl-NL";
private string[] allowedLanguages = { "nl", "en" };
public LocalizationAttribute(string defaultLanguage)
{
_DefaultLanguage = defaultLanguage;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string lang = (string) filterContext.RouteData.Values["lang"] ?? _DefaultLanguage;
LanguageHelper.SetLanguage(lang);
}
}
ল্যাঙ্গুয়েজ হেল্পার কেবল সংস্কৃতি সম্পর্কিত তথ্য সেট করে।
public static void SetLanguage(LanguageEnum language)
{
string lang = "";
switch (language)
{
case LanguageEnum.NL:
lang = "nl-NL";
break;
case LanguageEnum.EN:
lang = "en-GB";
break;
case LanguageEnum.DE:
lang = "de-DE";
break;
}
try
{
NumberFormatInfo numberInfo = CultureInfo.CreateSpecificCulture("nl-NL").NumberFormat;
CultureInfo info = new CultureInfo(lang);
info.NumberFormat = numberInfo;
info.DateTimeFormat.DateSeparator = "/";
info.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
Thread.CurrentThread.CurrentUICulture = info;
Thread.CurrentThread.CurrentCulture = info;
}
catch (Exception)
{
}
}
.Cshtml এ ব্যবহার
@using MyProject.Language;
<h3>@Resources.w_home_header</h3>
অথবা আপনি যদি ইউএসিংগুলি সংজ্ঞায়িত করতে না চান তবে কেবল পুরো নেমস্পেসটি পূরণ করুন বা আপনি / ভিউজ / ওয়েবেকনফাইগের অধীনে নাম স্থানটি নির্ধারণ করতে পারেন:
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
...
<add namespace="MyProject.Language" />
</namespaces>
</pages>
</system.web.webPages.razor>
এই এমভিসি বাস্তবায়ন উত্স টিউটোরিয়াল: দুর্দান্ত টিউটোরিয়াল ব্লগ
মডেলগুলির জন্য শ্রেণি পাঠাগারগুলিতে ব্যবহার করা
ব্যাক-এন্ড ব্যবহার একই, তবে বৈশিষ্ট্যগুলিতে ব্যবহারের জন্য কেবল উদাহরণ
using MyProject.Language;
namespace MyProject.Core.Models
{
public class RegisterViewModel
{
[Required(ErrorMessageResourceName = "accountEmailRequired", ErrorMessageResourceType = typeof(Resources))]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
}
}
আপনার যদি পুনঃনির্ধারণকারী থাকে তবে প্রদত্ত সংস্থানটির নামটি বিদ্যমান কিনা তা স্বয়ংক্রিয়ভাবে পরীক্ষা করে দেখাবে। আপনি যদি সুরক্ষা প্রকারের পছন্দ করেন তবে আপনি এনাম তৈরি করতে টি 4 টেম্পলেট ব্যবহার করতে পারেন
ডাব্লুপিএফ ব্যবহার করা।
অবশ্যই আপনার মাইপ্রজেক্টের একটি রেফারেন্স যুক্ত করুন ang ভাষা নেমস্পেস, আমরা জানি কিভাবে এটি ব্যাক- এন্ডে ব্যবহার করতে হয়।
এক্সএএমএল-তে, একটি উইন্ডো বা ব্যবহারকারীকন্ট্রোলের শিরোনামের অভ্যন্তরে, এমন একটি নাম স্থান উল্লেখ উল্লেখ করুন lang
:
<UserControl x:Class="Babywatcher.App.Windows.Views.LoginView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:MyProject.App.Windows.Views"
xmlns:lang="clr-namespace:MyProject.Language;assembly=MyProject.Language" <!--this one-->
mc:Ignorable="d"
d:DesignHeight="210" d:DesignWidth="300">
তারপরে, একটি লেবেলের ভিতরে:
<Label x:Name="lblHeader" Content="{x:Static lang:Resources.w_home_header}" TextBlock.FontSize="20" HorizontalAlignment="Center"/>
যেহেতু এটি দৃ strongly়ভাবে টাইপ করা হয়েছে আপনি নিশ্চিত হন যে উত্সের স্ট্রিংটি বিদ্যমান। আপনার কখনও কখনও সেটআপের সময় প্রকল্পটি পুনরায় সংকলনের প্রয়োজন হতে পারে, ডাব্লুপিএফ কখনও কখনও নতুন নেমস্পেসের সাথে বগি হয়।
ডাব্লুপিএফের জন্য আরও একটি জিনিস, এর ভিতরে ভাষাটি সেট করুন App.xaml.cs
। আপনি নিজের প্রয়োগটি করতে পারেন (ইনস্টলেশন চলাকালীন চয়ন করুন) বা সিস্টেমকে সিদ্ধান্ত নিতে দিন।
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
SetLanguageDictionary();
}
private void SetLanguageDictionary()
{
switch (Thread.CurrentThread.CurrentCulture.ToString())
{
case "nl-NL":
MyProject.Language.Resources.Culture = new System.Globalization.CultureInfo("nl-NL");
break;
case "en-GB":
MyProject.Language.Resources.Culture = new System.Globalization.CultureInfo("en-GB");
break;
default:
MyProject.Language.Resources.Culture = new System.Globalization.CultureInfo("en-GB");
break;
}
}
}
ইউডাব্লিউপিতে ব্যবহার করা হচ্ছে
ইউডাব্লুপি-তে, মাইক্রোসফ্ট এই সমাধানটি ব্যবহার করে , এর অর্থ আপনার নতুন রিসোর্স ফাইল তৈরি করতে হবে। এছাড়াও আপনি পাঠ্যটি পুনরায় ব্যবহার করতে পারবেন না কারণ তারা চান যে আপনি x:Uid
আপনার সংস্থানগুলির এক্সএএমএল-এ আপনার নিয়ন্ত্রণের সেটটি তৈরি করতে পারেন । এবং আপনার সংস্থানগুলিতে আপনাকে Example.Text
একটি TextBlock
পাঠ্য পূরণ করতে হবে । আমি সমাধানটি মোটেও পছন্দ করিনি কারণ আমি আমার সংস্থান ফাইলগুলি পুনরায় ব্যবহার করতে চাই। অবশেষে আমি নিম্নলিখিত সমাধান নিয়ে এসেছি। আমি আজই এটি খুঁজে পেয়েছি (2019-09-26) তাই আমি যদি অন্য কিছু দিয়ে ফিরে আসতে পারি তবে যদি এটির সার্থকতা কাজ করে না তবে দেখা যায়।
আপনার প্রকল্পে এটি যুক্ত করুন:
using Windows.UI.Xaml.Resources;
public class MyXamlResourceLoader : CustomXamlResourceLoader
{
protected override object GetResource(string resourceId, string objectType, string propertyName, string propertyType)
{
return MyProject.Language.Resources.ResourceManager.GetString(resourceId);
}
}
এই যোগ App.xaml.cs
কন্সট্রাকটর মধ্যে:
CustomXamlResourceLoader.Current = new MyXamlResourceLoader();
আপনি যখনই নিজের অ্যাপ্লিকেশনটিতে যেতে চান, ভাষা পরিবর্তন করতে এটি ব্যবহার করুন:
ApplicationLanguages.PrimaryLanguageOverride = "nl";
Frame.Navigate(this.GetType());
ইউআইকে রিফ্রেশ করার জন্য শেষ লাইনের প্রয়োজন। আমি এখনও এই প্রকল্পে কাজ করার সময় আমি লক্ষ্য করেছি যে এটি 2 বার করার দরকার ছিল। আমি প্রথমবার ব্যবহারকারীর শুরু হওয়ার সাথে সাথে একটি ভাষা নির্বাচন শেষ করব। তবে যেহেতু এটি উইন্ডোজ স্টোরের মাধ্যমে বিতরণ করা হবে, তাই ভাষাটি সাধারণত ভাষার ভাষার সমান।
তারপরে এক্সএএমএল-এ ব্যবহার করুন:
<TextBlock Text="{CustomResource ExampleResourceKey}"></TextBlock>
কৌণিক এ এটি ব্যবহার (JSON রূপান্তর)
এখনকার দিনে উপাদানগুলির সাথে সমন্বিতভাবে কৌণিকের মতো কাঠামো তৈরি করা বেশি সাধারণ, সুতরাং সিএসটিএমএল ছাড়াই। অনুবাদগুলি জসন ফাইলে সংরক্ষণ করা হয়, আমি কীভাবে এটি কাজ করে তা কভার করতে যাচ্ছি না, আমি কৌণিক মাল্টি-ট্রান্সলেশন পরিবর্তে এনজিএক্স-অনুবাদ করার জন্য অত্যন্ত সুপারিশ করব । সুতরাং যদি আপনি অনুবাদগুলি কোনও জেএসওন ফাইলে রূপান্তর করতে চান তবে এটি বেশ সহজ, আমি একটি টি 4 টেম্পলেট স্ক্রিপ্ট ব্যবহার করি যা সংস্থান ফাইলটি একটি জসন ফাইলে রূপান্তর করে। আমি সিনট্যাক্সটি পড়তে এবং এটি সঠিকভাবে ব্যবহার করতে টি 4 এডিটর ইনস্টল করার পরামর্শ দিচ্ছি কারণ আপনার কিছু পরিবর্তন করতে হবে।
কেবলমাত্র 1 টি লক্ষণীয়: ডেটা উত্পন্ন করা, এটি অনুলিপি করা, ডেটা পরিষ্কার করা এবং অন্য ভাষার জন্য এটি তৈরি করা সম্ভব নয়। সুতরাং আপনার নীচের কোডগুলিকে আপনার যত ভাষা আছে তার চেয়ে অনেকবার অনুলিপি করতে হবে এবং '// এখানে ভাষা চয়ন করুন' এর আগে এন্ট্রি পরিবর্তন করতে হবে। বর্তমানে এটি ঠিক করার কোনও সময় নেই তবে সম্ভবত পরে আপডেট করা হবে (আগ্রহী হলে)।
পাথ: মাইপ্রোজেক্ট.ল্যাঙ্গোয়েজ / টি 4 / ক্রিয়েটলোক্যালাইজেশন.এন.টি.
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Windows.Forms" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Resources" #>
<#@ import namespace="System.Collections" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.ComponentModel.Design" #>
<#@ output extension=".json" #>
<#
var fileNameNl = "../Resources/Resources.resx";
var fileNameEn = "../Resources/Resources.en.resx";
var fileNameDe = "../Resources/Resources.de.resx";
var fileNameTr = "../Resources/Resources.tr.resx";
var fileResultName = "../T4/CreateLocalizationEN.json";
var fileResultPath = Path.Combine(Path.GetDirectoryName(this.Host.ResolvePath("")), "MyProject.Language", fileResultName);
var fileNameDestNl = "nl.json";
var fileNameDestEn = "en.json";
var fileNameDestDe = "de.json";
var fileNameDestTr = "tr.json";
var pathBaseDestination = Directory.GetParent(Directory.GetParent(this.Host.ResolvePath("")).ToString()).ToString();
string[] fileNamesResx = new string[] {fileNameEn };
string[] fileNamesDest = new string[] {fileNameDestEn };
for(int x = 0; x < fileNamesResx.Length; x++)
{
var currentFileNameResx = fileNamesResx[x];
var currentFileNameDest = fileNamesDest[x];
var currentPathResx = Path.Combine(Path.GetDirectoryName(this.Host.ResolvePath("")), "MyProject.Language", currentFileNameResx);
var currentPathDest =pathBaseDestination + "/MyProject.Web/ClientApp/app/i18n/" + currentFileNameDest;
using(var reader = new ResXResourceReader(currentPathResx))
{
reader.UseResXDataNodes = true;
#>
{
<#
foreach(DictionaryEntry entry in reader)
{
var name = entry.Key;
var node = (ResXDataNode)entry.Value;
var value = node.GetValue((ITypeResolutionService) null);
if (!String.IsNullOrEmpty(value.ToString())) value = value.ToString().Replace("\n", "");
if (!String.IsNullOrEmpty(value.ToString())) value = value.ToString().Replace("\r", "");
#>
"<#=name#>": "<#=value#>",
<#
}
#>
"WEBSHOP_LASTELEMENT": "just ignore this, for testing purpose"
}
<#
}
File.Copy(fileResultPath, currentPathDest, true);
}
#>
যদি আপনার কাছে মডিউলার অ্যাপ্লিকেশন থাকে এবং আপনি একাধিক ভাষার প্রকল্প তৈরির জন্য আমার পরামর্শ অনুসরণ করেন, তবে আপনাকে তাদের প্রত্যেকের জন্য একটি T4 ফাইল তৈরি করতে হবে। নিশ্চিত করুন যে জসন ফাইলগুলি যৌক্তিকভাবে সংজ্ঞায়িত হয়েছে, এটি হওয়ার দরকার নেই en.json
, এটিও হতে পারে example-en.json
। এনজিএক্স-অনুবাদ সহ একাধিক জসন ফাইলগুলি একত্রিত করতে এখানে নির্দেশিকাগুলি অনুসরণ করুন
Xamarin.Android এ ব্যবহার করুন
আপডেটগুলিতে উপরে বর্ণিত হিসাবে, আমি কৌনিক / জেএসওএন দিয়ে যেমন করেছি তেমন পদ্ধতি ব্যবহার করি। তবে অ্যান্ড্রয়েড এক্সএমএল ফাইলগুলি ব্যবহার করে, তাই আমি একটি টি 4 ফাইল লিখেছিলাম যা এই এক্সএমএল ফাইলগুলি তৈরি করে।
পাথ: মাইপ্রজেক্ট.ল্যাঙ্গোয়েজ / টি 4 / ক্রিয়েট অ্যাপলোক্যালাইজেশন.এন.টি.
#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Windows.Forms" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Resources" #>
<#@ import namespace="System.Collections" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.ComponentModel.Design" #>
<#@ output extension=".xml" #>
<#
var fileName = "../Resources/Resources.en.resx";
var fileResultName = "../T4/CreateAppLocalizationEN.xml";
var fileResultRexPath = Path.Combine(Path.GetDirectoryName(this.Host.ResolvePath("")), "MyProject.Language", fileName);
var fileResultPath = Path.Combine(Path.GetDirectoryName(this.Host.ResolvePath("")), "MyProject.Language", fileResultName);
var fileNameDest = "strings.xml";
var pathBaseDestination = Directory.GetParent(Directory.GetParent(this.Host.ResolvePath("")).ToString()).ToString();
var currentPathDest =pathBaseDestination + "/MyProject.App.AndroidApp/Resources/values-en/" + fileNameDest;
using(var reader = new ResXResourceReader(fileResultRexPath))
{
reader.UseResXDataNodes = true;
#>
<resources>
<#
foreach(DictionaryEntry entry in reader)
{
var name = entry.Key;
var node = (ResXDataNode)entry.Value;
var value = node.GetValue((ITypeResolutionService) null);
if (!String.IsNullOrEmpty(value.ToString())) value = value.ToString().Replace("\n", "");
if (!String.IsNullOrEmpty(value.ToString())) value = value.ToString().Replace("\r", "");
if (!String.IsNullOrEmpty(value.ToString())) value = value.ToString().Replace("&", "&");
if (!String.IsNullOrEmpty(value.ToString())) value = value.ToString().Replace("<<", "");
#>
<string name="<#=name#>">"<#=value#>"</string>
<#
}
#>
<string name="WEBSHOP_LASTELEMENT">just ignore this</string>
<#
#>
</resources>
<#
File.Copy(fileResultPath, currentPathDest, true);
}
#>
অ্যান্ড্রয়েড values-xx
ফোল্ডারগুলির সাথে কাজ করে , সুতরাং values-en
ফোল্ডারে ইংরেজির জন্য উপরে । তবে আপনাকে একটি ডিফল্টও তৈরি করতে হবে যা values
ফোল্ডারে যায় । কেবলমাত্র T4 টেমপ্লেটের উপরের অনুলিপি করুন এবং উপরের কোডটিতে ফোল্ডারটি পরিবর্তন করুন।
আপনি সেখানে যান, আপনি এখন আপনার সমস্ত প্রকল্পের জন্য একটি একক সংস্থান ফাইল ব্যবহার করতে পারেন। এটি এক্সেল ডকুমেন্টে সবকিছু রফতানি করা খুব সহজ করে দেয় এবং কাউকে এটি অনুবাদ করতে এবং এটি আবার আমদানি করতে দেয়।
এই আশ্চর্যজনক ভিএস এক্সটেনশনের জন্য বিশেষ ধন্যবাদ যা resx
ফাইলগুলির সাথে দুর্দান্ত কাজ করে। তার দুর্দান্ত কাজের জন্য তাকে অনুদান দেওয়ার কথা বিবেচনা করুন (এর সাথে আমার কিছু করার নেই, আমি কেবল এক্সটেনশনটি পছন্দ করি)।