Abap 如何检查报表是否有翻译?

Abap 如何检查报表是否有翻译?,abap,Abap,我有一份报告,我把它翻译成了不同的语言,但现在我把它转移到了一个没有翻译授权的系统中 这样,报告只能用英语工作:如果用户使用另一种语言访问系统,则所有文本符号都不起作用 考虑到这一点,是否可以在程序加载事件中编写一些内容来检查翻译是否存在,如果不存在,是否可以将SY-LANGU设置为英语 现在,我有了一个简单的if sy langu'E'。sy langu='E'。endif.(“E”代表英语) 它工作得很好,但不管怎样,我仍然想找到一种方法来确定是否有翻译,然后才将其设置为英语。文本符号是程序

我有一份报告,我把它翻译成了不同的语言,但现在我把它转移到了一个没有翻译授权的系统中

这样,报告只能用英语工作:如果用户使用另一种语言访问系统,则所有文本符号都不起作用

考虑到这一点,是否可以在
程序加载
事件中编写一些内容来检查翻译是否存在,如果不存在,是否可以将
SY-LANGU
设置为英语

现在,我有了一个简单的
if sy langu'E'。sy langu='E'。endif.
(“E”代表英语)

它工作得很好,但不管怎样,我仍然想找到一种方法来确定是否有翻译,然后才将其设置为英语。

文本符号是程序多语言文本池的一部分

1) 使用
READ TEXTPOOL
获取另一种语言的文本元素:

。此语句从存储库中读取lang中指定的语言和prog中指定的程序的文本池中的文本元素,并将它们放入内部表itab中。”

2) 使用辅助语言或使用
SET language
更改文本元素的语言,如中所述:

将程序加载到内部会话时,默认情况下会导入登录语言文本池的文本元素。如果此文本池不存在,则使用AS ABAP中的文本池。如果这些文本池均不存在,则加载不带文本元素的空文本池

执行程序时,可以使用语句加载不同语言的文本池

解决方案 如果使用第二语言不令人满意,请使用以下代码:

LOAD-OF-PROGRAM.
  constants lc_english    type sylangu value `E`.
  data lt_text_symbols    type standard table of textpool.

  read textpool sy-repid into lt_text_symbols language sy-langu.

  if sy-subrc <> 0.
    SET LANGUAGE lc_english.
  endif.
LOAD-OF-PROGRAM。
常数lc_英语类型sylangu值'E'。
文本池的数据lt_text_符号类型标准表。
将textpool sy repid读入lt_text_符号语言sy langu。
如果sy subrc为0。
设置语言为英语。
恩迪夫。
附言:

  • 配置文件参数可通过事务代码RZ11查看(二级语言zcsa/second_语言)
  • 如果sy subrc 0而不是
    如果行(lt_text_符号)=0,则使用
    因为在某些其他情况下,如果
    lt_text_符号
    包含在
    读取文本池
    之前的内容,如果请求的语言中没有文本池,则不会清除其内容

  • LOAD-OF-PROGRAM
    事件中,与
    sy-cprog
    相比,更倾向于使用
    sy-repid
    ,尽管在技术上它们在当时包含相同的内容,因为后者有另一个:

    在外部调用的过程中,调用程序的名称;否则为当前程序的名称。如果外部调用的过程调用另一个外部过程,sy cprog包含主程序的名称,并且不设置为后续调用程序的主程序的名称

  • 不要更改
    sy langu
    ,dixit的值:

    “它们应仅用于读取”

  • 如果要更改sy语言,请使用。它还有其他作用,请仔细阅读文档不要将它与设置语言混淆


SAP建议不要更改系统字段的值:与其更改
SY-LANGU
,不如使用
SET LOCALE LANGUAGE
,以达到相同的效果。我已经更新了你的答案。
LOAD-OF-PROGRAM.
  constants lc_english    type sylangu value `E`.
  data lt_text_symbols    type standard table of textpool.

  read textpool sy-repid into lt_text_symbols language sy-langu.

  if sy-subrc <> 0.
    SET LANGUAGE lc_english.
  endif.