代码之家  ›  专栏  ›  技术社区  ›  Aidan Ryan

本地化水晶报告

  •  5
  • Aidan Ryan  · 技术社区  · 17 年前

    在Crystal Reports上本地化标签(列标题、字段标签、页眉/页脚等)的好方法是什么?

    我们目前在席R2 SP4,但正在寻找迁移到2008。看起来2008提供了更好的查看器UI本地化。它有内容本地化的故事吗?

    5 回复  |  直到 17 年前
        1
  •  3
  •   sheir    16 年前

    找到了在Crystal Reports中本地化DateTimes等值的方法。
    例如,如果日期为2009年8月,文化为法语,则显示为aot-2009。
    所有这些都不需要将当前的线程文化转换为法语。

    相关代码段(示例):

                //Locale must be set BEFORE report is opened 
                if (this.IsEnglish)
                {
                    ReportDoc.ReportClientDocument.PreferredViewingLocaleID =
                        CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleEnglishCanada;
                    ReportDoc.ReportClientDocument.LocaleID =
                        CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleEnglishCanada;
                    ReportDoc.ReportClientDocument.ProductLocaleID =
                        CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleEnglishCanada;
                }
                else
                {
                    ReportDoc.ReportClientDocument.PreferredViewingLocaleID =
                        CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleFrenchCanada;
                    ReportDoc.ReportClientDocument.LocaleID =
                        CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleFrenchCanada;
                    ReportDoc.ReportClientDocument.ProductLocaleID =
                        CrystalDecisions.ReportAppServer.DataDefModel.CeLocale.ceLocaleFrenchCanada;
                }
    
                //Load the report from file path 
                ReportDoc.Load(reportPath.ToString());
    
        2
  •  2
  •   Jeremy Cron    17 年前



    我不确定大约2008,但我们也在席R2。我们有每种语言的本地化报告,但这只是因为我们*知道*我们只需要三个不同的本地化版本。

        3
  •  1
  •   craig    16 年前

    http://www.cogniza.com/blog/?p=55

    编辑:

    我能够使用一个嵌入式子报表(在报表标题部分),它引用了本地化值数据库。我本想在我的帖子里加上这个,但它相当复杂。

        4
  •  1
  •   Aidan Ryan    15 年前

    我们终于开始实施报告本地化。在我们的应用程序中,Crystal Reports的加载已经是用户体验中最落后/最差的部分,因此我们希望避免任何性能影响。另一个影响我们决定的想法是,在发布的版本中,翻译不会改变。

    我们开发了一个应用程序,它使用Crystal Reports API(2008-因此没有RDC),分两个阶段工作。

    在resx的本地化版本返回后,应用程序的第二阶段会将每个报告与每个resx一起保存,并用翻译文本替换英语保存新报告。这也使我们能够将仅在提交给哥特女士的日文报告中使用的字体切换出去,从而避免了需要许可使用“通用”字体。“通用”字体中的日语字符(例如Arial Unicode MS)看起来像垃圾。

        5
  •  -1
  •   Aidan Ryan    9 年前

    if (CultureInfo.CurrentCulture.Name == "en-US")
    {
       (obj.ReportDefinition.ReportObjects["lbleverest"] as TextObject).Text = resBundle.GetString("Localization", "everest");
       (obj.ReportDefinition.ReportObjects["lblmandlicode"] as TextObject).Text = resBundle.GetString("Localization", "SocietyCode");
       (obj.ReportDefinition.ReportObjects["MandliName1"] as FieldObject).ApplyFont(new Font(resBundle.GetString("Localization", "Font"), Convert.ToInt32(resBundle.GetString("Localization", "FontSize")), FontStyle.Regular));
       (obj.ReportDefinition.ReportObjects["shortName1"] as FieldObject).ApplyFont(new Font(resBundle.GetString("Localization", "Font"), Convert.ToInt32(resBundle.GetString("Localization", "FontSize")), FontStyle.Regular));        
    }    
    else    
    {    
       (obj.ReportDefinition.ReportObjects["lbleverest"] as TextObject).Text = resBundle.GetString("Localization", "everest");    
       (obj.ReportDefinition.ReportObjects["lblmandlicode"] as TextObject).Text = resBundle.GetString("Localization", "SocietyCode");    
       (obj.ReportDefinition.ReportObjects["MandliName1"] as FieldObject).ApplyFont(new Font(resBundle.GetString("Localization", "Font"), Convert.ToInt32(resBundle.GetString("Localization", "FontSize")), FontStyle.Regular));    
       (obj.ReportDefinition.ReportObjects["shortName1"] as FieldObject).ApplyFont(new Font(resBundle.GetString("Localization", "Font"), Convert.ToInt32(resBundle.GetString("Localization", "FontSize")), FontStyle.Regular));    
    }
    
    obj.DataDefinition.FormulaFields["lang"].Text = "'" + CultureInfo.CurrentCulture.Name + "'";    
    cv.crystalReportViewer1.ReportSource = obj;    
    cv.Show();
    
    推荐文章