Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Fri Jul 16, 2010 10:55 am Post subject: Хранение текстов
Ситуация. В 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 будут пустыми. Для работосопособности, тексты нужно сохранять во всех языках, что мало кто делает.
Тексты предназначены для перевода интерфейсов, а не для хранения константных значений которые должны отображаться одинакого, на каком бы языке логона пользователь не зашел.
Сейчас я предложил создать таблицу для хранения текстов для форм, следующей структуры:
Название программы | язык | уникальный идентификатор текста | сам текст.
Коллеги, хотелось услышать ваше мнение, как вы храните такие тексты? _________________ Молитва - это запрос разработчику на изменение кода программы.
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
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Fri Jul 16, 2010 1:25 pm Post subject:
Если нужна более изощренная логика по подстановке текстов, то можно хранить тексты в текстовых элементах программы, внутри программы их можно считать напрямую с помощью
Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Fri Jul 16, 2010 6:41 pm Post subject:
Armann wrote:
Валер, а комбинированный вариант не прокатит?
Code:
case f.
when '1'.
value = 'текст один'(001).
when '2'.
value = 'текст два'(002).
when '3'.
value = 'текст три'(003).
endcase.
Если в соответствующем text-xxx есть значение - то оно выводится, если значения нет - то выводится текст что в кавычках. Ну а в кавычки может быть лучше англоязычный вариант текста класть - чтоб в случае отсутствия перевода все равно было более менее понятно
Слава, этот вариант я знаю, использую, но только для других случаев и с английским. Но при этом опять же в исходном коде тексты хранятся. Ты бы видел армянском тексты, которые у нас в код навставляли? Там хоть все символы поменяй, один фиг никто не понимает, что написано. Я теперь и избавляюсь от такого хардкода. _________________ Молитва - это запрос разработчику на изменение кода программы.
Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Fri Jul 16, 2010 6:46 pm Post subject:
Удав wrote:
Если нужна более изощренная логика по подстановке текстов, то можно хранить тексты в текстовых элементах программы, внутри программы их можно считать напрямую с помощью
Code:
READ TEXTPOOL prog ... INTO itab ... LANGUAGE lg.
Видел в некоторых программах, которые твои коллеги по IBS писали (причем мной очень уважаемые абаперы), такой трюк, что перед запуском программы считывались тексты, и если их не существовало в языке логона, то динамически создавали их из английского. В 4.6c проблем не было, а в ECC 6.00 стали дампы периодически валиться. Как бороться с этими дампами - не знаю, поэтому закомментировал. _________________ Молитва - это запрос разработчику на изменение кода программы.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Mon Jul 19, 2010 5:16 pm Post subject:
Ну я в IBS никогда не работал, хотя и знаком с некоторыми из них по Лукойловским проектам
Документация предупреждает насчет использования дополнения STATE _________________ С уважением,
Удав.
Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Mon Jul 19, 2010 7:08 pm Post subject:
Удав wrote:
Документация предупреждает насчет использования дополнения STATE
Проблемы не READ. Делалось так. В Initialize секции читались тексты на языке логон и на английском. Если каких-то текстов на языке логона не было, тут же делалась их вставка через INSERT TEXTPOOL.
Вот это периодически и приводило к дампам. Техника, мягко говоря, спорная. _________________ Молитва - это запрос разработчику на изменение кода программы.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Tue Jul 20, 2010 9:28 am Post subject:
vga wrote:
В Initialize секции читались тексты на языке логон и на английском. Если каких-то текстов на языке логона не было, тут же делалась их вставка через INSERT TEXTPOOL.
Вот это периодически и приводило к дампам. Техника, мягко говоря, спорная.
Ну это совсем другое дело. Действительно спорная техника. _________________ С уважением,
Удав.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Mon Aug 02, 2010 12:29 pm Post subject:
YuriT wrote:
Тексты хранить только а одном языке, подтягивая его вне зависимости от языка логона.
Мда.. А ведь возможность перевода текстов позиционируется как преимущество SAP при работе в транснациональных компаниях
По-хорошему лучше сразу перевести текст на нужный язык _________________ С уважением,
Удав.
Age: 165 Joined: 04 Oct 2007 Posts: 1218 Location: Санкт-Петербург
Posted: Mon Aug 02, 2010 2:50 pm Post subject:
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).
Вопрос то изначально был в том, что делать, когда дефолтовый язык, который может храниться только как юникодный. Прописывать в исходном тексте программы в качестве дефолтовый сообщений текст, на каком-нибудь грузинском - совсем не камильфо. _________________ Молитва - это запрос разработчику на изменение кода программы.
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.