Как встроить ссылки в локализованный текст

Я не действительно яркий парень, и у меня нет большого опыта с SqlClient. Метод SqlBulkCopy, но вот - мои 2 цента если это имеет значение. Я надеюсь, что это помогает Вам и другим (или по крайней мере заставляет людей вызывать мое незнание;).

Вы никогда не будете соответствовать необработанной скорости копии файла, если Ваш файл данных базы данных (mdf) не будет на отдельном физическом диске от Вашего файла журнала транзакций (ldf). Кроме того, любые кластерные индексы должны были бы также быть на отдельном физическом диске для более справедливого сравнения.

Ваша необработанная копия не регистрирует или поддерживает порядок сортировки избранных полей (столбцы) для индексации целей.

я соглашаюсь с Portman при создании некластеризованного семени идентификационных данных и изменении Вашего существующего некластеризованного индекса к кластерному индексу.

До того, какую конструкцию Вы используете на клиентах... (адаптер данных, набор данных, таблица данных, и т.д.). Если Ваш диск io на сервере в 100%, я не думаю, что Ваше время лучше всего проведено, анализируя клиентские конструкции, поскольку они, кажется, быстрее, чем сервер может в настоящее время обрабатывать.

, Если бы Вы переходите по ссылкам Portman о минимальном входе, я не думал бы, окружая Ваше массовое копирование в транзакциях, помог бы много, если кто-либо, но я много раз был неправ в моей жизни;)

Это не обязательно поможет Вам прямо сейчас, но если Вы выясняете свою текущую проблему, этот следующий комментарий мог бы помочь со следующим узким местом (сетевая пропускная способность) - особенно, если это по Интернету...

Chopeen задал интересный вопрос также. Как Вы решали использовать 300 блоков количества записей для вставки? SQL Server имеет размер пакета по умолчанию (я полагаю, что это - 4 096 байтов), и имело бы смысл мне получать размер Ваших записей и гарантировать создание эффективного использования из пакетной передачи между клиентом и сервером. (Отметьте, можно изменить размер пакета на клиентском коде в противоположность параметру сервера, который, очевидно, изменил бы его для всей связи сервера - вероятно, не хорошая идея.), Например, если Ваш рекордный размер приводит к 300 рекордным пакетам, требующим 4 500 байтов, Вы отправите 2 пакета со вторым главным образом потраченным впустую пакетом. Если бы пакетное количество записей было произвольно присвоено, могло бы иметь смысл делать некоторую быструю легкую математику.

Из того, что я могу сказать (и помнить о размерах типа данных) у Вас есть точно 20 байтов для каждой записи (если int=4 байты и smallint=2 байты). Если Вы используете 300 пакетов количества записей, то Вы пытаетесь отправить 300 x 20 = 6 000 байтов (плюс, я предполагаю немного служебное для соединения, и т.д.). Вы могли бы быть более эффективными для повышения их в 200 пакетах количества записей (200 x 20 = 4,000 + комната для издержек) = 1 пакет. С другой стороны Ваше узкое место все еще, кажется, диск io сервера.

я понимаю, что Вы выдерживаете сравнение, необработанные данные передают SqlBulkCopy с теми же аппаратными средствами/конфигурацией, но вот то, куда я пошел бы также, если бы проблема была моей:

Это сообщение, вероятно, не будет больше помогать Вам, поскольку это довольно старо, но я затем спросил бы, что конфигурация RAID Вашего диска и какую скорость диска Вы используете? Попытайтесь поместить файл журнала на диск, который использует RAID 10 с RAID 5 (идеально 1) на Вашем файле данных. Это может помочь уменьшить большое шпиндельное перемещение к различным секторам на диске и закончиться в большее количество времени, читая/пишущий вместо непроизводительного "движущегося" состояния. Если Вы уже разделяете свои файлы данных и файлы журнала, сделайте у Вас есть свой индекс на различном физическом диске от Вашего файла данных (можно только сделать это с кластерными индексами). Это допускало бы не только одновременно обновление регистрирующейся информации со вставкой данных, но и позволит индексу, вставляющему (и любые дорогостоящие операции индексной страницы) происходить одновременно.

16
задан Robert Claypool 16 May 2019 в 15:24
поделиться

5 ответов

В настоящее время я использую следующую настройку:

У меня есть глобальный файл ресурсов, содержащий мои основные тексты, с именем Strings.resx (Strings.NL-nl.resx и т. Д.). Рядом с этим у меня есть глобальный файл, содержащий все локализации моих ссылок действий. То есть: ActionLinks.resx и locals.

Теперь то, что я делаю, это в моем Strings.resx что-то вроде:

Strings.resx

Пожалуйста, {0} продолжить

Local language Strings. NL-nl.resx

{0} om verder te gaan

Теперь уловка состоит в том, чтобы сделать что-то вроде:

<%= Html.Encode(string.Format(Resources.Strings.ControllernameViewnameKey, 
Html.ActionLink(Resources.ActionLinks.login, "Account", "LogOn")))

Если вам нужно более одной переменной в вашей ссылке, вы можете передать массив объектов в

 string.Format()

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


Edit

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

4
ответ дан 30 November 2019 в 21:46
поделиться

Я бы предложил разделить ресурс на два значения, например, это
- 1: {0}, чтобы продолжить.
- 2: логин

или португальский
- 1: {0} в пользу параконтинуара.
- 2: Entre

А затем объедините их, чтобы создать ссылку и сообщение. Ссылка / ссылка действия / все, что вам нужно, заменяется на {0}.

1
ответ дан 30 November 2019 в 21:46
поделиться

Я думаю, это сводится к 4 вариантам:

  1. Добавьте ссылку в локализацию: «Пожалуйста, войдите , чтобы продолжить»
  2. Множественные локализации - либо:
    1. «Пожалуйста, {0} продолжить» и «войдите» или
    2. «Пожалуйста», «войдите» и «продолжить»
  3. Разметка внутри ваших локализаций, например:
    1. "Пожалуйста, {0} войдите {1}, чтобы продолжить"
    2. "Пожалуйста, {start-login} войдите {end-login}, чтобы продолжить"
    3. "Пожалуйста, войдите , чтобы продолжить "
  4. Только не поддерживайте это - сделайте все предложение ссылкой

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

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

Вариант 3 - мое предпочтительное решение. Однако вы по-прежнему создаете проблемы для своих переводчиков - большинство из них не поймет ваши токены / HTML / разметку в тексте. У нас уже есть HTML, поэтому 3.3 у нас сработал.

Возможно, стоит рассмотреть вариант 4 - достаточно ли вы получаете от встроенной ссылки, чтобы окупить ее дополнительную работу и обслуживание? Это важный вопрос, относящийся к вашему приложению: если все предложение является ссылкой (а не просто активный глагол - что является лучшей практикой для ссылки), действительно ли вы теряете достаточно, чтобы вариант 2 или 3 стоил дополнительных усилий?

Я думаю, что, возможно, поэтому не существует более стандартизированных способов сделать это, поскольку для большинства проектов (возможно, в 9 случаях из 10) достаточно варианта 4, так что это становится проблемой только в некоторых особых случаях. У нас есть сложное приложение, содержащее около 11000 фрагментов локализованного текста, которое большую часть времени используют 4, и есть только 4 или 5 мест, где нам пришлось использовать 3. 3

Наша техническая реализация аналогична вашей:

<%= Html.Localise("Controller/Action/KeyOfTextOnPage") %>

Для ссылок у нас есть специальный помощник:

<%= Html.LocaliseLink("Controller/Action/KeyOfTextOnPage", "~/link.aspx") %>
<%= Html.LocaliseAction("Controller/Action/KeyOfTextOnPage", "action", "controller") %>
14
ответ дан 30 November 2019 в 21:46
поделиться

Я должен согласиться с другими ответами - отдельно в 2.

Тем не менее, я бы добавил, что не считаю 2 слова разделенными / несвязанными. Придерживайтесь простого соглашения, например: LoginMessage и LoginMessageLink, соответствующие всему тексту предложения и тексту ссылки.

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

Если вам нужно несколько раз связать одну и ту же страницу по несколько раз, поставьте для этого несколько маркеров. Например:

English: "Please ##login## to continue."
Português: "##Entre## por favor para continuar."
2
ответ дан 30 November 2019 в 21:46
поделиться

Я бы просто поискал пользовательские заполнители, которые индексируют ссылку, которую вы хотите разместить вокруг текста. Например,

"Please #123#login#123# to continue"

Если вы обнаружите # n # в своей строке, вы знаете, что окружающая строка должна быть ссылкой на URL-адрес, указанный индексом n в вашем файле поиска (db или что-то еще).

1
ответ дан 30 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

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