Пакет Text_LanguageDetect груши дал ужасные результаты: «роскошные апартаменты в центре города» были определены как португальский ...
Google API по-прежнему является лучшим решением, они дают бесплатный кредит в размере 300 долларов и предупреждают, прежде чем взимать с вас плату.
Ниже приведена супер простая функция, которая использует file_get_contents для загрузки языка, обнаруженного API, поэтому нет необходимости загружать или устанавливать библиотеки и т. д.
function guess_lang($str) {
$str = str_replace(" ", "%20", $str);
$content = file_get_contents("https://translation.googleapis.com/language/translate/v2/detect?key=YOUR_API_KEY&q=".$str);
$lang = (json_decode($content, true));
if(isset($lang))
return $lang["data"]["detections"][0][0]["language"];
}
Выполнить:
echo guess_lang("luxury apartments downtown montreal"); // returns "en"
Ключ API Google Translate можно получить здесь: https://console.cloud.google.com/apis/library/translate.googleapis. com /
Это простой пример коротких фраз, чтобы помочь вам. Для более сложных приложений вы захотите ограничить свой ключ API и явно использовать библиотеку.
По умолчанию, если у вас есть столбец идентификаторов, вам не нужно , но не нужно указывать его в разделе ЗНАЧЕНИЯ. Если ваша таблица:
ID NAME ADDRESS
Тогда вы можете сделать:
INSERT INTO MyTbl VALUES ('Joe', '123 State Street, Boston, MA')
Это автоматически сгенерирует идентификатор для вас, и вам вообще не нужно об этом думать. Если вы SET IDENTITY_INSERT MyTbl ON
, вы можете присвоить значение столбцу ID.
Еще одна уловка для создания списка столбцов - просто перетащить узел «Столбцы» из обозревателя объектов в окно запроса.
Поскольку нецелесообразно помещать код в комментарий, в ответ на ваш комментарий в ответе Эрика, что он не работает для вас ...
Я только что запустил следующее на Окно SQL 2005 (извините, нет 2000 под рукой) с настройками по умолчанию, и он работал без ошибок:
CREATE TABLE dbo.Test_Identity_Insert
(
id INT IDENTITY NOT NULL,
my_string VARCHAR(20) NOT NULL,
CONSTRAINT PK_Test_Identity_Insert PRIMARY KEY CLUSTERED (id)
)
GO
INSERT INTO dbo.Test_Identity_Insert VALUES ('test')
GO
SELECT * FROM dbo.Test_Identity_Insert
GO
Возможно, вы отправляете значение идентификатора в свой список значений? Я не думаю, что вы можете заставить его игнорировать столбец, если вы действительно передадите ему значение. Например, если в вашей таблице 6 столбцов, и вы хотите игнорировать столбец IDENTITY, вы можете передать только 5 значений.
Лучше всего явно указать столбцы:
Insert Into TableName(col1, col2,col2) Values(?, ?, ?)
В противном случае исходная вставка сломается, если вы добавите еще один столбец в таблицу.
У вас есть 2 варианта:
1) Либо указать список имен столбцов (без столбца идентификаторов).
2) SET IDENTITY_INSERT tablename ON, а затем инструкции вставки, которые обеспечивают явное значения для столбца идентификаторов, за которым следует SET IDENTITY_INSERT tablename OFF.
Если вы избегаете списка имен столбцов, возможно, этот «трюк» может помочь?:
-- Get a comma separated list of a table's column names
SELECT STUFF(
(SELECT
',' + COLUMN_NAME AS [text()]
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'TableName'
Order By Ordinal_position
FOR XML PATH('')
), 1,1, '')