Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Локализация и статические классы и поля (http://www.flasher.ru/forum/showthread.php?t=186299)

Agation 31.10.2012 13:50

Локализация и статические классы и поля
 
День добрый, господа!
Занимаюсь локализацией проекта. Все надписи тяну с помощью ResourceManager'а :
Код AS3:

resourceManager.getString('ResultsCanvas','lMinutes')

Но вот незадача - в проекте куча статических полей и классов хранящие текст, который тоже нужно переводить.

Подскажите, как тут быть?

DaFive 31.10.2012 13:58

Так и переводить вручную. А если вы так сильно завязались на названия - тот тут уже проблема в структуре приложения.

Agation 31.10.2012 14:07

просто переписать не получиться. Нужно что бы при смене языка все надписи подтягивались из пакета ресурсов для выбранной локали.
например:
Код AS3:

resourceManager.getString('ResultsCanvas','refreshButton')

Если язык русский, то вернётся "Обновить". Если английский, то "Refresh". Так же нужно и с статик полями провернуть. Только увы ресурсМенеджер они конечно же не видят.

GBee 31.10.2012 14:34

РесурсМенеджер - синглтон, его можно где угодно трогать.

Код AS3:

var rm:IResourceManager = ResourceManager.getInstance();

Ну а само обновление полей все равно на вас. Где-то биндинг отработает, a где-то надо сказать контролам, чтобы забрали новые метки.

Agation 31.10.2012 15:54

Что-то никак не разберусь...
Давайте лучше на живом примере разберём.
Вот компонент. Его статик поля используются в других частях приложения. Тут попытался воспользоваться вашим советом.
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
                xmlns:s="library://ns.adobe.com/flex/spark"
                xmlns:mx="library://ns.adobe.com/flex/mx"
                        width="148" height="24">
 
        <fx:Script>
                <![CDATA[
                        var rm:IResourceManager = ResourceManager.getInstance(); //Ошибка: Обращение к несуществующему свойству ResourceManager
 
                        public static const STATUS_TYPES : Object =
                                {
                                        bad:
                                        {
                                                status_id: 2,
                                                name: rm, // Ошибка: Обращение несуществующего свойства rm.
                                                color: 0xFF0000
                                        },
                                        notBad:
                                        {
                                                status_id: 1,
                                                name: "С ошибками",
                                                color: 0xFF9100
                                        },
                                        notGood:
                                        {
                                                status_id: -1,
                                                name: "Нет данных",
                                                color: 0xF2FF00
                                        },
                                        good:
                                        {
                                                status_id: 0,
                                                name: "Работает",
                                                color: 0x9DFF00
                                        }
                                };
 
                ]]>
        </fx:Script>
 
        <fx:Declarations>
                <!-- Place non-visual elements (e.g., services, value objects) here -->
        </fx:Declarations>
        <fx:Metadata>
                [ResourceBundle("ResultsCanvas")]
        </fx:Metadata>

Хотелось что бы поле name менялось в зависимости от выбранного языка.

Код AS3:

public final class ApplicationConst
        {
              //List of Values constants
                public static const LOV_TEXTINPUT_TOOLTIP:String = "Для сокращения списка введите текст для поиска и нажмите 'Enter'";
                public static const LOV_TEXTINPUT_PROMPT:String = "Поиск";

и эти поля тоже подтягивали в зависимости от выбранного языка.

GBee 31.10.2012 16:28

Цитата:

//Ошибка: Обращение к несуществующему свойству ResourceManager
импорт-то где?
Да и визуальные компоненты вроде должны иметь ссылку и так


Цитата:

и эти поля тоже подтягивали в зависимости от выбранного языка.
Вообще странно вынесите все во внешний файлик.

Agation 31.10.2012 18:46

Цитата:

Вообще странно вынесите все во внешний файлик.
Что именно вынести? Статические поля или локализованные строки? Почему странно?

GBee 31.10.2012 22:37

Код AS3:

public static const LOV_TEXTINPUT_TOOLTIP:String = "Для сокращения списка введите текст для поиска и нажмите 'Enter'";
public static const LOV_TEXTINPUT_PROMPT:String = "Поиск";

Вот это тоже, по идее, должно быть в локалях и STATUS_TYPES.name тоже. Даже цвет можно.

Agation 01.11.2012 11:54

Да, полностью согласен, так и хочу сделать только у меня не получается потом это из локали вытащить!
Код AS3:

public static const LOV_TEXTINPUT_TOOLTIP:String = resourceManager.getString('ResultsCanvas','LOV_TEXTINPUT_TOOLTIP');
public static const LOV_TEXTINPUT_PROMPT:String = resourceManager.getString('ResultsCanvas','LOV_TEXTINPUT_PROMPT');

попросту не видит resourceManager, вообще короме статичных вещей ничего не видит(

STATUS_TYPES - объект, но думаю что это можно будет поправить. Но опять же главная загвозка в том что он статик. Можно ли оставив эти вещи статичными подвязать к ним строки из локали?

GBee 01.11.2012 13:23

Статик можно, а константы вряд ли


Часовой пояс GMT +4, время: 18:08.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.