Localization generator was developed to ease using native localization and keep all localization keys and translation in one file (csv) that is easy to read and maintain using external tools such as Excel or Google docs and outsource localization.
Table of Contents:
Example of localization files in google sheet:

- Download and extract the sources;
- Open in Visual Studio;
- Make sure that
Softeq.XToolkit.Localization.ConsoleAppis set as startup project; - Under Build menu select Publish to Folder:
- Download and extract the sources;
- Go to the source folder in the terminal;
- Build the CLI tool and save to output folder:
dotnet publish -c Release src/Softeq.XToolkit.Localization.ConsoleApp -o <OUTPUT_FOLDER>Note: Also, you can use
-roption to build platform-specific executable binaries.
Open terminal in folder with GenerateLocalization.dll and type dotnet GenerateLocalization.dll and configure using configuration options listed below separating by whitespaces.
To call help with suggestions run command dotnet GenerateLocalization.dll -h or dotnet GenerateLocalization.dll --help
Path to csv file with localization (see example below).
Columns mapping from files language columns to language codes. Mapping must be given in form of "file_column_name : language_2_letter_code" separated by space for each map. For example: "English : en" "French : fr", where "English" and "French" is a first row column names and "en" and "fr" is language codes.
Note: configuring only columns map and csv file path will result in generating only resources for all supported platforms (iOS and Android) and will be saved to
generatedfolder inside folder with calledGenerateLocalization.dll.
Option to specify for which platforms resource must be generated. Supported options are droid - to generate localization files for Android; ios - to generate localization files for iOS; and resx - to generate resx resources that is used for Xamarin.Forms and MAUI application.
Note: if you choose to generate resx files you can still use platform specific prefixes to generate platform specific values (for iOS InfoPlist prefix (--plist_prf) and --drd-prf for Android specific values).
Note: if you configure with resx option along droid option. Values xml files will be generated for droid configuration. But if you configuring only resx then android xml values files will be generated for --drd-prf keys in csv file.
Suggestion: if you configure generating resources for resx it is better to create Resources.resx files with all supported languages to let automatically generate resouece designer files and link them with in project file.
Option to provide localization interface name.
For example setting option --int ILocalization will generate interface:
public interface ILocalization
{
}To put "ILocalization" inside the namespace pass namespace name along with interface name separating it by dot. For example passing option --int MyProject.Common.Localization.ILocalization will generated interface with next content:
namespace MyProject.Common.Localization
{
public interface ILocalization
{
}
}Option to specify folder where generator must put generated localization interface. If not specified -- generated interface won't be transferred and could be found in generated folder.
Option to provide ResX localization interface implementation class name.
For example setting option --res-cls Resources will generate following class if interface option is not specified:
public class Resources
{
}If interface option specified such as --int IResources next localization class will be generated:
public class Resources : IResources
{
}To put Resources inside the namespace pass namespace name along with interface name separating it by dot. For example passing option --res-cls MyProject.Common.Localization.Resources will generated interface with next content:
namespace MyProject.Common.Localization
{
public class Resources
{
}
}if you pass localization with namespace like --int MyProject.Common.Localization.Interfaces.IResources and specify ResX localization class as --res-cls MyProject.Common.Localization.Resources you will receive next result:
using MyProject.Common.Localization.Interfaces;
namespace MyProject.Common.Localization
{
public class Resources : IResources
{
}
}Option to specify folder where generator must put generated Resources.resx files. If not specified -- generated interface won't be transferred and could be found in generated folder.
Option to specify folder where generator must put generated Resources class class set by --res-cls option with getting strings from resx file properties. If not specified -- generated interface won't be transferred and could be found in generated folder.
Option to provide iOS localization interface implementation class name.
For example setting option --ios IosLocalization will generate following class if interface option is not specified:
public class IosLocalization
{
}If interface option specified such as --int ILocalization next localization class will be generated:
public class IosLocalization : ILocalization
{
}To put IosLocalization inside the namespace pass namespace name along with interface name separating it by dot. For example passing option --ios MyProject.Ios.Localization.IosLocalization will generated interface with next content:
namespace MyProject.Ios.Localization
{
public class IosLocalization
{
}
}if you pass localization with namespace like --int MyProject.Common.Localization.ILocalization and specify iOS localization class as --ios MyProject.Ios.Localization.IosLocalization you will receive next result:
using MyProject.Common.Localization;
namespace MyProject.Ios.Localization
{
public class DroidLocalization : ILocalization
{
}
}iOS project folder where generated resources and generated localization class will be put.
Note: resources files will be transferred to
Resourcesfolder insidelanguageCode.jprojfolders
Option to specify exact folder inside iOS project folder specified by --ios-fld option where generated localization class must be put after generation.
Option to provide Android localization interface implementation class name.
For example setting option --drd DroidLocalization will generate following class if interface option is not specified:
public class DroidLocalization
{
}If interface option specified such as --int ILocalization next localization class will be generated:
public class DroidLocalization : ILocalization
{
}To put DroidLocalization inside the namespace pass namespace name along with interface name separating it by dot. For example passing option --drd MyProject.Droid.Localization.DroidLocalization will generated interface with next content:
namespace MyProject.Droid.Localization
{
public class DroidLocalization
{
}
}if you pass localization with namespace like --int MyProject.Common.Localization.ILocalization and specify Android localization class as --drd MyProject.Droid.Localization.DroidLocalization you will receive next result:
using MyProject.Common.Localization;
namespace MyProject.Droid.Localization
{
public class DroidLocalization : ILocalization
{
}
}Droid project folder where generated resources and generated localization class will be put.
Note: resources files will be transferred to
Resourcesfolder insidevalues-..folders
Option to specify exact folder inside Android project folder specified by --drd-fld option where generated localization class must be put after generation.
Option to specify Android only resource prefix that used in localization csv file.
Default prefix: Droid_
Option to specify iOS only resource prefix that used in localization csv file.
Default prefix: IOS_
Option to specify iOS InfoPlist resource prefix that used in localization csv file.
Default prefix: IosIPlist_
Option to specify default language. You must pass two letter language code that is one column mapping specified for --clmns option.
For example to specify default language as English you have to pass: --df-lng en
It will result in generating English resource files inside values folder for Android and Base.lproj folder in iOS.
Note: value of default language will be used if there is no translation for key for another language.
Option for cleaning previous generated localization files before generating new files.
Possible options is true or false.
© 2023 Softeq Development Corporation.


