SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Хранение текстов



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
vga
Мастер
Мастер


Age: 130
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Jul 16, 2010 10:55 am    Post subject: Хранение текстов Reply with quote

Ситуация. В excel форма выводится на армянсокм языке.
В зависимости от условий, некоторые ячейки формы нужно заполнять разными текстами на армянском языке.

Вариант 1 с текстом прямо в коде:
Code:
case f.
when '1'.
 value = 'текст один'.
when '2'.
 value = 'текст два'.
when '3'.
 value = 'текст три'.
endcase.

вариант рабочий, но так пишут скорей пиэнеры с 1 годом стажа программирования, а для какого-нибудь армянского языка с юникодом грозит проблемами при апдейтах и миграциях.

Вариант 2.
Code:
case f.
when '1'.
 value = text-001. "'текст один'.
when '2'.
 value = text-002. "'текст два'.
when '3'.
 value = text-003. "'текст три'.
endcase.

вариант индийский, как правило нерабочий.
Если зайти на языке логона, отличного от языка, в котором сохранятся тексты, значения value будут пустыми. Для работосопособности, тексты нужно сохранять во всех языках, что мало кто делает.

Тексты предназначены для перевода интерфейсов, а не для хранения константных значений которые должны отображаться одинакого, на каком бы языке логона пользователь не зашел.

Сейчас я предложил создать таблицу для хранения текстов для форм, следующей структуры:

Название программы | язык | уникальный идентификатор текста | сам текст.

Коллеги, хотелось услышать ваше мнение, как вы храните такие тексты?

_________________
Молитва - это запрос разработчику на изменение кода программы.
Back to top
View user's profile Send private message Blog Visit poster's website
Armann
Модератор
Модератор



Joined: 01 Jan 2008
Posts: 422
Location: Moscow

PostPosted: Fri Jul 16, 2010 12:36 pm    Post subject: Reply with quote

Валер, а комбинированный вариант не прокатит?
Code:

case f.
 when '1'.
   value = 'текст один'(001).
 when '2'.
   value = 'текст два'(002).
 when '3'.
   value = 'текст три'(003).
endcase.

Если в соответствующем text-xxx есть значение - то оно выводится, если значения нет - то выводится текст что в кавычках. Ну а в кавычки может быть лучше англоязычный вариант текста класть - чтоб в случае отсутствия перевода все равно было более менее понятно


Last edited by Armann on Fri Jul 16, 2010 1:41 pm; edited 1 time in total
Back to top
View user's profile Send private message Blog
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Fri Jul 16, 2010 1:25 pm    Post subject: Reply with quote

Если нужна более изощренная логика по подстановке текстов, то можно хранить тексты в текстовых элементах программы, внутри программы их можно считать напрямую с помощью
Code:
READ TEXTPOOL prog ... INTO itab ... LANGUAGE lg.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 130
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Jul 16, 2010 6:41 pm    Post subject: Reply with quote

Armann wrote:
Валер, а комбинированный вариант не прокатит?
Code:

case f.
 when '1'.
   value = 'текст один'(001).
 when '2'.
   value = 'текст два'(002).
 when '3'.
   value = 'текст три'(003).
endcase.

Если в соответствующем text-xxx есть значение - то оно выводится, если значения нет - то выводится текст что в кавычках. Ну а в кавычки может быть лучше англоязычный вариант текста класть - чтоб в случае отсутствия перевода все равно было более менее понятно


Слава, этот вариант я знаю, использую, но только для других случаев и с английским. Но при этом опять же в исходном коде тексты хранятся. Ты бы видел армянском тексты, которые у нас в код навставляли? Laughing Там хоть все символы поменяй, один фиг никто не понимает, что написано. Я теперь и избавляюсь от такого хардкода.

_________________
Молитва - это запрос разработчику на изменение кода программы.
Back to top
View user's profile Send private message Blog Visit poster's website
vga
Мастер
Мастер


Age: 130
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Fri Jul 16, 2010 6:46 pm    Post subject: Reply with quote

Удав wrote:
Если нужна более изощренная логика по подстановке текстов, то можно хранить тексты в текстовых элементах программы, внутри программы их можно считать напрямую с помощью
Code:
READ TEXTPOOL prog ... INTO itab ... LANGUAGE lg.



Видел в некоторых программах, которые твои коллеги по IBS писали (причем мной очень уважаемые абаперы), такой трюк, что перед запуском программы считывались тексты, и если их не существовало в языке логона, то динамически создавали их из английского. В 4.6c проблем не было, а в ECC 6.00 стали дампы периодически валиться. Как бороться с этими дампами - не знаю, поэтому закомментировал.

_________________
Молитва - это запрос разработчику на изменение кода программы.
Back to top
View user's profile Send private message Blog Visit poster's website
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Mon Jul 19, 2010 5:16 pm    Post subject: Reply with quote

Ну я в IBS никогда не работал, хотя и знаком с некоторыми из них по Лукойловским проектам Smile
Документация предупреждает насчет использования дополнения STATE

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 130
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Mon Jul 19, 2010 7:08 pm    Post subject: Reply with quote

Удав wrote:
Документация предупреждает насчет использования дополнения STATE


Проблемы не READ. Делалось так. В Initialize секции читались тексты на языке логон и на английском. Если каких-то текстов на языке логона не было, тут же делалась их вставка через INSERT TEXTPOOL.
Вот это периодически и приводило к дампам. Техника, мягко говоря, спорная.

_________________
Молитва - это запрос разработчику на изменение кода программы.
Back to top
View user's profile Send private message Blog Visit poster's website
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Tue Jul 20, 2010 9:28 am    Post subject: Reply with quote

vga wrote:
В Initialize секции читались тексты на языке логон и на английском. Если каких-то текстов на языке логона не было, тут же делалась их вставка через INSERT TEXTPOOL.
Вот это периодически и приводило к дампам. Техника, мягко говоря, спорная.

Ну это совсем другое дело. Действительно спорная техника.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
YuriT
Участник
Участник



Joined: 03 Nov 2008
Posts: 35

PostPosted: Mon Aug 02, 2010 11:23 am    Post subject: Reply with quote

А так?

Code:
IF sy-langu <> 'E'.
   gv_language = sy-langu.
   SET LANGUAGE 'E'.
   WRITE text-001.
   SET LANGUAGE gv_language.
ENDIF.


Тексты хранить только а одном языке, подтягивая его вне зависимости от языка логона.

А вообще, распространенный подход - искать текст на языке логона и, если не найден, на 'E'.
Back to top
View user's profile Send private message
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Mon Aug 02, 2010 12:29 pm    Post subject: Reply with quote

YuriT wrote:
Тексты хранить только а одном языке, подтягивая его вне зависимости от языка логона.

Мда.. А ведь возможность перевода текстов позиционируется как преимущество SAP при работе в транснациональных компаниях Laughing
По-хорошему лучше сразу перевести текст на нужный язык Wink

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
vga
Мастер
Мастер


Age: 130
Joined: 04 Oct 2007
Posts: 1218
Location: Санкт-Петербург

PostPosted: Mon Aug 02, 2010 2:50 pm    Post subject: Reply with quote

YuriT wrote:
А так?

Code:
IF sy-langu <> 'E'.
   gv_language = sy-langu.
   SET LANGUAGE 'E'.
   WRITE text-001.
   SET LANGUAGE gv_language.
ENDIF.


Тексты хранить только а одном языке, подтягивая его вне зависимости от языка логона.

А вообще, распространенный подход - искать текст на языке логона и, если не найден, на 'E'.


На мой вгляд, этот трюк вообще смысла не имеет, так как у сапа такой вариант продуман и для английского языка хорошо работает.
Code:
'English text'(001).



Вопрос то изначально был в том, что делать, когда дефолтовый язык, который может храниться только как юникодный. Прописывать в исходном тексте программы в качестве дефолтовый сообщений текст, на каком-нибудь грузинском - совсем не камильфо.

_________________
Молитва - это запрос разработчику на изменение кода программы.
Back to top
View user's profile Send private message Blog Visit poster's website
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.