我已经在这个问题上苦苦挣扎了好几个月,但我还没有遇到过需要探索所有可能的选择的情况.现在,我觉得是时候了解可能性并创建我自己的个人偏好,以便在我即将开展的项目中使用.
让我先描绘一下我正在寻找的情况
我即将升级/重新开发我已经使用了很长一段时间的内容管理系统.但是,我觉得多语言是对这个系统的一个很大的改进.在我没有使用任何框架之前,我将使用Laraval4进行即将到来的项目.Laravel似乎是更简洁的PHP编码方式的最佳选择.Sidenote: Laraval4 should be no factor in your answer.我正在寻找独立于平台/框架的一般翻译方式.
应该翻译什么
由于我正在寻找的系统需要尽可能用户友好,管理翻译的方法应该在CMS内部.应该没有必要启动FTP连接来修改翻译文件或任何html/php解析模板.
此外,我正在寻找最简单的方法来翻译多个数据库表,而不需要创建额外的表.
我自己想出了什么
正如我一直在寻找,阅读和尝试自己.我有几个选择.但我仍然觉得我没有达到我真正寻求的最佳实践方法.现在,这是我想出来的,但这种方法也有它的副作用.
Controller.View.parameter.数据库表将使用字段将这些字段设置为long value.在模板内部,我们可以使用类似的排序方法echo __('Controller.View.welcome', array('name', 'Joshua')),参数包含Welcome, :name.因此结果是Welcome, Joshua.这似乎是一个很好的方法,因为参数如:name很容易被编辑器理解.languages/en_EN/Controller/View.php或.ini,最适合你的.也许.ini甚至可以在最后解析得更快.这个应该包含的数据format parameter=value;
.我想这是执行此操作的最佳方式,因为呈现的每个View都可以包含它自己的语言文件(如果存在).然后,语言参数应加载到特定视图而不是全局范围,以防止参数相互覆盖.News和News_translations)是一个选项,但是为了获得一个好的系统感觉很多.我想出的一件事是基于data versioning我写的一个系统:有一个数据库表名Translations,这个表有一个独特的组合language,tablename和primarykey.例如:en_En/News/1(参考ID = 1的新闻项目的英文版本).但是这个方法存在两个巨大的缺点:首先,这个表在数据库中有大量数据需要很长时间,其次使用这个设置搜索表是一件很麻烦的工作.例如,搜索项目的SEO slug将是一个全文搜索,这是相当愚蠢的.但另一方面:它是一种快速的方式,可以非常快速地在每个表格中创建可翻译内容,但我不相信这个专业人士会超过这个内容.所以,他们就是.我的想法到目前为止.他们甚至不包括日期等的本地化选项,但是因为我的服务器支持PHP5.3.2 +,最好的选择是使用intl扩展,如下所述:http://devzone.zend.com/1500/internationalization-in -php-53 / - 但这将在任何后期的开发体育场中使用.目前,主要问题是如何在网站上获得最佳的内容翻译实践.
除了我在这里解释的一切,我还有另一件我尚未决定的事情,它看起来像一个简单的问题,但事实上它让我头痛:
网址翻译?我们应该这样做吗?以什么方式?
所以..如果我有这个网址:http://www.domain.com/about-us …
EDIT: LAST UPDATE:
所以,我们已经测试了一些.我用过facebook开发者'lintner' http://developers.facebook.com/tools/lint/.在我的任何一个页面上都没有发现任何错误.在lint-page上的like按钮工作正常.如果我切换回自己的网站,我可以清楚地看到我的喜欢被计算在内.
奇怪的是..如果我在自己的页面上删除了类似的东西,并且神奇地能够从我自己的网站添加类似的东西.
我刚刚改变的最后一件事是将我的doctype改为STRICT // EN,因为这是我发现的与使用类似按钮和我的某些页面不同的唯一部分...
我一直在搜索这个bug一段时间,但我似乎无法找到问题所在.我用过很多页面来获取我需要的信息:
(除了这些关于类似问题的stackoverflow上的这些帖子之外)
但毕竟阅读后我仍然不确定会出错.在大多数页面上,like按钮工作正常(对我而言,至少,不确定如果有人添加了喜欢的内容,因为我还没有发现'2').
这些是具有类似按钮的当前页面:
在我的情况下,当我按下按钮时,最后一个按钮(nr 6 + 7)增加了一个,但是在我这样做之后它也会自动删除.一秒钟后会弹出一个注释框,但是在一瞬间它会逐渐消失,然后计数器会跳回到0.当我从链接1-5中删除其中一个时,会将其删除,我可以添加它没有它被删除.
对于我所读到的内容,我必须使用Facebook Javascript SDK才能使用<fb:like>标记,我已经完成了.起初我使用了一个应用程序ID,但经过一些阅读后很明显,类似按钮不需要app-id.
然后我发现了所需的元数据标签.这些是我在页面上放置的内容:
<?php if($curPicTitle != false) { ?>
<meta property="og:site_name" content="<?=URL;?>"/>
<meta property="og:type" content="article" />
<meta property="og:title" content="Fotoactie.nl: <?=$curPicTitle;?>"/>
<meta property="og:url" content="<?=URL;?>pic.php?id=<?=$pic;?>" />
<meta property="og:image" content="<?=URL;?>/photos/1/med_<?=$curPicUrl;?>"/>
<?php } ?>
Run Code Online (Sandbox Code Playgroud)
请注意PHP,只有在有效图像时才会包含它,并且标题,网址和图像对于每个页面标题图像组合都是100%唯一确定的.
然后使用PHP生成like按钮:
echo '<fb:like send="false" href="'. URL . '/pic.php?id=' . $pic . '" layout="button_count" …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的问题,但我对导致问题的原因一无所知.在我的一个应用程序中,我使用jCrop作为裁剪图像以适应横幅/标题等的小插件.这些步骤将采取:
1) Select an image (using CKFinder for this, CKFinder returns the image path to an input field)
2) Click a button to load the image
3) Crop the image
4) Save the image
Run Code Online (Sandbox Code Playgroud)
在大约75%的情况下,一切都按计划进行,但是在另外25%的情况下,jCrop无法加载裁剪区域并将其留空.这是我正在使用的jQuery代码:
jQuery('#selectimg').live('click', function(e) {
e.preventDefault();
var newsrc = jQuery('#img2').val();
jQuery('#cropbox').attr('src', newsrc);
var jcrop_api = jQuery.Jcrop('#cropbox', {
boxWidth: 700,
boxHeight: 700,
onSelect: updateCoords,
onChange: updateCoords
});
//Some other JS code come's here for buttons (they work all the time)
});
Run Code Online (Sandbox Code Playgroud)
我注意到当我把部分放在可裁剪区域中转换#cropbox的部分时,图像加载得很好,所以错误在于var = jcrop_api部件,但我慢慢开始认为没有解决方案. ..
这是我到目前为止所尝试的: …
EDIT 23-06-2012 10:24 (CET):找到答案
看看最底层的答案.这就是为我解决问题的原因.IE9正在以正确的方式呈现.IE8有一个略有不同的字体.不确定是什么字体,但看起来"OK".
Original Question:
我已经在这几个小时里苦苦挣扎了.对于我们的一个客户,我们设计了一个网店,并通过一个非正常的http连接进行开发.从2天前开始,我们在域上安装了SSL证书,并强制每个与网站的连接使用.htaccess覆盖https域
但是,出于某种原因,IE(没有版本)使用@ Font-Face渲染我们在CSS中指定的字体.以下是我们用于字体的代码:
@font-face {
font-family: 'ProximaNovaLight';
src: url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.eot');
src: url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.eot?#iefix') format('embedded-opentype'),
url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.woff') format('woff'),
url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.ttf') format('truetype'),
url('https://www.bijouterieyvette.com/font-face/proximanova-light-webfont.svg#ProximaNovaLight') format('svg');
font-weight: normal;
font-style: normal;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在使用包括https在内的字体的完整链接.我已经尝试将文件移动到域的根目录以匹配SSL证书域.我也尝试使用CSS中的相对路径,但这也没有用.
所有字体都在域中,它们都不是跨域的.
我在这里发现了另外两篇文章,描述了类似的问题,其中一个没有解决,另一个是,但它似乎不是同一个问题.在这种情况下,问题的作者必须将Access-Control-Allow-Origin标头添加到woff/ttf/otf/svg的文件请求中.我还将这些标题添加到我的.htaccess中以确保:
<FilesMatch "\.(woff|ttf|otf|svg)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
Run Code Online (Sandbox Code Playgroud)
我有点用尽了选项.我不是服务器配置类型的人,但更多的是PHP/MySQL/jQuery所以我想我的想法与SO上的其他人相比相当有限.
如果有人有一个值得尝试的选项,请告诉我!
UPDATE 22-06-2012:
如果我将https更改为http并刷新IE中的页面,系统会提示我有非安全内容的消息,我可以选择接受此内容.如果我选择'是'我的内容正在加载...字体可用!Yay ..但是..如果我将其改回https,字体会再次消失.
不知道我可以从中学到什么(笑),但也许这给了一个小小的想法..
UPDATE 22-06-2012 #2:
到目前为止,我尝试过:
URL( '//协议/相对/ font.eot'); URL( '../文件/相对/ font.eot'); URL( '/域/相对/ font.eot'); URL( 'HTTPS://www.secure.tld/font.eot'); URL( 'HTTP://www.normal.tld/font.eot'); (可以使用弹出窗口"在IE中包含非安全项目)
我还尝试创建一个重写文件,强制将FilesMatch(woff,ttf,otf,eot,svg)转换为http://连接.这没有像我想象的那样起作用,我也没有任何线索,它做了什么......
我还补充说:
AddType application/vnd.ms-fontobject .eot
AddType font/truetype .ttf
AddType …Run Code Online (Sandbox Code Playgroud) 我今天一直在使用CodeMirror来创建一个小环境,我可以编辑一些存储在数据库中的PHP代码(是的,我知道这可能有害,但普通用户无法访问PHP代码).
Everythings工作得很好,编辑工作,代码突出显示工作,缩进标签工作,但有一件事困扰我一段时间,我似乎无法找到解决方案.我的CodeMirror编辑器textarea中的代码比textarea长,超出了textarea,并且会在我的屏幕之外的某处消失(请参阅本文末尾的屏幕截图).
我想让这段代码继续在下面一行(不添加额外的麻布).这是一个已知问题和/或易于修复?
这是一个截图:http: //www.pendemo.nl/codemirror.png
提前致谢.
//编辑:它是固定的
好吧,弄清楚了,好像都在CSS文件中!以下是对任何有兴趣的人的修复:
.CodeMirror {
overflow-y: auto;
overflow-x: scroll;
width: 700px;
height: auto;
line-height: 1em;
font-family: monospace;
_position: relative; /* IE6 hack */
}
Run Code Online (Sandbox Code Playgroud)
overflow-y:auto(高度自动完成,所以不需要垂直滚动条).overflow-x:scroll; 强制CodeMirror添加滚动条而不是超出textarea的宽度.并且它们给出固定宽度(px或百分比).你也可以添加一个最大高度,但如果你这样做,你可能需要设置overflow-y来滚动aswel.
重要说明:以下问题并不意味着打破任何数据版权.所有已爬网和已保存的数据都直接链接到源.
嗨,大家好!
对于客户,我正在收集有关构建搜索引擎/网络蜘蛛组合的信息.我确实有使用特定深度索引网页内部链接的经验.我也有从网页上抓取数据的经验.但是,在这种情况下,音量大于我的经验,因此我希望在最佳实践中获得一些知识和见解.
首先,我需要明确的是,客户端将提供一个将被编入索引的网站列表.所以,实际上是一个垂直搜索引擎.结果只需要有链接,标题和说明(就像Google显示结果的方式).此搜索引擎的主要目的是使访问者更容易搜索大量网站和结果,以找到他们需要的内容.
So:网站A包含一堆链接 - >将所有链接与元数据一起保存.
其次,有一个更具体的搜索引擎.也可以将所有链接编入索引(让我们称之为)文章,这些文章分布在许多较小的网站上,与最终在垂直搜索引擎中的网站相比,文章数量较少.原因很简单:在这些页面上找到的文章必须尽可能详细地删除.这是第一个问题所在:为每个网站编写一个刮刀需要花费大量时间,需要收集的数据例如是:城市名称,文章日期,文章标题.So:网站B包含比网站A更详细的文章,我们将索引这些文章并抓取有用的数据.
我的脑海中确实有一种方法可行,但这涉及为每个网站编写一个刮刀,实际上它是我现在能想到的唯一解决方案.由于每个页面的DOM完全不同,我认为没有选择构建一个傻瓜式的算法来搜索DOM并"知道"页面的哪个部分是一个位置(但是......如果你可以匹配文本,它是可能的反对完整的城市名单).
我想到的一些事情:
垂直搜索引擎
页面抓取
the city name lies in "#content .about .city".数据冗余
蜘蛛/爬虫的一个重要部分是防止它索引重复数据.我希望做的是跟踪爬虫开始索引网站的时间以及何时结束,然后我还会跟踪文章的"上次更新时间"(基于文章的URL)并删除所有早于爬网开始时间的文章.因为据我所知,这些文章不再存在.
由于我的客户列出了"好的来源"(阅读:带有独特文章的页面),因此使用页面抓取工具可以更轻松地恢复数据.垂直搜索引擎的数据冗余更难,因为被索引的站点已经从"好的来源"中选择了自己的艺术作品.因此,多个站点有可能从相同的来源中进行选择.
如何使结果可搜索
这是一个除了如何抓取和抓取页面之外的问题,因为一旦所有数据都存储在数据库中,就需要高速搜索.与一些竞争相比,将要保存的数据量仍然是未知的,我的客户有大约10,000个较小记录(垂直搜索)和可能有更多详细信息的4,000个更大记录.
据我所知,与您可能正在使用的某些数据库相比,这仍然是一个小数目.但最终可能有多达10-20个搜索字段,用户可以使用查找他们正在寻找的内容.由于高流量和大量搜索,我可以想象使用常规MySQL查询进行搜索并不是一个聪明的主意.
到目前为止,我已经找到了SphinxSearch和ElasticSearch.我没有和他们中的任何人合作,也没有真正研究过这两者的可能性,只有我知道的是,两者都应该在数据中的大量和更大的搜索查询中表现良好.
总结一下
总结一下,这里有一个问题的候选名单:
我希望我把所有事情都说清楚了,对于大量的文字我很抱歉.我想它确实表明我已经花了一些时间试图弄清楚自己.
我现在使用PHPMailer已经有一段时间没有任何问题,但上周我在网站上安装了我的一个CMS,而且客户端坚持要收到2封电子邮件,收到他网站联系表格的内容.
好吧,我没想过,只需使用$ phpmailer-> AddAddress()函数添加电子邮件地址.但是,添加第二个接收器会导致PHPMailer将邮件两次发送到两个接收器.我尝试添加第三个接收器,看看我是否得到它三次,但这并没有改变任何东西.因此,添加2个以上的接收器会导致PHPMailer将消息两次发送到所有接收器.
我的代码中没有什么奇怪的.这是一个基本的PHPMailer示例:
$mail = new PHPMailer();
$mail->AddReplyTo("name@yourdomain.com","First Last");
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddAddress("info@address.com");
$mail->AddAddress("info@address.nl");
$mail->Subject = "PHPMailer Test Subject via mail(), basic";
$mail->Send();
Run Code Online (Sandbox Code Playgroud)
我已经没有选择了.我完全不知道哪里出错了.
提前致谢
-
只是一些随意的想法:我注意到邮件是iso-8859-1默认,我的网站运行utf8.服务器本身可以进行"静默"重定向吗?
//编辑,^^解决了我的问题
// EDIT2:
好吧,它没有...今天脚本工作正常(只有1个邮件有2个接收器)但不久前这个奇怪的行为又开始了.有小费吗?
//解决方案:
好的,我觉得安静愚蠢!答案Zulkhaery Basrul最接近实际问题!这就是发生的事情:我正在向"to"字段中的多个地址发送电子邮件.例如:
致:A,B,C
A/B都是我自己的地址.在outlook中,我有一些消息规则可以将特定文件夹中的某些收件人的电子邮件放入其中.A和B都有这个规则.
当我收到我的电子邮件时,两封邮件都包含了to-field中的mailaddresses.导致两个邮件都满足两个规则的规则要求.因此,将原件保存在一个文件夹中并在另一个文件夹中创建一个副本(两次).
谢谢你的想法:)
最近我盯着解密hotmail收件箱/垃圾文件夹放置.经过长时间的搜索,我发现Hotmail/Outlook正在使用他们在每封邮件中输入的X-Message-Delivery标签来确定很多东西.如果您转到电子邮件来源,您可以看到类似于此的X-Message-Delivery:
Vj0xLjE7dXM9MDtsPTE7YT0wO0Q9MjtHRD0yO1NDTD00
如果你BASE64解码它你得到
V=1.1;us=0;l=1;a=0;D=2;GD=2;SCL=4
根据我的研究,我发现以下事情导致邮件进入垃圾文件夹,
If "D=x" is higher then 1
If "GD=x" is higher then 1
If "SCL=x" is higher then 0
Run Code Online (Sandbox Code Playgroud)
除此之外,我发现V = 1.1总是相同的,并且在我收到的任何电子邮件中都没有变化(或至少我检查的那些)
我认为"a = x"意味着如果发送者在接收者地址簿中,或者接收者至少知道.如果它的0是一个新的发送者,因此更有可能进入垃圾文件夹,如果它的a = 1,它有助于进入收件箱.
我认为l = 1或l = 0有一些东西可以使用,如果图像在打开时被阻止或不被这个发送者阻止.虽然我没有发现这一点非常一致.
你们有谁知道,这些标签代表什么?
D=
GD=
us=
Run Code Online (Sandbox Code Playgroud)
如果你这样做,你也知道它们会从0变为1或2吗?
感谢你!
好吧,我知道标题可能有点奇怪.但我不知道怎么说.基本上它归结为一些简单的东西,但有时候只是一个开发人员让你质疑并让你想与其他开发人员讨论它.
快速介绍问题:我将基于流行的PHP框架重新开始我的CMS(Fyi:Laravel是我的选择).CMS将是模块化的(博客,用户,页面,表格等),但我也希望网站所有者可以管理网站导航.这是我开始考虑这样做的最佳实践的地方.
到目前为止,我所想的是创建一个接口"使用MenuBuilder",它定义了需要已知产生一个给定模块菜单链接的方法.所以,假设我的BlogModule有一个类BlogMenuBuilder.
MenuBuilder类将有一个方法来构建基于none或一些参数(如记录ID)的链接,生成所有链接的方法,为下拉列表生成选项数组的方法等.
然后MenuModule将类名和可选参数保存到表中,连同菜单位置(顶部,页脚,侧边栏等),我可以调用MenuModule::build('top'),此函数将找到所有链接,按顺序排序,并通过调用构建链接BlogMenuBuilder::link('type', $optional_parameters);.在这种情况下,类型将是Laravel框架中的命名路由.最终,MenuModule :: build()方法将缓存,而不是每次都必须再次构建它.
我是否接近最佳做法?我觉得我正朝着正确的方向前进,但由于我没有其他开发人员认为这件事我希望从SO获得一些可用的反馈.
谢谢你的时间!
我一直在制作一个Frame破坏破坏者(名字中有什么,呵呵),它让我的用户保持在我的页面上并打开一个带有目标URL的新窗口.我正在使用Lightbox脚本来显示iframe,这就是我正在做的事情:
1)为所有.lightbox点击添加了一个事件,fe:
$('.lightbox').live("click", function(e) {
e.preventDefault();
$('#redirectURL').val($(this).attr('href'));
$(this).lightbox();
}
Run Code Online (Sandbox Code Playgroud)
2)增加了一个破坏框架的破坏者:
<script type="text/javascript">
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://server-which-responds-with-204.com'
}
}, 1)
</script>
Run Code Online (Sandbox Code Playgroud)
3)修改了帧破坏破坏代码以满足我的需求,它们是:
window.open( $('#redirectURL', '_blank' );$('.jquery-lightbox-button-close').click();到目前为止,这是我提出的:
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2;
redirectURL = $('#redirectURL').val();
if(redirectURL != "") {
window.top.location = 'http://www.****.com/ajax/nocontent.php'; …Run Code Online (Sandbox Code Playgroud) 对于我的一位客户,我一直在为他的客户开发邮件系统.他的客户一直在他们的商店收集电子邮件,并希望偶尔开始使用这些邮件.
我知道所有可能出错的事情,但据我所知,我们已经完全覆盖了我们能够做到的最佳方式.我们使用SMTP(Authenticated)将电子邮件发送给客户,电子邮件是签名服务器端,我们将邮件分成每5分钟最多25个邮件,将邮件头发送到选择退出位置,等等.想象一下,这只是关于我必须要处理的所有事情的冰山一角......但我警告我的客户他可能更好地使用像MailChimp这样的现有应用程序,但他坚持自己这样做.
在我们的测试版开发完成后,我们已经进行了一些测试,事实上所有事情都进展顺利.没有任何垃圾邮件问题,所有邮件都可以在不同的客户端阅读,等等.
但是,有一件事现在有点困难......编辑!我们正在为客户创建模板(1个模板,6个样式).我们的客户可以将这些加载到他们的编辑器中并编辑内部文本.至于我们(和客户端)可以看到,一切都很顺利,但编辑器不会创建电子邮件友好的HTML代码(我应该知道......)
我在网上搜索了一些文章/操作方法,但是找不到这个.
目前我们正在使用CKEditor(编辑)和KCFinder(图像插件).据我所知,CKEditor是最好的免费WYSIWYG可用......但它对电子邮件编辑有用吗?
我注意到一些公司使用自定义编辑器(MailChimp),其他人使用TinyMCE(Enormail.eu).
任何人都有好的推荐?或者CKeditor是最好的选择,但我是否需要修改一些设置以获得最佳的邮件html代码?
提前致谢!
我对我开发的其中一个网站有一点问题.问题很简单,但解决方案似乎有点困难.
问题
问题是页面首先应该在移动设备上呈现,但在页面加载完成后,页面会调整大小以适应视口.没什么奇怪的,这几乎发生在每个没有响应的网站上.但奇怪的是,只有75%的可用宽度被使用.
我已经将设计的基础/切片版本与生产版本进行了比较.基础版本确实渲染(100%宽度).我试图发现CSS中的差异,但我只能找到一对,我尝试重置那些,但这不起作用.
此外,我试图禁用javascript(它只是Lightbox和1 JqueryUI"AddClass"效果).javascript效果只有1个任务:在页面加载后,标题将从480px调整为220px高度.页面上的任何元素的宽度都没有变化.
最后但并非最不重要的是,我启动了Adobe Edge Inspect,并查看了移动设备的页面源.但不幸的是,我无法发现页面上超出"body"标签宽度的任何元素.唯一超过宽度的是标题图像,但图像在div(100%宽度)内overflow:hidden
基础和生产版本
如果有人愿意看一下弄乱渲染的东西,那就太棒了.我似乎无法找出导致问题的原因.
基于(工作):http://www.nambi.nl/lefunq/
生产(在移动设备上以75%的宽度渲染):http://www.lefunq.com/_index.php
感谢每个花时间研究这个问题的人.
我一直在努力解决这个问题.我的一个CMS'已准备好使用翻译模块进行扩展.我一直在考虑不同的方法,但还没有弄清楚到目前为止最好的方法是什么.
基本上我有一个CMS,它使用模板系统将数据库中的所有数据解析到屏幕上.我到目前为止已将我的模板"拆分"到不同的文件夹中,以便能够翻译像文本,页脚链接等图像一样的"静态"内容.
但是,有许多模块(页面,新闻,产品)具有多个字段,需要转换数据库驱动的方法.我从一个描述语言(id,iso_code,name)的"语言"表开始.就我而言......因为有几个项目必须要完成,所以到目前为止我还没有花更多的时间来讨论这个问题.
我的第一个想法("快速修复")是在表格中添加多个字段(例如"title_nl","title_en"),但这实际上使得数据库比我认为的需要更加拥挤.
我的第二个想法是创建一个表,例如"news_translations".其中包含语言iso代码,news_id,需要翻译的字段.显然,news_id将翻译连接到原始文件,语言iso代码用于从数据库中获取正确的语言.然后在我的前端代码中,我首先检查是否选择了默认语言(=>从"新闻"表中选择)或翻译(=>检查翻译表内).如果第二种情况没有返回任何结果,则会显示一条消息"抱歉,没有可用的翻译"并显示默认值(或错误消息,最适合客户的内容......).
但是有第三种选择..我的网站都使用搜索引擎友好链接(www.domain.com/pagename/或www.domain.com/news/1-news-item-here.html).如果我能够在我的翻译表中"覆盖"SEF URL,那将会好得多.但我想在这种情况下我总是需要1个额外的查询到翻译表(因为我们首先想要检查翻译的页面)...猜测它不是一个大问题,但我认为值得考虑.
最后,我想通过描述我的选项3是我需要的.但是我想就这个问题提出一些其他意见!这就是我想要实现的目标:
我认为选项3具有所有这些..所以创建此解决方案的步骤是:
通过添加2个新字段'translation_to'(包含PrimaryKey)和'translation_is'(包含ISO代码)来为每个项目创建一个_translation表(或者甚至在原始项目中) - 但是..在这种情况下,所有字段都需要编辑(这并不总是必要的..加上创建第二个表我保持原文与他们的翻译分开,对吧?)
如果未选择默认语言,则首先查询翻译表以查找翻译,如果找到翻译,则显示翻译.否则通知/错误用户和/或显示原始文本(基于SEF URL ...如果在翻译或原始表中未找到SEF,则显然仅显示错误).
有什么建议?:-)
谢谢你的思考!
php mysql translation content-management-system language-translation
php ×6
css ×3
javascript ×3
mysql ×3
html ×2
jquery ×2
ckeditor ×1
codemirror ×1
email ×1
email-spam ×1
facebook ×1
font-face ×1
framebusting ×1
hotmail ×1
https ×1
iframe ×1
jcrop ×1
laravel ×1
laravel-5.2 ×1
localization ×1
mailing-list ×1
multilingual ×1
overflow ×1
phpmailer ×1
search ×1
spam ×1
ssl ×1
textarea ×1
translation ×1
web-crawler ×1
web-scraping ×1
wysiwyg ×1