Получить заголовок приложения для Windows Phone 7 из кода

Я хочу получить доступ к значению заголовка, которое хранится в файле WMAppManifest.xml, из моего кода ViewModel. Это тот же заголовок приложения, который задается через свойства проекта.

Есть ли способ получить к нему доступ из кода, используя что-то вроде App.

  • Запросы требуют объединений.
  • Если вы хотите слагов на нескольких языках, о мальчик.
  • Многие специалисты по базам данных работали над всеми видами теоретических и практических проблем, но на удивление мало кто работает над этим.

    12127] Я думаю, что в конечном итоге нам нужно:

    • Тип поля, в котором будут храниться несколько версий строк
    • Множество индексов для каждого такого поля, по одному для каждого языка или варианта, с возможностью указать правильный режим сортировки
    • Стандартный объект ORM для этой сумасшедшей вещи.
    • Элементы пользовательского интерфейса.

    Overkill? Конечно, может быть, но вся проблема - настоящий кошмар. И это не совсем редкий сценарий.

    Мы должны попытаться убедить поставщиков серверов поработать над этим.

    Редактировать: Кстати, я впервые использую вики сообщества; надеюсь, я делаю это правильно.

    Редактировать 2: Что-то в моей формулировке, кажется, заставило людей думать, что я атакую ​​саму концепцию СУБД. Я не; Я просто говорю, что встроенная поддержка локализации является крайне необходимой функцией.

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

    Я приведу пример. Предположим, у меня есть очень тривиальная таблица для совершенно тривиального хранилища:

    Products (id, price, description, name, slug)
    

    В EF / MVC я бы выбросил это в конструктор ORM, возможно, инкапсулировал его в репозиторий, собрал контроллер Products и имел действия для Index, Details Создание, обновление, редактирование и удаление. Чтобы идентифицировать товар по любому из пунктов, я бы просто сделал ГДЕ (slug = @slug). Я' d сделать модель представления для действий создания / редактирования, спроектировать элемент управления формы и подключить его прямо к хранилищу. Сделано и сделано. Чтобы получить доступ к сведениям о продукте, пользователь должен перейти по адресу / products / details / product-slug .

    Но затем, поскольку остальная часть сайта является двуязычной, я решаю соответствующим образом изменить таблицу продуктов.

    Products (id, price)
    ProductsText (productId, language, description, name, slug)
    

    Эй, это не так плохо. Да еще нет Затем вы пишете свои отношения и свои ограничения, а затем пишете, что вы записываете все свои свойства в модель представления, а затем вы делаете полный CRUD-контроллер для данных ProductsText или используете jQuery / Ajax для добавления кнопок создания / обновления / редактирования. на вашем контроллере продуктов, а затем вы добавляете логику проверки, чтобы убедиться, что пользователь вводит, по крайней мере, основной язык, и затем, когда вы хотите прочитать данные для страниц конечного пользователя, вы пишете другой запрос, чтобы объединить ProductsText.slug и ProductsText.language с продуктами ... Возможно, я что-то упустил, но вы поняли.

    Сложность программа просто взрывается с помощью стандартного кода, как только вы задействуете локализацию.

    Конечно, я не ожидаю, что проблема будет полностью решена, и это, очевидно, такая же проблема с пользовательским интерфейсом, как и проблема с базой данных. Но так много можно сделать, чтобы сделать все это проще. «Многострочный» тип поля может быть действительно хорошим началом.

    Редактировать 3: Кто-нибудь когда-нибудь слышал о службах моделирования SQL Server? В нем есть некоторые инструменты локализации , которые могут быть шагом в правильном направлении. Все еще ОСАГО, хотя.

    -- Simulate the French locale with the SET LANGUAGE statement.
    SET LANGUAGE French
    select Id, CountryName, 
       [System.Globalization].[SessionsString](CountryName, 1) as CountryNameString
    from [Location].[CountriesTable]
    

    14
    задан 6 revs 5 August 2010 в 21:48
    поделиться

    6 ответов

    Что ж, пока ответы не очень полезны. У меня была та же проблема в различных проектах, которые я делал в прошлом. И никогда не было ярлыка или готового решения, которое помогло бы мне решить эту проблему простым способом. Но ваш подход идет в правильном направлении, и, немного поработав над уровнем доступа к данным, вы действительно можете абстрагироваться от всего бремени, связанного с этим требованием.

    Таким образом, для метаданных, таких как типы, категории, страны и т. Д., Производительность не является проблемой, поскольку все данные можно кэшировать. Другое дело - записи с произвольным текстом. Скорее всего, вы не сможете их кэшировать, и они, как правило, довольно длинные.

    Возможно, вы уже знаете эти страницы:

    http://www.codeproject.com/KB/aspnet/LocalizedSamplePart2.aspx http://www.sisulizer.com/online-help/DatabaseLocalization.shtml Рекомендации по локализации базы данных SQL Server (2005/2008)

    1
    ответ дан 1 December 2019 в 16:15
    поделиться

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

    Например, пользователи нашего приложения в США, а не в Нидерландах или Саудовской Аравии будут видеть пользовательский интерфейс на языке по своему выбору, но для любой конкретной установки данные, которые они вводят, всегда будут на их родном языке.

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

    0
    ответ дан 1 December 2019 в 16:15
    поделиться

    Что такое локализованное поле базы данных?

    Обычно в приложениях, в которых мы работали, пользовательский интерфейс локализован. Для этого используется база данных, и мы помещаем все переводы (и, возможно, основные фразы) в таблицу с локальным кодом и phraseid в качестве первичного ключа. Это довольно просто, требует одного многократно используемого набора хранимых процедур, имеет хорошую производительность и хорошо понятное использование. Мы часто разрешаем перевод "на лету", так что интерфейс приложения включает функцию перевода, где исправления могут быть сделаны, и другие пользователи увидят их в реальном времени - либо приложения с богатыми формами, либо приложения с веб-формами (в зависимости от кэширования - что является еще одной ключевой особенностью локализации пользовательского интерфейса)

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

    В других "данных" локализация не имеет смысла, кроме как под руководством требований приложения. Например, даже если вы предлагаете продукт в нескольких странах, SKU и дистрибьютор могут быть разными. Этот уровень локализации очень специфичен для приложения, и мы часто работали с ним как с отдельной базой данных, и на самом деле ничто не связывало эти базы данных отдельных стран вместе - многие продукты были недоступны, хотя в других странах могли быть эквивалентные продукты.

    Если вы продаете одни и те же продукты по всему миру, то вы как бы попадаете в первоначальный сценарий в виде многоязычной CMS. Это требует значительной работы помимо базы данных низкого уровня. Например, если кто-то исправляет стандартное описание продукта, что сигнализирует переводчикам о том, что переводы также должны быть исправлены? Эти вопросы нетривиальны. Хотя я вижу, что поставщики баз данных могли бы помочь с функциями, это внутренние трудности требований и дизайна приложения, и не обязательно база данных может добавить функции, которые будут решены повсеместно".

    Вопрос сопоставления действительно немного неудобен. Обычно данные хранятся в формате nvarchar, и вы не будете знать, какую корелляцию вы хотите использовать для извлечения, в момент написания хранимой процедуры, поскольку локаль будет параметром. Это влияет только на коллекции, которые должны быть упорядочены по содержимому, а не по естественному ключу и, конечно, не на поиск по ключу - это не большая проблема, но она не может быть легко решена без динамического SQL (литье с использованием предпочтительной сортировки из таблицы в зависимости от переданного местоположения, если вы смешиваете данные из разных локалей, вам придется решить, хотите ли вы сначала сортировать по локали, а затем может быть трудно выбрать сортировку, которая будет правильно работать во всех локалях в одном наборе результатов). Вероятно, при таком широком разнообразии данных вы захотите использовать коллизию Windows.

    Подобно ORM, мы обычно использовали составной уникальный ключ locale/phraseid в качестве ключа для получения объектов (обычно у нас также был суррогатный идентификационный первичный ключ) - я знаю, что традиционным ORM не всегда нравится такой отход от поиска по бессмысленному суррогатному ключу.

    5
    ответ дан 1 December 2019 в 16:15
    поделиться

    «Многие специалисты по базам данных работали над всевозможными теоретическими и практическими проблемами, но на удивление мало людей работают над этой».

    Это потому, что работать не над чем, от теоретическая перспектива, в вашем примере. Все так называемые «проблемы», о которых вы говорите, - не что иное, как прямое следствие того, что вы управляете большим количеством данных.

    «В два раза больше CRUD».

    И почему это проблема? Я знаю, по крайней мере, несколько построенных мною систем, в которых этого гораздо больше, чем в вашем примере.

    «Необходимость в Ajax CRUD, если вам нужен прилично дружественный веб-интерфейс."

    Так ли это на самом деле? Я не знаю, но, в любом случае, как данные обрабатываются на уровне представления, СУБД не волнует, и если программист считает, что это слишком сложно / громоздко, то не надо" Я виню в этом СУБД.

    Более чем в два раза больше проверки - вам нужно убедиться, что отношение 1- *, а не 0- *.

    И почему это проблема? Если указано больше бизнес-правил , требуется дополнительная проверка.

    «Различия в сопоставлении между языками не учитываются».

    Как так? В чем смысл сопоставления английского текста с французским? Английского текста с украинским, русским или китайским? Или вы означают что-то еще?

    «Для запросов требуются соединения».

    И почему это проблема?

    «Если тебе нужны ярлыки на нескольких языках, о мальчик».

    В каком контексте? С какой целью?

    ВЫБРАТЬ язык, метка ИЗ ... ЕСТЕСТВЕННОЕ СОЕДИНЕНИЕ (ВЫБЕРИТЕ 'EN' в качестве языка СОЕДИНЕНИЕ ВЫБЕРИТЕ 'FR' как язык)

    Ой, но подождите, я забыл ... СОЕДИНЕНИЯ также являются проблемой.

    0
    ответ дан 1 December 2019 в 16:15
    поделиться

    Я сталкивался со всеми этими проблемами для локализованных веб-сайтов в стиле CRM. Не очень весело разрабатывать и оптимизировать, но это можно сделать. Мои 2 рубля:

    1. В два раза больше CRUD.

    Это зависит от того, как спроектирован ваш CRUD. Любая из моих хранимых процедур или функций, которые могут получить возможно локализованное поле, принимает параметр кода локали/культуры. Все эти поля также NVARCHAR, чтобы избежать проблем с кодировкой.

    2. Необходимость в Ajax CRUD, если вы хотите получить приличный дружественный веб-интерфейс.

    Полагаю, что да, но это зависит от приложения. Следует отложить "внутренний" CRUD (принцип DRY).

    3. Более чем двойная валидация - вам нужно убедиться, что отношения являются 1-*, а не 0-*.

    Это также предполагает, что все содержимое требуется во всех поддерживаемых локалях, вместо того, чтобы использовать механизм отступления. Например, содержимое MSDN от Microsoft доступно в нескольких локалях, но некоторые материалы доступны только в одной (обычно это US English, "нейтральная" локаль для Microsoft).

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

    4. Не учитываются различия в коллизии между языками.

    Я считаю, что проще разместить всю поддержку колляции на уровне пользовательского интерфейса/отчета. Многоязычные таблицы с указанием колляции/локальности в каждой строке были бы очень хорошей возможностью, но я не хотел бы ждать, пока она станет доступной...

    5. Запросы требуют объединений.

    Да, определенно делает запрос немного сложнее :-), но реального способа обойти это нет. Может стать еще сложнее, если включена обратная локаль (здесь поможет поле ранжирования "специфичность локали").

    6. Если вам нужны слизни на нескольких языках, о боже.

    Именно по этой причине параметры замены в строке формата в .NET были разработаны как индексные, а не позиционные (printf() и т.д. позиционные). В английском формате могут потребоваться замены в порядке 1, 2, 3, в то время как в немецком эквиваленте используются 3, 1, 2.

    Чтобы облегчить жизнь локализаторам, всякий раз, когда я создаю пакет ресурсов .NET, я документирую параметры, включая индекс, тип данных (включая минимальную и/или максимальную длину строки), и контекстное описание - контекст важен для определения пола текста в некоторых локалях.

    Множественность может также потребовать нескольких связанных ресурсов, поскольку в некоторых локалях требуется больше, чем просто "единственный" и "множественный" (например, "0 файлов", "1 файл", "2 файла").

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

    4
    ответ дан 1 December 2019 в 16:15
    поделиться

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

    Я не согласен с этим.Если смотреть на вашу проблему с точки зрения базы данных, есть две вещи, которые могут быть небольшим началом решения:

    возможность выполнять обновление полного представления (как через JOIN, так и через GROUP, в вашем случае). возможность иметь атрибуты типа «таблица» внутри таблиц базы данных. Тогда вы могли бы иметь весь набор применимых локализованных имен-файлов в виде единственного атрибута в одной строке для вашего продукта / ...

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

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

    Да, и кстати: SQL далеко не «теоретически чистый».

    -2
    ответ дан 1 December 2019 в 16:15
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: