我尝试在NopCommerce中进行更改,以便在addreess栏中包含语言我知道结果是什么问题。
当我禁用UrlRewriting时,一切正常,当我启用它时,当我使用默认语言时,一切正常,当我使用另一种非默认语言时,我遇到了问题。
我有两部分代码用于默认语言和其他语言
我改变了一点代码,所以main函数现在可以在语言之间进行选择:
public static string GetCategoryUrl(Category category, int languageId)
{
if (category == null)
throw new ArgumentNullException("category");
string seName = GetSEName(category.SEName);
if (String.IsNullOrEmpty(seName))
{
var categoryLocalized = CategoryManager.GetCategoryLocalizedByCategoryIdAndLanguageId(category.CategoryId, languageId);
if (categoryLocalized != null)
{
seName = GetSEName(categoryLocalized.Name);
}
else
{
seName = GetSEName(category.Name);
}
}
int defaultLanguage = Convert.ToInt32(SettingManager.GetSettingValue("Localization.DefaultLanguageID"));
string url = String.Empty;
string url2 = String.Empty;
//***for default language***
if (languageId == defaultLanguage)
{
url2 = SEOHelper.EnableUrlRewriting ? SettingManager.GetSettingValue("SEO.Category.UrlRewriteFormat") : "{0}Category.aspx?CategoryID={1}";
url = string.Format(url2, CommonHelper.GetStoreLocation(), category.CategoryId, seName);
}
//***for other languages***
else
{
url2 = SEOHelper.EnableUrlRewriting ? SettingManager.GetSettingValue("SEO.Category.UrlRewriteFormat2") : "{0}Category.aspx?Language={1}&CategoryID={2}";
url = string.Format(url2, CommonHelper.GetStoreLocation(), GetLocaleSubFolder(languageId), category.CategoryId, seName);
}
return url.ToLowerInvariant();
}
对于默认语言,我还有: 对于SEO.Category.UrlRewriteFormat我在数据库中有默认语言:{0} c {1} / {2}
在UrlRewriting.config中我有默认语言的规则:
没有网址重写我上面的链接看起来像 www.nopcomerce.com/category.aspx?categoryid=10
当我使用默认语言转到类别时,我的链接看起来像 的 www.nopcomerce.com/c10/somecategory
对于其他语言:
对于SEO.Category.UrlRewriteFormat2我在其他语言的数据库中:{0} {1} / c {2} / {3}
以及我拥有的其他语言
没有url重新编写其他语言的链接看起来像 www.nopcomerce.com/category.aspx?language=de&categoryid=10
当我以德语出现在同一类别时,我会有 的 www.nopcomerce.com/de/c10/somecategorylocalizedingerman
现在我知道该页面工作正常,正如我之前所说,因为当我在NopCommerce中禁用UrlRewriting时,所有语言的所有页面都能正常工作。我可以更改类别,产品和整个门户之间的语言,而且每种语言都没有问题。
但是当我启用UrlRewriting时,默认语言类别的链接工作正常( www.nopcomerce.com/c10/somecategory ),但是当我点击链接时在其他语言中,每次我点击任何链接,例如某个链接用于其他语言的类别时,显示的内容来自默认页面(就像它重定向我那里)但我看到了我想要进入的链接语言写在地址栏中( www.nopcomerce.com/de/c10/somecategorylocalizedingerman )。
我尝试了一切,但我知道结果是什么问题。有什么问题?
我也尝试在NopCommerce论坛寻求帮助,但没有任何帮助。
你可以在我开始写作的地方读到这个问题,直到我现在没有看到这个问题的部分。
http://www.nopcommerce.com/boards/t/1039/seo-and-multilingual-pages.aspx?p=1
提前感谢您的帮助。
答案 0 :(得分:0)
经过几天的折磨和几个小时后我放弃了一件事,那就是我想要的链接。
除了默认链接之外,我从未设法为语言创建链接,如下所示:
nopcommerce.com / country / category / category-of-category
我设法达到的最接近的是链接我看
nopcommerce.com / category / country / name-of-category。
我还设法制作了我们不是经典ImageButton的链接,而不是常规的超链接和链接,我偶然发现了一个有趣的问题。
NopCommerce使用cookie来改变语言。
我找到了cookie的名称,并将其写入NopContext.Current.WorkingLanguage。
以类似的方式,我还创建了一个javascript函数setCookie()
function setCookie(c_name, value, expiredays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie = c_name + "=" + escape(value) +
((expiredays == null) ? "" : ";expires=" + exdate.toUTCString());
}
在cookie中创建所选语言的日志值,并在用户单击所选语言的标志时激活。
例如
string coockie = String.Format("javascript:setCookie('{0}','{1}','{2}');", "Nop.CustomerLanguage", language.LanguageId.ToString(), new TimeSpan(365, 0, 0, 0, 0));
hpLanguage.Attributes.Add("onclick", coockie);
现在我们来到问题发生的有趣部分,我不清楚它为什么会发生。
假设我们有德语和英语
当我第一次点击德语的标志时,在地址栏中显示了一个德语链接,但内容仍然是英语。只有在第二次,(再次)我点击德语标志时,页面内容才会切换为德语。
我不明白为什么现在这件事发生在我身上?