-
Notifications
You must be signed in to change notification settings - Fork 84
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add in page edit capability through translation manager and config fo…
…r missing key logging using sparse lottery. Fix search to include missing key,locale combinations when the query matches a key.
- Loading branch information
Showing
5 changed files
with
275 additions
and
170 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,201 +1,215 @@ | ||
DROP FUNCTION IF EXISTS CAPITAL; | ||
DROP FUNCTION IF EXISTS CAPITAL | ||
; | ||
|
||
CREATE FUNCTION CAPITAL(input VARCHAR(1024)) | ||
RETURNS VARCHAR(1024) | ||
DETERMINISTIC | ||
BEGIN | ||
DECLARE len INT; | ||
DECLARE i INT; | ||
|
||
SET len = CHAR_LENGTH(input); | ||
SET input = LOWER(input); | ||
SET i = 0; | ||
SET input = CONCAT(LEFT(input, i), UPPER(MID(input, i + 1, 1)), right(input, len - i - 1)); | ||
SET i = i + 1; | ||
DECLARE len INT | ||
; | ||
|
||
DECLARE i INT | ||
; | ||
|
||
SET len = CHAR_LENGTH(input) | ||
; | ||
|
||
SET input = LOWER(input) | ||
; | ||
|
||
SET i = 0 | ||
; | ||
|
||
SET input = CONCAT(LEFT(input, i), UPPER(MID(input, i + 1, 1)), right(input, len - i - 1)) | ||
; | ||
|
||
SET i = i + 1 | ||
; | ||
|
||
WHILE (i < len) DO | ||
SET i = LOCATE(' ', input, i); | ||
SET i = LOCATE(' ', input, i) | ||
; | ||
|
||
IF i = 0 OR i = len | ||
THEN | ||
SET i = len; | ||
SET i = len | ||
; | ||
ELSE | ||
SET input = CONCAT(LEFT(input, i), UPPER(MID(input, i + 1, 1)), right(input, len - i - 1)); | ||
SET i = i + 1; | ||
END IF; | ||
END WHILE; | ||
SET input = CONCAT(LEFT(input, i), UPPER(MID(input, i + 1, 1)), right(input, len - i - 1)) | ||
; | ||
|
||
RETURN input; | ||
END; | ||
SET i = i + 1 | ||
; | ||
END IF | ||
; | ||
|
||
END WHILE | ||
; | ||
|
||
RETURN input | ||
; | ||
|
||
END | ||
; | ||
|
||
CREATE OR REPLACE VIEW en_translations AS | ||
SELECT * | ||
FROM ltm_translations | ||
WHERE locale = 'en'; | ||
WHERE locale = 'en' | ||
; | ||
|
||
CREATE OR REPLACE VIEW ru_translations AS | ||
SELECT * | ||
FROM ltm_translations | ||
WHERE locale = 'ru'; | ||
WHERE locale = 'ru' | ||
; | ||
|
||
|
||
CREATE OR REPLACE VIEW missing_translations AS | ||
SELECT | ||
ru.id, | ||
ru.group, | ||
ru.key, | ||
ru.value ru_value, | ||
en.value en_value | ||
SELECT ru.id, ru.group, ru.key, ru.value ru_value, en.value en_value | ||
FROM ru_translations ru | ||
JOIN en_translations en | ||
ON ru.`group` = en.`group` AND ru.`key` = en.`key` | ||
WHERE 1 = 1 | ||
AND ru.value is null or ru.value = en.value | ||
AND concat(en.`group`, '.', en.`key`) NOT IN ('messages.lang_en', 'messages.lang_ru', 'messages.use-site'); | ||
AND ru.value IS NULL OR ru.value = en.value | ||
AND concat(en.`group`, '.', en.`key`) NOT IN ('messages.lang_en', 'messages.lang_ru', 'messages.use-site') | ||
; | ||
|
||
SELECT * | ||
FROM missing_translations; | ||
FROM missing_translations | ||
; | ||
|
||
|
||
CREATE OR REPLACE VIEW have_translations AS | ||
SELECT | ||
ru.id, | ||
ru.group, | ||
ru.key, | ||
ru.value ru_value, | ||
en.value en_value | ||
SELECT ru.id, ru.group, ru.key, ru.value ru_value, en.value en_value | ||
FROM ru_translations ru | ||
JOIN en_translations en | ||
ON ru.`group` = en.`group` AND ru.`key` = en.`key` | ||
WHERE 1 = 1 | ||
AND ru.value is not null and ru.value <> en.value | ||
AND concat(en.`group`, '.', en.`key`) NOT IN ('messages.lang_en', 'messages.lang_ru', 'messages.use-site'); | ||
AND ru.value IS NOT NULL AND ru.value <> en.value | ||
AND concat(en.`group`, '.', en.`key`) NOT IN ('messages.lang_en', 'messages.lang_ru', 'messages.use-site') | ||
; | ||
|
||
SELECT * | ||
FROM have_translations; | ||
FROM have_translations | ||
; | ||
|
||
DROP TEMPORARY TABLE IF EXISTS ru_missing_translations | ||
; | ||
|
||
DROP TEMPORARY TABLE IF EXISTS ru_missing_translations; | ||
CREATE TEMPORARY TABLE ru_missing_translations | ||
AS SELECT * | ||
FROM missing_translations; | ||
FROM missing_translations | ||
; | ||
|
||
DROP TEMPORARY TABLE IF EXISTS ru_have_translations | ||
; | ||
|
||
DROP TEMPORARY TABLE IF EXISTS ru_have_translations; | ||
CREATE TEMPORARY TABLE ru_have_translations | ||
AS SELECT * | ||
FROM have_translations; | ||
FROM have_translations | ||
; | ||
|
||
SELECT * | ||
FROM ru_missing_translations; | ||
FROM ru_missing_translations | ||
; | ||
|
||
SELECT * | ||
FROM ru_have_translations; | ||
FROM ru_have_translations | ||
; | ||
|
||
|
||
select * | ||
from ru_missing_translations rm JOIN ru_have_translations rh on rm.key = rh.key;# and rm.en_value = rh.en_value; | ||
|
||
|
||
# SELECT * | ||
# FROM ltm_translations lt JOIN on lt.id = st.id; | ||
|
||
/* select all missing translations that have a pretty good match somewhere else*/ | ||
SELECT | ||
st.id, | ||
st.ru_value, | ||
st.en_value, | ||
ht.en_value, | ||
ht.ru_value | ||
FROM | ||
ru_missing_translations st JOIN ru_have_translations ht | ||
ON st.en_value LIKE BINARY ht.en_value | ||
ORDER BY st.id; | ||
|
||
/* update all missing translations that have a pretty good match somewhere else*/ | ||
UPDATE ltm_translations lt | ||
JOIN ( | ||
SELECT | ||
st.id, | ||
ht.ru_value | ||
FROM | ||
ru_missing_translations st JOIN ru_have_translations ht | ||
ON st.en_value LIKE BINARY ht.en_value | ||
) tr ON tr.id = lt.id | ||
SET lt.value = tr.ru_value, lt.status = 1; | ||
|
||
/* select all missing translations that have a descent match somewhere else*/ | ||
SELECT | ||
st.id, | ||
st.ru_value, | ||
st.en_value, | ||
ht.en_value ht_en_value, | ||
CAPITAL(ht.ru_value) ht_ru_value | ||
FROM | ||
ru_missing_translations st JOIN ru_have_translations ht | ||
ON /*st.key = ht.key AND*/ st.en_value LIKE BINARY CAPITAL(ht.en_value) | ||
ORDER BY st.id; | ||
|
||
/* update all missing translations that have a pretty good match somewhere else*/ | ||
UPDATE ltm_translations lt | ||
JOIN ( | ||
SELECT | ||
st.id, | ||
ht.ru_value | ||
FROM | ||
ru_missing_translations st JOIN ru_have_translations ht | ||
ON /*st.key = ht.key AND*/ st.en_value LIKE BINARY CAPITAL(ht.en_value) | ||
) tr ON tr.id = lt.id | ||
SET lt.value = CAPITAL(tr.ru_value), lt.status = 1; | ||
|
||
SELECT | ||
st.id, | ||
st.ru_value, | ||
st.en_value, | ||
ht.en_value ht_en_value, | ||
CAPITAL(ht.ru_value) ht_ru_value | ||
SELECT * | ||
FROM ru_missing_translations rm JOIN ru_have_translations rh ON rm.key = rh.key | ||
; | ||
|
||
# and rm.en_value = rh.en_value; | ||
|
||
|
||
SELECT mt.locale, mt.`group`, mt.`key`, mt.value, ht.value | ||
FROM (SELECT ht.`group`, ht.locale, ht.`key`, ht.value | ||
FROM | ||
(SELECT DISTINCT ht.`key`, ht.locale | ||
FROM ltm_translations ht WHERE `group` = 'page-titles') kt | ||
JOIN ltm_translations ht | ||
ON ht.`group` = 'messages' AND kt.`key` = ht.`key` AND kt.locale = ht.locale) ht | ||
LEFT OUTER JOIN ltm_translations mt | ||
ON mt.`group` = ht.`group` AND mt.`key` = ht.`key` AND mt.locale = ht.locale | ||
; | ||
|
||
## | ||
# get missing keys | ||
SET @group = 'page-titles' | ||
; | ||
|
||
#list missing translations that are in messages. | ||
SELECT kt.`group`, kt.locale, kt.`key`, ht.value | ||
FROM | ||
ru_missing_translations st JOIN ru_have_translations ht | ||
ON st.key = ht.key AND st.en_value LIKE CONCAT('%',ht.en_value,'%') | ||
ORDER BY st.id; | ||
|
||
/* update all missing translations that have a pretty good match somewhere else, ignoring case*/ | ||
UPDATE ltm_translations lt | ||
JOIN ( | ||
SELECT | ||
st.id, | ||
ht.ru_value | ||
(SELECT kt.`key`, lt.locale, @group `group` | ||
FROM | ||
(SELECT DISTINCT ht.`key` | ||
FROM ltm_translations ht WHERE `group` LIKE BINARY @group) kt | ||
CROSS JOIN (SELECT DISTINCT ht.locale | ||
FROM ltm_translations ht WHERE `group` LIKE BINARY @group) lt) kt | ||
LEFT JOIN ltm_translations ht | ||
ON ht.`group` = 'messages' AND kt.`key` = ht.`key` AND kt.locale = ht.locale | ||
WHERE NOT exists(SELECT * | ||
FROM ltm_translations lt WHERE lt.locale = kt.locale AND lt.`group` LIKE BINARY kt.`group` AND lt.`key` = kt.`key`) | ||
; | ||
|
||
# copy ones that exist | ||
UPDATE | ||
ltm_translations mt JOIN ltm_translations ht | ||
ON mt.`group` = 'page-titles' AND ht.`group` = 'messages' AND mt.`key` = ht.`key` AND mt.locale = ht.locale | ||
SET | ||
mt.value = ht.value, | ||
mt.status = 1 | ||
WHERE mt.value IS NULL | ||
; | ||
|
||
# now insert missing ones | ||
INSERT INTO ltm_translations | ||
( | ||
SELECT NULL, 1 status, ht.locale, @group `group`, ht.`key`, ht.value, ht.created_at, ht.updated_at, ht.source, NULL saved_value | ||
FROM | ||
(SELECT kt.`key`, lt.locale, @group `group` | ||
FROM | ||
ru_missing_translations st JOIN ru_have_translations ht | ||
ON st.key = ht.key AND st.en_value LIKE CONCAT('%',ht.en_value,'%') | ||
) tr ON tr.id = lt.id | ||
SET lt.value = CAPITAL(tr.ru_value), lt.status = 1; | ||
|
||
DROP TEMPORARY TABLE IF EXISTS ru_missing_translations; | ||
CREATE TEMPORARY TABLE ru_same_translations | ||
AS SELECT * | ||
FROM missing_translations; | ||
|
||
DROP TEMPORARY TABLE IF EXISTS ru_have_translations; | ||
CREATE TEMPORARY TABLE ru_have_translations | ||
AS SELECT * | ||
FROM have_translations; | ||
|
||
(SELECT DISTINCT ht.`key` | ||
FROM ltm_translations ht WHERE `group` LIKE BINARY @group) kt | ||
CROSS JOIN (SELECT DISTINCT ht.locale | ||
FROM ltm_translations ht WHERE `group` LIKE BINARY @group) lt) kt | ||
LEFT JOIN ltm_translations ht | ||
ON ht.`group` = 'messages' AND kt.`key` = ht.`key` AND kt.locale = ht.locale | ||
WHERE ht.`key` IS NOT NULL AND ht.locale IS NOT NULL | ||
AND NOT exists(SELECT * | ||
FROM ltm_translations lt WHERE lt.locale = kt.locale AND lt.`group` LIKE BINARY kt.`group` AND lt.`key` = kt.`key`) | ||
) | ||
; | ||
|
||
|
||
# search query that fills in missing locale,key combinations for a group | ||
SELECT * | ||
FROM ru_missing_translations; | ||
|
||
SELECT lt.* from ltm_translations lt | ||
JOIN ru_missing_translations st ON st.id = lt.id; | ||
|
||
# finally, set the translations that are the same to NULL so they show up as missing | ||
UPDATE ltm_translations lt | ||
JOIN ru_missing_translations st ON st.id = lt.id | ||
SET lt.value = NULL, lt.status = 1; | ||
|
||
|
||
COMMIT; | ||
|
||
|
||
#select * from ltm_translations WHERE value = 'Адрес Электронной Почты'; | ||
#update ltm_translations set value = 'е-майл', status = 1 where value = 'Адрес Электронной Почты'; | ||
|
||
# select * from ltm_translations where value = 'е-майл' and `key` <> 'email'; | ||
# update ltm_translations set value = NULL, status = 1 where value = 'е-майл' and `key` <> 'email'; | ||
FROM ltm_translations rt | ||
WHERE `key` LIKE '%for-beta%' or value like '%for-beta%' | ||
UNION ALL | ||
SELECT NULL id, 0 status, lt.locale, kt.`group`, kt.`key`, NULL value, NULL created_at, NULL updated_at, NULL source, NULL saved_value | ||
FROM (SELECT DISTINCT locale | ||
FROM ltm_translations) lt | ||
CROSS JOIN (SELECT DISTINCT `key`, `group` | ||
FROM ltm_translations) kt | ||
WHERE NOT exists(SELECT * | ||
FROM ltm_translations tr WHERE tr.`key` = kt.`key` AND tr.`group` = kt.`group` AND tr.locale = lt.locale) | ||
AND `key` LIKE '%for-beta%' | ||
; | ||
|
||
# insert missing keys for other locales to reduce hit on the database for missing keys | ||
INSERT into ltm_translations | ||
SELECT NULL id, 0 status, lt.locale, kt.`group`, kt.`key`, NULL value, NULL created_at, NULL updated_at, NULL source, NULL saved_value | ||
FROM (SELECT DISTINCT locale | ||
FROM ltm_translations) lt | ||
CROSS JOIN (SELECT DISTINCT `key`, `group` | ||
FROM ltm_translations) kt | ||
WHERE NOT exists(SELECT * FROM ltm_translations tr WHERE tr.`key` = kt.`key` AND tr.`group` = kt.`group` AND tr.locale = lt.locale) | ||
; | ||
|
||
|
||
# TRUNCATE table ltm_translations; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.