几个星期后,我开始玩Symfony2.它似乎是一个非常强大的框架,但有些事情我还是不能理解.
在文档中,我看到i18n(即翻译)由翻译服务管理.如果我正确理解,翻译网站的主要方式是将我想要翻译的消息集合放在不同的文件messages.XX.yml(XX=en,fr,it,etc...)中,每种语言一个.
这可能适用于短文本,可能不包含任何HTML标记.但是你如何处理长文本呢?例如,我如何管理服务条款或关于页面的翻译?
我想我应该为我想要使用的每个语言环境包含不同的模板.我对吗?
谢谢你的帮助!
我正在制作一个多语言的Django网站.我创建了一个消息文件,填充并编译它.我用我想要的语言(希伯来语)检查了网站(在这种情况下是管理员),并且大多数短语都像希伯来语一样出现,但有些则没有.我检查了源代码,这些仍然显示为_('Whatever')他们应该,它们也被翻译在消息文件中,是的,我记得这样做compilemessages.
翻译的一些常见原因是什么?
这是我的问题:我们的产品有九种不同语言的.ts文件.我们已经添加了大约100个需要翻译的新字符串,但有些是针对我们的下一个版本,有些是针对之后的版本.我们遇到了翻译人员缺少字符串或提前翻译字符串的问题.我们希望能够发送只包含我们现在要翻译的字符串的较小.ts文件,然后将该.ts文件合并到包含其余翻译的较大.ts文件中.
我们的翻译人员需要使用QT语言学家(之前我们让他们编辑原始XML而不是一流的结果).
一种解决方案是使用上下文,但我们的开发团队并不热衷于这个想法.另一种方法是手动合并.ts文件,但这似乎是剪切和粘贴错误的方法.
是否有一个方法使用lupdate和项目文件来添加或合并辅助.ts文件?我已经阅读了QT-land的论坛,没有找到答案,但是lupdate中的开关暗示能够指向其他翻译文件.特别是-pro开关说:
-pro <filename>
Name of a .pro file. Useful for files with .pro file syntax but
different file suffix. Projects are recursed into and merged.
Run Code Online (Sandbox Code Playgroud)
例1:我们有一个德语.ts文件,我们想从一个单独的德语翻译文件中添加20个字符串,这样主翻译文件包含所有字符串,包括20个新字符串.
示例2:我们有一个德语.ts文件,我们希望从单独的德语翻译文件中添加20个字符串,以便在lupdate期间将辅助翻译文件与主文件合并,以便生成的.qm文件包含所有字符串,包括20新的.
有没有人做过其中任何一个(并且要么工作),你能给我一些见解吗?
随着gettext你要么可以使用默认的系统范围内的区域设置目录,或使用指定一个自己bindtextdomain.当编译的.mo转换文件在系统的默认位置不可用时,直接从源运行程序时这很有用.
在Python中你会这样做:
import gettext
from gettext import gettext as _
gettext.bindtextdomain('nautilus-image-manipulator', '/path/to/mo/folder')
gettext.textdomain('nautilus-image-manipulator')
Run Code Online (Sandbox Code Playgroud)
其中/path/to/mo/folder包含熟悉的fr/LC_MESSAGES/nautilus-image-manipulator.mo结构.这样的电话:
print _("Delete this profile")
Run Code Online (Sandbox Code Playgroud)
从本地.mo文件返回正确翻译的字符串,非常感谢.
在GTK + 2/pygtk中,存在gtk.glade.bindtextdomain,但我想知道GTK + 3/PyGObject中是否有任何等价物.
为了给你一个具体的例子,这是Nautilus Image Manipulator的UI是如何从它的Glade文件创建的:
from gi.repository import Gtk
builder = Gtk.Builder()
builder.set_translation_domain('nautilus-image-manipulator')
builder.add_from_file(ui_filename)
return builder
Run Code Online (Sandbox Code Playgroud)
不是从Glade文件构建的UI部分(即从代码中设置)显示正确翻译,但Glade文件中的字符串仍显示为英文.
在我看来,在打电话builder.bind_text_domain('nautilus-image-manipulator', '/path/to/mo/folder')之前我错过了某种呼叫builder.set_translation_domain......任何想法如何执行此操作?
如果我使用扩展方法语法,以下查询将如何显示?
var query = from c in checks
group c by string.Format("{0} - {1}", c.CustomerId, c.CustomerName)
into customerGroups
select new { Customer = customerGroups.Key, Payments = customerGroups }
Run Code Online (Sandbox Code Playgroud) 我有一个使用translateService的组件,但是不可能在组件模板HTML上使用管道翻译项目,我得到以下错误:
无法找到管道"翻译"
app.module.ts
import {BrowserModule} from "@angular/platform-browser";
import {NgModule} from "@angular/core";
import {HttpModule, Http} from "@angular/http";
import {TranslateModule, TranslateLoader, TranslateStaticLoader} from 'ng2-translate';
import {AppComponent} from "./app.component";
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
HttpModule,
TranslateModule.forRoot({
provide: TranslateLoader,
useFactory: (http: Http) => new TranslateStaticLoader(http, './assets/i18n', '.json'),
deps: [Http]
})
],
bootstrap: [AppComponent]
})
export class AppModule {
}
Run Code Online (Sandbox Code Playgroud)
booking.component.ts
import {Component, OnInit} from '@angular/core';
import {BookingComponent} from './booking.component';
import {TranslateService} from 'ng2-translate';
@Component({
selector: 'app-booking',
templateUrl: './booking.component.html',
styleUrls: ['./booking.component.css']
})
export class …Run Code Online (Sandbox Code Playgroud) 我正在使用 next.JS 和包 next-i18next 构建一个多语言网站。它进展顺利,除了一件事我不确定什么是最好的方法。我希望我的静态路由也将被翻译(不仅是页面内容),例如:
example.com/en/home -> example.com/pt-br/inicio
example.com/en/contact -> example.com/pt-br/contato
我知道我可以创建目录 (en/pt-br) 并在其中插入页面(例如:home.js、contact.js 等在“/en/”和 inicio.js、contato.js 等在“/”中pt-br/"),这样在用户访问这些页面时很容易定义语言,但我需要创建 2 个几乎所有相同内容的文件(例如:“/en/home”和“/pt-br/inicio”)。所以我想知道是否有更好的解决方案?
谢谢!
我最近正在做一些PHP工作,在我看过的所有代码中,人们倾向于使用很少的方法.(他们也倾向于使用很少的变量,但这是另一个问题.)我想知道为什么会这样,我发现这个音符"一个带有一个参数的函数调用和一个空函数体大约需要7-8美元一样的时间localVar的++操作.类似的方法调用当然是约$ 15 localVar的操作++" 在这里.
这是真的吗,即使PHP页面已被编译和缓存?我应该尽可能避免使用方法来提高效率吗?我喜欢用重复代码块的方法编写组织良好,人类可读的代码.如果有必要在没有方法的情况下编写平面代码,是否有任何程序可以"内联"方法体?这样我就可以编写漂亮的代码,然后在部署之前将其弄糟.
顺便说一句,我一直在看的代码来自Joomla 1.5核心和几个WordPress插件,所以我认为他们是知道他们在做什么的人.
注意:我很高兴每个人都跳过这个问题来谈论一般的优化,但事实上我们正在谈论解释语言的优化.至少有一些暗示我们谈论PHP的事实会很好.
我手动创建了一个文件:test.po,内容如下:
msgstr"问候"
msgstr"Hello World"
现在我可以在编辑器中编辑翻译(hello world),如"poedit"和"GTranslated"(我正在使用Ubuntu).我甚至可以为该翻译添加评论.然而,"poedit"和"GTranslated"都不会让我添加一个新的翻译字符串 - 我在网上看起来没有用,看着其他编辑的截图,似乎没有一个"新"按钮.
我错过了什么?使用"普通"文本编辑器编辑新密钥然后在这些PO编辑器中编辑它们(无论它们可能是什么)似乎很愚蠢.(如果你不能说我是这个'gettext'世界的新手 - 我正在用Zend/PHP构建一个网站.)