草庐IT

c++ - 翻译在 Qt 中不起作用

coder 2024-02-22 原文

我一整天都在谷歌上搜索解决方案并更改我的代码,但没有成功。

基本上,我已将翻译添加到我的应用程序中。它工作正常,除了这里:

QString MainWindow::getMessage(Messages msg) {
    static const char* const messages[] = {
        QT_TR_NOOP("Setting power on"),
        QT_TR_NOOP("Reading ID..."),
        QT_TR_NOOP("Programming..."),
        QT_TR_NOOP("Setting write-protect"),
        QT_TR_NOOP("Finished ok"),
        QT_TR_NOOP("PROGRAMMED OK"),
        QT_TR_NOOP("ERROR!"),
        QT_TR_NOOP("OK"),
        QT_TR_NOOP("The programmer is not connected.\nPlease check the connection."),
        QT_TR_NOOP("Disconnect the board, it is in short!!"),
        QT_TR_NOOP("ERROR: Supply voltage too low (1 Volt is required, Measured: 0.0 Volt)."),
        QT_TR_NOOP("Board is already programmed and write protected."),
        QT_TR_NOOP("Check device connection or there is short."),
        QT_TR_NOOP("Unknown error.")    
    };

    return tr(messages[msg]);
}

但是,我没有得到翻译。翻译文件似乎没问题,UI 翻译应用得很好。 我也试过这个:

static const char* const messages[] = {
    QT_TRANSLATE_NOOP("test", "Setting power on"),
    QT_TRANSLATE_NOOP("test", "Reading ID..."),
    QT_TRANSLATE_NOOP("test", "Programming..."),
    QT_TRANSLATE_NOOP("test", "Setting write-protect"),
    QT_TRANSLATE_NOOP("test", "Finished ok"),
    QT_TRANSLATE_NOOP("test", "PROGRAMMED OK"),
    QT_TRANSLATE_NOOP("test", "ERROR!"),
    QT_TRANSLATE_NOOP("test", "OK"),
    QT_TRANSLATE_NOOP("test", "The programmer is not connected.\nPlease check the connection."),
    QT_TRANSLATE_NOOP("test", "Disconnect the board, it is in short!!"),
    QT_TRANSLATE_NOOP("test", "ERROR: Supply voltage too low (1 Volt is required, Measured: 0.0 Volt)."),
    QT_TRANSLATE_NOOP("test", "Board is already programmed and write protected."),
    QT_TRANSLATE_NOOP("test", "Check device connection or there is short."),
    QT_TRANSLATE_NOOP("test", "Unknown error.")
};

然后,我有一个获取消息的方法:

QString MainWindow::getMessage(Messages msg) {
    return qApp->translate("test", messages[msg]); 
}

但它也不起作用。

有什么提示或建议吗?

最佳答案

我在这里找到了真正的问题。 通常翻译器安装在 main.cpp 中,因此翻译器对象保留在内存中。 但是,就我而言,我是在用户在设置对话框中更改语言后切换翻译器,使用局部变量但 void QCoreApplication::installTranslator ( QTranslator * translationFile ) [static] 需要一个指针。一旦函数退出,该局部变量就会被删除。 所以,我在我的类上声明了一个 QTranslator 对象,所以它保存在内存中。

关于c++ - 翻译在 Qt 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28509106/

有关c++ - 翻译在 Qt 中不起作用的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  4. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  5. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  6. Qt Designer的简单使用 - 2

    在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用C++代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。用C++代码编写图形界面的问题就是不直观,因此Qt项目开发了专门的可视化图形界面编辑器——QtDesigner(Qt设计师)。通过QtDesigner就可以很方便地创建图形界面文件*.ui,然后将ui文件应用到源代码里面,做到“所见即所得”,大大方便了图形界面的设计。本节就演示一下QtDesigner的简单使用,学习拖拽控件和设置控件属性,并将ui文件应用到Qt程序代码里。使用QtDesigner设计界面在开始菜单中找到「Q

  7. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  8. ruby-on-rails - "assigns"在 Ruby on Rails 中有什么作用? - 2

    我目前正在尝试学习RubyonRails和测试框架RSpec。assigns在此RSpec测试中做什么?describe"GETindex"doit"assignsallmymodelas@mymodel"domymodel=Factory(:mymodel)get:indexassigns(:mymodels).shouldeq([mymodel])endend 最佳答案 assigns只是检查您在Controller中设置的实例变量的值。这里检查@mymodels。 关于ruby-o

  9. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  10. += 的 Ruby 方法 - 2

    有没有办法让Ruby能够做这样的事情?classPlane@moved=0@x=0defx+=(v)#thisiserror@x+=v@moved+=1enddefto_s"moved#{@moved}times,currentxis#{@x}"endendplane=Plane.newplane.x+=5plane.x+=10putsplane.to_s#moved2times,currentxis15 最佳答案 您不能在Ruby中覆盖复合赋值运算符。任务在内部处理。您应该覆盖+,而不是+=。plane.a+=b与plane.a=

随机推荐