We have written a small application to import the contributed languages (will be integrated in the next release):
class Program
{
private static Encoding encoding = Encoding.UTF8;
static void Main(string[] args)
{
try
{
//your language id here
int LanguageID = 123456;
string ConnectionString = "Data Source=ANDREY-M;Initial Catalog=nopCommerce;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=dgs2002;Connect Timeout=120";
string ResourcePackagePath = @"path_to_directory_with_your_resources";
string ResourceStringFilePath = Path.Combine(ResourcePackagePath, "ResourceStrings.xml");
Dictionary<string, string> resources = GetResources(ResourceStringFilePath);
SaveResourceStrings(LanguageID, ConnectionString, resources);
List<string> templateNames = new List<string>();
templateNames.Add("Customer.EmailValidationMessage");
templateNames.Add("Customer.PasswordRecovery");
templateNames.Add("Customer.WelcomeMessage");
templateNames.Add("OrderCancelled.CustomerNotification");
templateNames.Add("OrderCompleted.CustomerNotification");
templateNames.Add("OrderPlaced.CustomerNotification");
templateNames.Add("OrderPlaced.StoreOwnerNotification");
templateNames.Add("OrderShipped.CustomerNotification");
templateNames.Add("Service.EmailAFriend");
foreach (string templateName in templateNames)
{
string templateFilePath = Path.Combine(path, templateName + ".txt");
string templateSubject = string.Empty;
string templateBody = string.Empty;
GetMessageTemplateContent(templateFilePath, out templateSubject, out templateBody);
SaveMessageTemplate(LanguageID, ConnectionString, templateName, templateSubject, templateBody);
}
}
catch (Exception exc)
{
Console.WriteLine(exc.ToString());
}
finally
{
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
static Dictionary<string, string> GetResources(string FilePath)
{
Dictionary<string, string> resources = new Dictionary<string, string>();
string Xml = File.ReadAllText(FilePath, encoding);
StringReader _sr = new StringReader(Xml);
XmlTextReader _xtr = new XmlTextReader(_sr);
_xtr.XmlResolver = null;
_xtr.WhitespaceHandling = WhitespaceHandling.None;
_xtr.Read();
if ((_xtr.NodeType == XmlNodeType.Element) && (_xtr.Name == "Language"))
{
while (_xtr.Read())
{
if ((_xtr.NodeType == XmlNodeType.Element) && (_xtr.Name == "LocaleResource"))
{
string resourceName = _xtr["Name"];
_xtr.Read();
if ((_xtr.NodeType == XmlNodeType.Element) && (_xtr.Name == "Value"))
{
_xtr.Read();
if (_xtr.NodeType == XmlNodeType.Text)
{
string resourceValue = _xtr.Value;
resources.Add(resourceName, resourceValue);
}
}
}
}
}
return resources;
}
static void SaveResourceStrings(int LanguageID, string ConnectionString, Dictionary<string, string> resources)
{
foreach (KeyValuePair<string, string> kvp in resources)
{
string resourceName = kvp.Key;
string resourceValue = kvp.Value;
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
SqlCommand command = new SqlCommand("Nop_LocaleStringResourceInsert", conn);
command.CommandType = CommandType.StoredProcedure;
SqlParameter paramLocaleStringResourceID = new SqlParameter("@LocaleStringResourceID", DBNull.Value);
command.Parameters.Add(paramLocaleStringResourceID);
SqlParameter paramLanguageID = new SqlParameter("@LanguageID", LanguageID);
command.Parameters.Add(paramLanguageID);
SqlParameter paramResourceName = new SqlParameter("@ResourceName", resourceName);
command.Parameters.Add(paramResourceName);
SqlParameter paramResourceValue = new SqlParameter("@ResourceValue", resourceValue);
command.Parameters.Add(paramResourceValue);
conn.Open();
command.ExecuteNonQuery();
conn.Close();
}
}
}
static void GetMessageTemplateContent(string TemplateFilePath, out string templateSubject, out string templateBody)
{
string[] lines = File.ReadAllLines(TemplateFilePath, encoding);
templateSubject = lines[0];
int templateBodyStartLineNumber = 1;
while (String.IsNullOrEmpty(lines[templateBodyStartLineNumber]))
templateBodyStartLineNumber++;
StringBuilder sb = new StringBuilder();
for (int i = templateBodyStartLineNumber; i < lines.Length; i++)
{
sb.Append(lines[i]);
if (i != lines.Length - 1)
sb.Append(Environment.NewLine);
}
templateBody = sb.ToString();
}
static void SaveMessageTemplate(int LanguageID, string ConnectionString,
string templateName, string templateSubject, string templateBody)
{
using (SqlConnection conn = new SqlConnection(ConnectionString))
{
int MessageTemplateID = 0;
string MessageTemplateName = string.Empty;
SqlCommand getCommand = new SqlCommand("Nop_MessageTemplateLoadAll", conn);
getCommand.CommandType = CommandType.StoredProcedure;
conn.Open();
SqlDataReader rdr = getCommand.ExecuteReader();
while (rdr.Read())
{
int _messageTemplateID = Convert.ToInt32(rdr["MessageTemplateID"]);
string _messageTemplateName = Convert.ToString(rdr["Name"]);
if (_messageTemplateName.ToLower() == templateName.ToLower())
{
MessageTemplateID = _messageTemplateID;
MessageTemplateName = _messageTemplateName;
}
}
conn.Close();
if (MessageTemplateName.ToLower() == templateName.ToLower())
{
SqlCommand saveCommand = new SqlCommand("Nop_MessageTemplateLocalizedInsert", conn);
saveCommand.CommandType = CommandType.StoredProcedure;
SqlParameter saveMessageTemplateLocalizedID = new SqlParameter("@MessageTemplateLocalizedID", DBNull.Value);
saveCommand.Parameters.Add(saveMessageTemplateLocalizedID);
SqlParameter paramMessageTemplateID = new SqlParameter("@MessageTemplateID", MessageTemplateID);
saveCommand.Parameters.Add(paramMessageTemplateID);
SqlParameter paramLanguageID = new SqlParameter("@LanguageID", LanguageID);
saveCommand.Parameters.Add(paramLanguageID);
SqlParameter paramSubject = new SqlParameter("@Subject", templateSubject);
saveCommand.Parameters.Add(paramSubject);
SqlParameter paramBody = new SqlParameter("@Body", templateBody);
saveCommand.Parameters.Add(paramBody);
conn.Open();
saveCommand.ExecuteNonQuery();
conn.Close();
}
}
}
}