birt 汉化与修改

一.为什么选用该开源平台

       BIRT (Business Intelligence and Reporting Tools), 是为 Web 应用程序开发的基于 Eclipse 的开源报表系统,特别之处在于它是以 Java 和 J2EE 为基础。BIRT 有两个主要组件:基于 Eclipse 的报表设计器,以及部署到应用服务器上的运行时组件。BIRT 也提供了图标引擎让你能为应用增加图标。

 BIRT 当前发行的版本是 2.5.1。可通过

http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo下载使用。

  有了 BIRT,你可以为应用程序构建丰富的报表。

  列表 - 列表是最简单的报表。当列表变长时,你可以把相关数据增加到同一分组(基于客户的订单分组,基于供应商的产品分组)。如果数据是数字类型的,你可以轻松的添加到“总数”、“平均”、或其他汇总中。

  图表 - 当需要图表表现时,数字型数据比较好理解。BIRT 也提供饼状、线状以及柱状图标等。

  交叉表 - 交叉表(也叫做十字表格或矩阵)用两种维度展示数据:sales per quarter or hits per web page。(交叉表在1.0.1 中没有提供,但计划在将来提供。)

  信函和文档 - 通知、信件、以及其他文本文档都很容易通过 BIRT 方便建立。文档包括正文、格式、列表、图表等。

混合报表 - 很多报表需要联合以上所有的报表构成单一文档。例如,一份客户声明会列出客户所需要的信息,为当前促进(promotions)提供文本,以及提供并行的出帐和入帐列表。一份财政报表将包括声明、图表、表格,所有这些都将进行全方位的格式化,来匹配共有的配色方案。

二.如何汉化

       I.eclipse 的汉化

       (webapps/birt/WEB-INF/lib/commons-logging.jar   是BIRT.WAR包解压没有但是是必须的)

       1.下载eclipse-birt 集成的开发工具eclipse-reporting-galileo-win32.zip

       解压至本地

       2. http://download.eclipse.org/birt/downloads/lang.php?build=R-R1-2_2_2-200802271210

下载eclipse-birt的汉化包NLpack1-birt-report-designer-all-in-one-2_1_1.zip

  将汉化包里面的文件按照相应的解压至eclipse-reporting-galileo-win32.zip解压出来的文件中

II.在tomcat里面的汉化

1.找到对应的birt/WEB-INF/lib/viewservlets.jar

找到viewservlets.jar/org/eclipse/birt/report/resource/Messages.properties

内容替换为:

###############################################################################
# Copyright (c) 2004 Actuate Corporation.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#  Actuate Corporation  - initial API and implementation
###############################################################################

birt.viewer.title=BIRT Report Viewer
birt.viewer.title.navigation=\u5bfc\u822a\u3000
birt.viewer.title.error=\u9519\u8bef
birt.viewer.title.complete=\u5b8c\u6210
birt.viewer.title.message=\u6d88\u606f

birt.viewer.parameter=\u53c2\u6570
birt.viewer.runreport=\u8fd0\u884c\u62a5\u8868
birt.viewer.required=\u9700\u8981\u5e26\u6709 <FONT COLOR="red">*</FONT> \u6807\u8bb0\u7684\u53c2\u6570\u3002

birt.viewer.viewinpdf=\u4ee5 PDF \u67e5\u770b
birt.viewer.maximize=\u9690\u85cf\u62a5\u8868\u53c2\u6570
birt.viewer.restore=\u663e\u793a\u62a5\u8868\u53c2\u6570

birt.viewer.error=\u9519\u8bef\u6d88\u606f
birt.viewer.error.noparameter=\u6b64\u62a5\u8868\u65e0\u53c2\u6570\u3002
birt.viewer.error.parameter.invalid=\u53c2\u6570\u201c{0}\u201d\u65e0\u6548\u3002
birt.viewer.error.noprinter=\u65e0\u6cd5\u627e\u5230\u652f\u6301 PostScript \u683c\u5f0f\u7684\u4efb\u4f55\u53ef\u7528\u6253\u5370\u673a\u3002
birt.viewer.error.unknownerror=\u672a\u77e5\u9519\u8bef\u3002
birt.viewer.error.generatereportfirst=\u5e94\u9996\u5148\u751f\u6210\u62a5\u8868\u6587\u6863\u3002
birt.viewer.error.parameterrequired=\u53c2\u6570\u201c{0}\u201d\u662f\u5fc5\u9700\u7684\u3002
birt.viewer.error.parameternotallowblank=\u53c2\u6570\u201c{0}\u201d\u4e0d\u80fd\u4e3a\u7a7a\u767d\u3002
birt.viewer.error.parameternotselected=\u8bf7\u4e3a\u53c2\u6570\u201c{0}\u201d\u9009\u62e9\u503c\u3002
birt.viewer.error.noviewingsession=\u67e5\u770b\u4f1a\u8bdd\u4e0d\u53ef\u7528\u6216\u5df2\u8fc7\u671f\u3002
birt.viewer.error.viewingsessionexpired=\u67e5\u770b\u4f1a\u8bdd\u5df2\u8fc7\u671f\u3002
birt.viewer.error.viewingsessionlocked=\u67e5\u770b\u4f1a\u8bdd\u88ab\u9501\u5b9a\uff0c\u4e0d\u80fd\u7ec8\u6b62\u3002
birt.viewer.error.viewingsessionmaxreached=\u5df2\u8fbe\u5230\u67e5\u770b\u4f1a\u8bdd\u6700\u5927\u6570\u91cf\u3002

birt.viewer.message.taskcanceled=\u5f53\u524d\u64cd\u4f5c\u5df2\u53d6\u6d88\u3002

###############################################################################
# Toolbar
###############################################################################
birt.viewer.toolbar.print=\u6253\u5370\u62a5\u8868
birt.viewer.toolbar.printserver=\u5728\u670d\u52a1\u5668\u4e0a\u6253\u5370\u62a5\u8868
birt.viewer.toolbar.toc=\u663e\u793a\u76ee\u5f55
birt.viewer.toolbar.parameter=\u8fd0\u884c\u62a5\u8868
birt.viewer.toolbar.export=\u5bfc\u51fa\u6570\u636e
birt.viewer.toolbar.font=\u66f4\u6539\u5b57\u4f53
birt.viewer.toolbar.enableiv=\u8c03\u7528\u4ea4\u4e92\u5f0f\u67e5\u770b\u5668
birt.viewer.toolbar.exportreport=\u5bfc\u51fa\u62a5\u8868

###############################################################################
# navbar
###############################################################################
birt.viewer.navbar.first=\u7b2c\u4e00\u9875
birt.viewer.navbar.previous=\u4e0a\u4e00\u9875
birt.viewer.navbar.next=\u4e0b\u4e00\u9875
birt.viewer.navbar.last=\u6700\u540e\u4e00\u9875
birt.viewer.navbar.goto=\u8f6c\u5230
birt.viewer.navbar.lable.goto=\u8f6c\u5230\u9875:
birt.viewer.navbar.prompt.one=\u663e\u793a\u9875
birt.viewer.navbar.prompt.two=/
birt.viewer.navbar.error.blankpagenum=\u8bf7\u8f93\u5165\u6709\u6548\u9875\u7801\u3002

###############################################################################
# progress bar
###############################################################################
birt.viewer.progressbar.prompt=\u6b63\u5728\u5904\u7406\uff0c\u8bf7\u7a0d\u5019 ...
birt.viewer.progressbar.confirmcanceltask=\u60a8\u8981\u53d6\u6d88\u5f53\u524d\u64cd\u4f5c\u5417?

###############################################################################
# Dialog 
###############################################################################
birt.viewer.dialog.ok=\u786e\u5b9a
birt.viewer.dialog.cancel=\u53d6\u6d88
birt.viewer.dialog.run=\u8fd0\u884c\u62a5\u8868
birt.viewer.dialog.close=\u5173\u95ed

birt.viewer.dialog.page.all=\u6240\u6709\u9875
birt.viewer.dialog.page.current=\u5f53\u524d\u9875
birt.viewer.dialog.page.range=\u9875:
birt.viewer.dialog.page.range.description=(\u8f93\u5165\u9875\u7801\u548c/\u6216\u9875\u8303\u56f4\u3002\u4f8b\u5982: 1-6 \u6216 1,3,6)
birt.viewer.dialog.page.error.invalidpagerange=\u65e0\u6548\u9875\u8303\u56f4

###############################################################################
# Dialog title
###############################################################################
birt.viewer.dialog.exception.title=\u4f8b\u5916
birt.viewer.dialog.exportReport.title=\u5bfc\u51fa\u62a5\u8868
birt.viewer.dialog.parameter.title=\u53c2\u6570
birt.viewer.dialog.simpleExportData.title=\u5bfc\u51fa\u6570\u636e
birt.viewer.dialog.printReport.title=\u6253\u5370\u62a5\u8868
birt.viewer.dialog.printReportServer.title=\u5728\u670d\u52a1\u5668\u4e0a\u6253\u5370\u62a5\u8868

###############################################################################
# Export report dialog 
###############################################################################
birt.viewer.dialog.export.format=\u5bfc\u51fa\u683c\u5f0f:
birt.viewer.dialog.export.format.pdf=PDF
birt.viewer.dialog.export.format.excel=EXCEL
birt.viewer.dialog.export.all=\u5bfc\u51fa\u8be6\u7ec6\u62a5\u8868
birt.viewer.dialog.export.all.detail=\u5c06\u5bfc\u51fa\u6240\u6709\u53ef\u7528\u62a5\u8868\u6570\u636e\uff0c\u4e0d\u8003\u8651<br>\u5f53\u524d\u89c6\u56fe\u7684\u4fee\u6539\u3002
birt.viewer.dialog.export.modified=\u5bfc\u51fa\u5177\u6709\u5f53\u524d\u4fee\u6539\u7684\u62a5\u8868
birt.viewer.dialog.export.modified.detail=\u5c06\u53ea\u5bfc\u51fa\u53ef\u89c1\u6570\u636e\u3002\u5c06\u4e0d\u5bfc\u51fa<BR>\u5df2\u88ab\u7b5b\u9009\u6389\u6216\u9690\u85cf\u7684\u6570\u636e\u3002

birt.viewer.dialog.export.pdf.fittoauto=\u81ea\u52a8
birt.viewer.dialog.export.pdf.fittoactual=\u5b9e\u9645\u5927\u5c0f
birt.viewer.dialog.export.pdf.fittowidth=\u9002\u5408\u9875\u9762\u5bbd\u5ea6
birt.viewer.dialog.export.pdf.fittowhole=\u9002\u5408\u6574\u9875

###############################################################################
# Print Report dialog 
###############################################################################
birt.viewer.dialog.print.format=\u6253\u5370\u683c\u5f0f
birt.viewer.dialog.print.format.html=HTML
birt.viewer.dialog.print.format.pdf=PDF
birt.viewer.dialog.print.printpreviewalreadyopen=\u6253\u5370\u9884\u89c8\u7a97\u53e3\u5df2\u6253\u5f00\u3002

###############################################################################
# Print report on the server dialog 
###############################################################################
birt.viewer.dialog.printserver.onserver=\u5728\u670d\u52a1\u5668\u4e0a\u6253\u5370\u8f93\u51fa\u6587\u6863\u6587\u4ef6
birt.viewer.dialog.printserver.printer=\u6253\u5370\u673a:
birt.viewer.dialog.printserver.status=\u72b6\u6001:
birt.viewer.dialog.printserver.model=\u578b\u53f7:
birt.viewer.dialog.printserver.description=\u63cf\u8ff0:
birt.viewer.dialog.printserver.status.acceptingjobs=\u6b63\u5728\u63a5\u53d7\u4f5c\u4e1a
birt.viewer.dialog.printserver.status.notacceptingjobs=Not accepting Jobs

birt.viewer.dialog.printserver.settings=\u8bf7\u6307\u5b9a\u6253\u5370\u8bbe\u7f6e
birt.viewer.dialog.printserver.settings.copies=\u4efd\u6570:
birt.viewer.dialog.printserver.settings.collate=\u9010\u4efd\u6253\u5370:
birt.viewer.dialog.printserver.settings.mode=\u6a21\u5f0f:
birt.viewer.dialog.printserver.settings.mode.bw=\u9ed1\u767d
birt.viewer.dialog.printserver.settings.mode.color=\u5f69\u8272
birt.viewer.dialog.printserver.settings.duplex=\u53cc\u5de5:
birt.viewer.dialog.printserver.settings.duplex.simplex=\u5355\u5de5
birt.viewer.dialog.printserver.settings.duplex.horizontal=\u6c34\u5e73
birt.viewer.dialog.printserver.settings.duplex.vertical=\u5782\u76f4
birt.viewer.dialog.printserver.settings.pagesize=\u9875\u9762\u5927\u5c0f:
birt.viewer.dialog.printserver.settings.print=\u6253\u5370:

birt.viewer.dialog.printserver.complete=\u5df2\u5c06\u6587\u6863\u6587\u4ef6\u53d1\u9001\u5230\u670d\u52a1\u5668\u4e0a\u9009\u62e9\u7684\u6253\u5370\u673a\u3002
birt.viewer.dialog.printserver.error.noprinter=\u65e0\u6253\u5370\u673a
###############################################################################
# Confirmation dialog 
###############################################################################
birt.viewer.dialog.confirmation.title=\u786e\u8ba4
###############################################################################
# Export data dialog 
###############################################################################
birt.viewer.dialog.exportdata.tab.field=\u6570\u636e\u5b57\u6bb5
birt.viewer.dialog.exportdata.tab.filter=\u7b5b\u9009\u6807\u51c6
birt.viewer.dialog.exportdata.resultsets=\u53ef\u7528\u7ed3\u679c\u96c6
birt.viewer.dialog.exportdata.availablecolumn=\u53ef\u7528\u5217
birt.viewer.dialog.exportdata.selectedcolumn=\u9009\u62e9\u7684\u5217
birt.viewer.dialog.exportdata.extension=\u5bfc\u51fa\u683c\u5f0f:
birt.viewer.dialog.exportdata.encoding=\u8f93\u51fa\u7f16\u7801:
birt.viewer.dialog.exportdata.encoding.other=\u5176\u5b83
birt.viewer.dialog.exportdata.encoding.comment=(\u5982\u679c\u4e3a\u7a7a\u767d\uff0c\u4f7f\u7528\u672c\u5730\u7f16\u7801)
birt.viewer.dialog.exportdata.addall=\u5168\u90e8\u6dfb\u52a0
birt.viewer.dialog.exportdata.add=\u6dfb\u52a0
birt.viewer.dialog.exportdata.removeall=\u5168\u90e8\u5220\u9664
birt.viewer.dialog.exportdata.remove=\u5220\u9664
birt.viewer.dialog.exportdata.up=\u4e0a\u79fb
birt.viewer.dialog.exportdata.down=\u4e0b\u79fb
birt.viewer.dialog.exportdata.separator=\u5206\u9694\u7b26:
birt.viewer.dialog.exportdata.datatype=\u5bfc\u51fa\u5217\u7684\u6570\u636e\u7c7b\u578b
birt.viewer.dialog.exportdata.localeneutral=\u4e0d\u5206\u533a\u57df\u8bbe\u7f6e\u5bfc\u51fa\u5217

birt.viewer.sep.0=\u9017\u53f7 ( , )
birt.viewer.sep.1=\u5206\u53f7 ( ; )
birt.viewer.sep.2=\u5192\u53f7 ( : )
birt.viewer.sep.3=\u5782\u76f4\u7ebf ( | )
birt.viewer.sep.4=\u5236\u8868\u7b26 ( \\t )

###############################################################################
# General exception
###############################################################################
birt.viewer.generalException.DOCUMENT_FILE_ERROR=\u6587\u6863\u6587\u4ef6: {0} \u4e0d\u5b58\u5728\u6216\u5305\u542b\u9519\u8bef\u3002
birt.viewer.generalException.DOCUMENT_ACCESS_ERROR=\u65e0\u6cd5\u8bbf\u95ee\u6587\u6863\u6587\u4ef6: {0}\u3002
birt.viewer.generalException.REPORT_FILE_ERROR=\u62a5\u8868\u6587\u4ef6: {0} \u4e0d\u5b58\u5728\u6216\u5305\u542b\u9519\u8bef\u3002
birt.viewer.generalException.REPORT_ACCESS_ERROR=\u65e0\u6cd5\u8bbf\u95ee\u62a5\u8868\u6587\u4ef6: {0}\u3002
birt.viewer.generalException.DOCUMENT_FILE_PROCESSING=\u6b63\u5728\u5904\u7406\u6587\u6863\u6587\u4ef6\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002
birt.viewer.generalException.NO_REPORT_DESIGN=\u6ca1\u6709\u53ef\u7528\u7684\u62a5\u8868\u8bbe\u8ba1\u5bf9\u8c61\u3002
birt.viewer.generalException.MULTIPLE_EXCEPTIONS=\u51fa\u73b0\u591a\u4e2a\u5f02\u5e38\u3002

###############################################################################
# Report service exception
###############################################################################
birt.viewer.reportServiceException.EXTRACT_DATA_NO_DOCUMENT=\u6ca1\u6709\u53ef\u4f9b\u63d0\u53d6\u6570\u636e\u7684\u6587\u6863\u6587\u4ef6\u3002
birt.viewer.reportServiceException.EXTRACT_DATA_NO_RESULT_SET=\u6ca1\u6709\u53ef\u4f9b\u63d0\u53d6\u6570\u636e\u7684\u7ed3\u679c\u96c6\u3002
birt.viewer.reportServiceException.INVALID_TOC=\u65e0\u6548 TOC \u67e5\u8be2\u3002
birt.viewer.reportServiceException.INVALID_PARAMETER=\u65e0\u6548\u53c2\u6570: {0}\uff0c\u56e0\u6b64\u5b83\u672a\u5b9a\u4e49\u3002
birt.viewer.reportServiceException.STARTUP_REPORTENGINE_ERROR=\u5c1d\u8bd5\u542f\u52a8\u62a5\u8868\u5f15\u64ce\u65f6\u51fa\u73b0\u81f4\u547d\u9519\u8bef\u3002

birt.viewer.reportServiceException.INVALID_EXTRACTFORMAT=\u6570\u636e\u63d0\u53d6\u683c\u5f0f\u65e0\u6548\u6216\u672a\u6307\u5b9a\u3002
birt.viewer.reportServiceException.INVALID_EXTRACTEXTENSION=\u65e0\u6548\u7684\u6570\u636e\u63d0\u53d6\u6269\u5c55 ID\u3002
###############################################################################
# Birt action handler exception
###############################################################################
birt.viewer.actionException.NO_REPORT_DOCUMENT=\u62a5\u8868\u6587\u6863\u5b9e\u4f8b\u4e3a\u7a7a\u3002
birt.viewer.actionException.INVALID_BOOKMARK=\u4e66\u7b7e: {0} \u65e0\u6548\u3002\u8bf7\u68c0\u67e5\u5e76\u91cd\u7f6e\u94fe\u63a5\u3002
birt.viewer.actionException.INVALID_PAGE_NUMBER=\u65e0\u6548\u9875\u7801\u7b2c {0} \u9875\uff0c\u5171 {1} \u9875\u3002 
birt.viewer.actionException.INVALID_ID_FORMAT=\u65e0\u6548 id \u683c\u5f0f\u3002Id={0}\u3002
birt.viewer.actionException.DOCUMENT_FILE_NO_EXIST=\u4f1a\u8bdd\u8d85\u65f6\u6216\u6ca1\u6709\u53ef\u7528\u7684\u6587\u6863\u6587\u4ef6\u3002

###############################################################################
# Birt soap bingding impl exception
###############################################################################
birt.viewer.soapBindingException.NO_HANDLER_FOR_TARGET=\u65e0\u6cd5\u4e3a\u6b64\u76ee\u6807\u627e\u5230\u5904\u7406\u7a0b\u5e8f\u3002\u76ee\u6807: {0}\u3002

###############################################################################
# Component processor exception
###############################################################################
birt.viewer.componentProcessorException.MISSING_OPERATOR=\u9519\u8bef: \u7f3a\u5c11\u8fd0\u7b97\u7b26!!!

###############################################################################
# Exception dialog
###############################################################################
birt.viewer.exceptionDialog.stackTrace=\u5806\u6808\u8ddf\u8e2a:
birt.viewer.exceptionDialog.showStackTrace=\u663e\u793a\u4f8b\u5916\u5806\u6808\u8ddf\u8e2a
birt.viewer.exceptionDialog.hideStackTrace=\u9690\u85cf\u4f8b\u5916\u5806\u6808\u8ddf\u8e2a

###############################################################################
# Birt Viewer JSP Taglib
###############################################################################
birt.viewer.taglib.NO_ATTR_ID=\u5fc5\u987b\u6307\u5b9a\u5c5e\u6027 ID\u3002
birt.viewer.taglib.INVALID_ATTR_ID=\u5c5e\u6027 ID \u5305\u542b\u65e0\u6548\u5b57\u7b26\u3002
birt.viewer.taglib.ATTR_ID_DUPLICATE=\u5c5e\u6027 ID \u5fc5\u987b\u552f\u4e00\u3002
birt.viewer.taglib.PARAM_NAME_DUPLICATE=\u65e0\u6cd5\u590d\u5236\u53c2\u6570\u540d\u79f0\u3002
birt.viewer.taglib.NO_REPORT_SOURCE=\u5e94\u6307\u5b9a\u62a5\u8868\u8bbe\u8ba1\u6216\u6587\u6863\u6587\u4ef6\u3002
birt.viewer.taglib.NO_REPORT_DOCUMENT=reportlet \u9700\u8981\u62a5\u8868\u6587\u6863\u6587\u4ef6\u3002
birt.viewer.taglib.NO_REQUESTER_NAME=\u53c2\u6570\u9875\u6807\u8bb0\u7684 "name" \u5c5e\u6027\u662f\u5fc5\u9700\u7684\u3002

###############################################################################
# Birt Viewer Message
###############################################################################
birt.viewer.message.document.successful=\u62a5\u8868\u6587\u6863\u6587\u4ef6\u5df2\u6210\u529f\u751f\u6210\u3002

###############################################################################
# Birt Viewer General Exceptions
###############################################################################
birt.viewer.exception.maybe_disabled_cookies=\u8fd9\u53ef\u80fd\u662f\u7531\u5ba2\u6237\u7aef\u4e0a\u7981\u7528\u7684 Cookie \u5f15\u8d77\u7684\u3002


重启tomcat

2.用jdk 自带的转编码工具native2ascii.exe将其转为utf-8格式

Native2ascii.exe -encoding GBK  Messages.properties(修改前) Messages.properties(修改后)

 

 

三.如何修改添加了日期控件

1.       FramesetFragment.jsp

<script src="birt/ajax/core/BirtSoapResponse.js" type="text/javascript"></script>

<script src="birt/customizeFormat/date/WdatePicker.js" type="text/javascript" defer="defer" ></script>

defer="defer"  代表当javascript不改变文档的时候绕过执行

注:最终的解决方式是将<script src="birt/customizeFormat/date/WdatePicker.js" type="text/javascript" ></script> 置整个页面的底部

2.       TextBoxParameterFragment.jsp

<INPUT CLASS="BirtViewer_parameter_dialog_Input"

               TYPE="<%= parameterBean.isValueConcealed( )? "PASSWORD" : "TEXT" %>"

               NAME="<%= encodedParameterName %>"

               ID="<%= encodedParameterName %>"

               TITLE="<%= parameterBean.getToolTip( ) %>"

               VALUE="<%= ParameterAccessor.htmlEncode( ( parameterBean.getDisplayText( ) == null )? "" : parameterBean.getDisplayText( ) ) %>"

               <%= ( !parameterBean.isRequired( ) && parameterBean.getValue( ) == null )? "DISABLED='true'" : "" %>

               <%=((encodedParameterName.toUpperCase()).indexOf("DATE")>=0)? "readonly" : "" %>

            >

      <%if ((encodedParameterName.toUpperCase()).indexOf("DATE") >=0) {%>

           <img id="teqiimg" src="birt/images/btn_off_cal.gif" οnclick="WdatePicker({el:$dp.$('<%= encodedParameterName %>'),dateFmt:'yyyy-MM-dd'})"/>

               <%} %>

3.       将customizeFormat文件夹考到birt/webcontent/birt/里,这个是时间控件

4.       报表参数的定义:

a)         参数的名称必须是*+“Date”,不如:startDate

显示类型是“文本框”


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值