mirror of
https://github.com/vrana/adminer.git
synced 2026-03-25 05:50:04 +01:00
Compare commits
1419 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9f768fe0d | ||
|
|
e40e3434ef | ||
|
|
4da8628305 | ||
|
|
88647b93e4 | ||
|
|
b8c5eec46d | ||
|
|
dadbb37f00 | ||
|
|
ea1acfc8bc | ||
|
|
2dd65f0c0f | ||
|
|
473f7264f8 | ||
|
|
db01282e29 | ||
|
|
1f173e18bd | ||
|
|
4043092ec2 | ||
|
|
60ad161178 | ||
|
|
a12d31c5a8 | ||
|
|
f6880b59d6 | ||
|
|
72beecc0ab | ||
|
|
42de1051a6 | ||
|
|
af1a908f56 | ||
|
|
205305d6b5 | ||
|
|
0e5f39042a | ||
|
|
f94f29124a | ||
|
|
28996e2286 | ||
|
|
7f8c93a6f1 | ||
|
|
25dda09bce | ||
|
|
ff45b8f7a9 | ||
|
|
3a36112a10 | ||
|
|
e9e61fce26 | ||
|
|
5a1498d160 | ||
|
|
ccb7442d1b | ||
|
|
eebda8695b | ||
|
|
94d18d003e | ||
|
|
3881fc1680 | ||
|
|
9bd63a1326 | ||
|
|
92d5858b03 | ||
|
|
d506f1e241 | ||
|
|
cd7f06c8b2 | ||
|
|
b83c61fca3 | ||
|
|
3882bfaac1 | ||
|
|
29e2475b5a | ||
|
|
fd1dd4ecf4 | ||
|
|
dc9e87dbd6 | ||
|
|
66f335fb63 | ||
|
|
574c07b8f5 | ||
|
|
84e4122225 | ||
|
|
a61a76716b | ||
|
|
5d317111c7 | ||
|
|
6af375c67d | ||
|
|
609b8690ec | ||
|
|
13260dcb76 | ||
|
|
e002a3bc99 | ||
|
|
f44f186b38 | ||
|
|
c24a6a6aef | ||
|
|
f11a31e0a9 | ||
|
|
38e741054a | ||
|
|
513e1f425f | ||
|
|
a023e98c4d | ||
|
|
633e7ced9c | ||
|
|
3a3df6962b | ||
|
|
1e4fb073b5 | ||
|
|
08637cee62 | ||
|
|
4742bde873 | ||
|
|
7a89b5a037 | ||
|
|
c5b5b61be1 | ||
|
|
2b0ac4c0e1 | ||
|
|
ef53494df0 | ||
|
|
98458f737d | ||
|
|
68edea54ea | ||
|
|
6660789d04 | ||
|
|
ee4ffe9b65 | ||
|
|
27de0417fe | ||
|
|
339981b9d6 | ||
|
|
53a8496412 | ||
|
|
fb38ae2ffd | ||
|
|
91da14b15c | ||
|
|
51abdcdab9 | ||
|
|
4038144c38 | ||
|
|
50ed4f7ce7 | ||
|
|
4f8ecd3c11 | ||
|
|
f2063c92c5 | ||
|
|
5db1ea3301 | ||
|
|
e915f73f18 | ||
|
|
92f197b7c1 | ||
|
|
63484fb875 | ||
|
|
701c5cd73b | ||
|
|
4310d710d9 | ||
|
|
2bb472d7a6 | ||
|
|
9e74c0632f | ||
|
|
d4f7e04156 | ||
|
|
124092fd7c | ||
|
|
144039d0cb | ||
|
|
a8c218f192 | ||
|
|
2dd3bd0e1a | ||
|
|
28209301ca | ||
|
|
7ccc1e3e15 | ||
|
|
93c7fb248c | ||
|
|
73934caec8 | ||
|
|
4559e7541c | ||
|
|
d847f0d1aa | ||
|
|
c727231ccd | ||
|
|
3d92eb703b | ||
|
|
3d88cc2c8e | ||
|
|
922e1d96b0 | ||
|
|
52defd6f19 | ||
|
|
318cece1bd | ||
|
|
5c2f74136c | ||
|
|
8c392363b1 | ||
|
|
66b01a4b9c | ||
|
|
7db10e95d9 | ||
|
|
31e28fbd00 | ||
|
|
19f23fe9ee | ||
|
|
6e5315349b | ||
|
|
95729680ef | ||
|
|
5c395afc09 | ||
|
|
cde988853d | ||
|
|
f8288dd227 | ||
|
|
94194aac19 | ||
|
|
438c7f55be | ||
|
|
7edf80f636 | ||
|
|
b2e0d9f396 | ||
|
|
cc9ed0939c | ||
|
|
ee75df6f15 | ||
|
|
23fdbedba1 | ||
|
|
8762895bb3 | ||
|
|
84063fb7cd | ||
|
|
eb20ba30a1 | ||
|
|
1ce0a9aa94 | ||
|
|
96be913994 | ||
|
|
6f972ff9ab | ||
|
|
7c4718ae3d | ||
|
|
b558ec8ecf | ||
|
|
5cab8eabb7 | ||
|
|
d888031603 | ||
|
|
49f365384b | ||
|
|
34345d8071 | ||
|
|
97ec60bb5f | ||
|
|
5a6e5b4443 | ||
|
|
7b524ff5d2 | ||
|
|
64d4818a82 | ||
|
|
ccd2374b0b | ||
|
|
1e1c46ac72 | ||
|
|
75cd1c3f28 | ||
|
|
b89d418dcf | ||
|
|
190146672f | ||
|
|
d6e71b5c53 | ||
|
|
0618429bce | ||
|
|
b0a217abdd | ||
|
|
35bfaa7506 | ||
|
|
e0a3205676 | ||
|
|
50bb83dbf2 | ||
|
|
697eedc6a1 | ||
|
|
d94adc09cc | ||
|
|
4e2a448e28 | ||
|
|
ac40be998d | ||
|
|
6a2de873e1 | ||
|
|
a9c1004232 | ||
|
|
37fa4de650 | ||
|
|
1d1f11504c | ||
|
|
2319ec7692 | ||
|
|
d7c37f6bb5 | ||
|
|
80747e0da8 | ||
|
|
679c602b6b | ||
|
|
cd2fb4acee | ||
|
|
59b6efac9f | ||
|
|
3f38b61366 | ||
|
|
9ab205776d | ||
|
|
681b5e7b7a | ||
|
|
9c5efb9f8c | ||
|
|
2373409631 | ||
|
|
ad16cb8581 | ||
|
|
0293613c21 | ||
|
|
fe9ea18d2e | ||
|
|
eea1bce828 | ||
|
|
6d39f290cc | ||
|
|
1bfffbf26b | ||
|
|
f09003ea4b | ||
|
|
2f7f0df09f | ||
|
|
5da5b75536 | ||
|
|
8706bc7c0f | ||
|
|
c2b7d38f2c | ||
|
|
fcd90a74f6 | ||
|
|
05cddd38e5 | ||
|
|
c7550bf68f | ||
|
|
6ae81cd0ea | ||
|
|
677774405c | ||
|
|
39375b82d8 | ||
|
|
5944ca09a3 | ||
|
|
5a507ec586 | ||
|
|
c24dd79c22 | ||
|
|
08c132cbea | ||
|
|
a4e997fe60 | ||
|
|
0678ce1222 | ||
|
|
5acdc55a4a | ||
|
|
fd5f5b8805 | ||
|
|
d90d06e832 | ||
|
|
feb59fa8cf | ||
|
|
1bcb440698 | ||
|
|
b9594d13d6 | ||
|
|
789ebc07bd | ||
|
|
3310e18efa | ||
|
|
965fe2e8ae | ||
|
|
acb3f9b9d1 | ||
|
|
8ae059d2ac | ||
|
|
2a3de78a8e | ||
|
|
cb37a141f4 | ||
|
|
32955f7802 | ||
|
|
5ffec58a8f | ||
|
|
34a0bfd939 | ||
|
|
b07908282b | ||
|
|
bce0e8d54a | ||
|
|
c6fc6b63e8 | ||
|
|
03961bbe1b | ||
|
|
f37a878b62 | ||
|
|
021e3f900d | ||
|
|
3d32470b87 | ||
|
|
f692b6498f | ||
|
|
3b056fe308 | ||
|
|
d6ec4ca0b3 | ||
|
|
903de0e889 | ||
|
|
48f33f6255 | ||
|
|
1b33729110 | ||
|
|
788d383609 | ||
|
|
364e032b69 | ||
|
|
b7641a2d13 | ||
|
|
5f4af56f68 | ||
|
|
95a92ceb95 | ||
|
|
306e8733e7 | ||
|
|
67b84d1167 | ||
|
|
ab76024da7 | ||
|
|
4a27882a97 | ||
|
|
00d36efcf1 | ||
|
|
92d443dac0 | ||
|
|
d71cb127cf | ||
|
|
fd1691cb1d | ||
|
|
d5bf51b2a7 | ||
|
|
b7b4157bcb | ||
|
|
10b00e13b1 | ||
|
|
45caae1660 | ||
|
|
36e9a4d6e1 | ||
|
|
9b58ecf925 | ||
|
|
36ade4e197 | ||
|
|
6a5b0abbb4 | ||
|
|
33234fef19 | ||
|
|
4b6833ba65 | ||
|
|
d846eac97e | ||
|
|
0eab60c338 | ||
|
|
7f32e26759 | ||
|
|
327041874e | ||
|
|
37a3dd6c6b | ||
|
|
02f5cbdc4d | ||
|
|
deea21dd2d | ||
|
|
f00f7a0e19 | ||
|
|
48292b70e8 | ||
|
|
15900301ee | ||
|
|
0e6f1972e9 | ||
|
|
4e91550b14 | ||
|
|
333da64cdb | ||
|
|
a2ec51e948 | ||
|
|
d114535911 | ||
|
|
7247f801bd | ||
|
|
21f0481a1d | ||
|
|
7defb7787d | ||
|
|
659003e07f | ||
|
|
2cb426b464 | ||
|
|
2117f224b6 | ||
|
|
7ea6266482 | ||
|
|
edb79998a9 | ||
|
|
41043f8dad | ||
|
|
31bbadb479 | ||
|
|
a2fbcbe28e | ||
|
|
a623cd69de | ||
|
|
ed346be313 | ||
|
|
7eaa57fc0b | ||
|
|
c275362c30 | ||
|
|
b2606cda0e | ||
|
|
da76e6b9b8 | ||
|
|
83fe083f2f | ||
|
|
85e6f2ac9e | ||
|
|
e148db4b0f | ||
|
|
660703e422 | ||
|
|
55f11df052 | ||
|
|
ea6370ef77 | ||
|
|
0ad6a1e578 | ||
|
|
e546b483a1 | ||
|
|
5b443a4e7d | ||
|
|
e4837a0564 | ||
|
|
83a0776e8d | ||
|
|
5bebb439a1 | ||
|
|
9f0ee9cf41 | ||
|
|
c002009bfe | ||
|
|
a592ad52f1 | ||
|
|
3127c0d95e | ||
|
|
9447d97a6a | ||
|
|
c8e41ee649 | ||
|
|
b327a76fc0 | ||
|
|
7f2dd73670 | ||
|
|
c8975a151c | ||
|
|
150841e5d7 | ||
|
|
ae03bdd4c4 | ||
|
|
01e08cc053 | ||
|
|
a426fefd40 | ||
|
|
90df1b14f0 | ||
|
|
cd3231b4af | ||
|
|
65c52735fb | ||
|
|
93ccc7502b | ||
|
|
84e86cf572 | ||
|
|
1ce5b5ad31 | ||
|
|
941bf22e52 | ||
|
|
a5c54563c6 | ||
|
|
0234fe4a66 | ||
|
|
1883e250ff | ||
|
|
56d8b89bee | ||
|
|
4d66e42817 | ||
|
|
94f6a45a2a | ||
|
|
0f08592bc0 | ||
|
|
a5cbad504c | ||
|
|
d581f3dedb | ||
|
|
e8e4934e97 | ||
|
|
e959e46fa5 | ||
|
|
bb3d2957e1 | ||
|
|
ea408aa530 | ||
|
|
df90d9f68c | ||
|
|
cf76ad529b | ||
|
|
3d84dcf859 | ||
|
|
4b9d88545e | ||
|
|
26a39ac243 | ||
|
|
3676b7fb71 | ||
|
|
c564a8ef50 | ||
|
|
2780eb01f5 | ||
|
|
b98d0bcc55 | ||
|
|
e856e28892 | ||
|
|
8f269d66b0 | ||
|
|
3de94b67ca | ||
|
|
a9a7488454 | ||
|
|
36f13031f7 | ||
|
|
6f25b1b5cf | ||
|
|
659c34f7c5 | ||
|
|
11f24a52e4 | ||
|
|
3c3d861f41 | ||
|
|
7b60b03e6a | ||
|
|
84c65fcca6 | ||
|
|
733fe9e430 | ||
|
|
5c3fb875e1 | ||
|
|
60d1b7b3b4 | ||
|
|
db11fa4c1a | ||
|
|
c3cfc0e69b | ||
|
|
5f4d407f2e | ||
|
|
70afe70b72 | ||
|
|
75f43a4454 | ||
|
|
78f4513d9d | ||
|
|
89c66ccabe | ||
|
|
6ba77b7899 | ||
|
|
d271d0b481 | ||
|
|
af7ac6f06a | ||
|
|
19034c35fe | ||
|
|
88438cd607 | ||
|
|
34c792bb59 | ||
|
|
6ed94f1f6d | ||
|
|
8c4726bb61 | ||
|
|
8ab2c7e03b | ||
|
|
665fafb297 | ||
|
|
67c2a91c67 | ||
|
|
78b8707bd0 | ||
|
|
7c15940be8 | ||
|
|
8c5603a822 | ||
|
|
4e7c31a589 | ||
|
|
cf9cad66e2 | ||
|
|
26a3967cf9 | ||
|
|
6c63c2f91e | ||
|
|
acee5c0011 | ||
|
|
36b75b4203 | ||
|
|
4a24ee7672 | ||
|
|
e21ddd9767 | ||
|
|
f844fc499e | ||
|
|
52d7c38ef1 | ||
|
|
53dd78f5af | ||
|
|
ea1dad584b | ||
|
|
910bb39424 | ||
|
|
14db884471 | ||
|
|
3410836c12 | ||
|
|
cd503f6a0d | ||
|
|
00721402e0 | ||
|
|
4355aaa96f | ||
|
|
b1cdc7902b | ||
|
|
3f4f3454f8 | ||
|
|
846435aef8 | ||
|
|
d7982e0b29 | ||
|
|
7b35ebd82e | ||
|
|
5b359263eb | ||
|
|
6ebbd8c719 | ||
|
|
8bb51bec36 | ||
|
|
fc5ddddf92 | ||
|
|
d3a429314a | ||
|
|
b4392b3f91 | ||
|
|
2021ea8fd7 | ||
|
|
7cb3e768bb | ||
|
|
baf7225602 | ||
|
|
0cfc68e6c6 | ||
|
|
03dfea2943 | ||
|
|
54f6806339 | ||
|
|
ee4f7db641 | ||
|
|
b53762ae5f | ||
|
|
866d109a9b | ||
|
|
37c57c386a | ||
|
|
1f5ca321b6 | ||
|
|
059d6266e2 | ||
|
|
0e1d8c67fc | ||
|
|
a113a25123 | ||
|
|
49a865d106 | ||
|
|
026b362e7d | ||
|
|
7c32360c67 | ||
|
|
8a94bc6f41 | ||
|
|
3f901cfe30 | ||
|
|
c8fd73d70a | ||
|
|
30d0060b96 | ||
|
|
8b157a673e | ||
|
|
ce381aaf48 | ||
|
|
d3eac979d4 | ||
|
|
f19e23c98b | ||
|
|
705d3a910f | ||
|
|
d18c7b3587 | ||
|
|
1f12ea4e4a | ||
|
|
71a6a1269d | ||
|
|
6a3bce1174 | ||
|
|
28acee861f | ||
|
|
42b15654c4 | ||
|
|
e2d858d638 | ||
|
|
879963dec1 | ||
|
|
daa19b0a6e | ||
|
|
d27ee7a388 | ||
|
|
1ec4637ade | ||
|
|
ea1ff7e902 | ||
|
|
2761f44cf4 | ||
|
|
557b8b178e | ||
|
|
07d1bc4291 | ||
|
|
7ac96dd0b2 | ||
|
|
eeb7ce1939 | ||
|
|
ea4ac5c8f3 | ||
|
|
3906231dc5 | ||
|
|
fad20d1065 | ||
|
|
ffb4ee3a61 | ||
|
|
34d338b185 | ||
|
|
1b148bc08c | ||
|
|
f4983dfd5f | ||
|
|
800fbb9b9e | ||
|
|
4b1960f498 | ||
|
|
e299e9d82d | ||
|
|
cf7fe88990 | ||
|
|
60e5d24116 | ||
|
|
a1927d5b71 | ||
|
|
76d7560d27 | ||
|
|
f0b7d8ccd0 | ||
|
|
d322e0165b | ||
|
|
4009ede3ee | ||
|
|
cddd61c214 | ||
|
|
8b8cfd9f04 | ||
|
|
99d7b88341 | ||
|
|
2db1c74310 | ||
|
|
fb2d34f739 | ||
|
|
6e2f681faa | ||
|
|
686865bc10 | ||
|
|
996ebf61d7 | ||
|
|
6a7ee5a2f3 | ||
|
|
4b45722fad | ||
|
|
14998e12b6 | ||
|
|
718f9d3791 | ||
|
|
964a988fef | ||
|
|
66e7ec56bb | ||
|
|
ca336427f5 | ||
|
|
8a75cbc630 | ||
|
|
c8bb112a5d | ||
|
|
06660882b5 | ||
|
|
42eec7d728 | ||
|
|
cac523402a | ||
|
|
02cd416093 | ||
|
|
33f0023d37 | ||
|
|
f09d26a51d | ||
|
|
b500a46f9a | ||
|
|
19653de764 | ||
|
|
29c127e94a | ||
|
|
4417a8b220 | ||
|
|
17b110f0d5 | ||
|
|
b649fb2f3f | ||
|
|
d3914ea58e | ||
|
|
31d8803db2 | ||
|
|
d43b773214 | ||
|
|
f09a04ed09 | ||
|
|
d7f9b6b5de | ||
|
|
197abdcb70 | ||
|
|
c2de3b8ec1 | ||
|
|
c52fb951b0 | ||
|
|
14429ff355 | ||
|
|
a7632fd9fd | ||
|
|
967d5c64a3 | ||
|
|
c34ada5368 | ||
|
|
2d7bda4d1e | ||
|
|
6cfb3676a7 | ||
|
|
11a7fc0277 | ||
|
|
de539cf0c7 | ||
|
|
880902da17 | ||
|
|
89ceb06208 | ||
|
|
d2ed0f7810 | ||
|
|
7b0c58af32 | ||
|
|
d3cdfc17de | ||
|
|
f097817386 | ||
|
|
3b55c4c0f7 | ||
|
|
6636434378 | ||
|
|
dd3e57086b | ||
|
|
473b60361b | ||
|
|
f128c2d1ea | ||
|
|
c75096f173 | ||
|
|
c0b2c506bc | ||
|
|
0ebf710d41 | ||
|
|
fa41126c37 | ||
|
|
09920e0056 | ||
|
|
685bf29abc | ||
|
|
0866c79afb | ||
|
|
e8e3ced948 | ||
|
|
52d98e16fa | ||
|
|
763e66a148 | ||
|
|
8868b48e4c | ||
|
|
4961588f7d | ||
|
|
f4625da53d | ||
|
|
dc94b2ec38 | ||
|
|
f8af8c9cbf | ||
|
|
e55f0d7cb2 | ||
|
|
5b7f2d9086 | ||
|
|
6d55395d9e | ||
|
|
2e6190fdf1 | ||
|
|
b9ad864b75 | ||
|
|
7296f017fb | ||
|
|
ae91088cb3 | ||
|
|
51a574926d | ||
|
|
532a4ee083 | ||
|
|
6b9c0dee14 | ||
|
|
be75939344 | ||
|
|
d667f585e0 | ||
|
|
ebb23a7a88 | ||
|
|
e9add6d985 | ||
|
|
e3346fb0bc | ||
|
|
ae2ea56681 | ||
|
|
080fd0f374 | ||
|
|
e32f90f8ff | ||
|
|
7ad09d2cb4 | ||
|
|
40038d4210 | ||
|
|
2adc174541 | ||
|
|
2fb2d208c0 | ||
|
|
4de6e3180d | ||
|
|
8829ccdf93 | ||
|
|
0320bcdda6 | ||
|
|
851700516d | ||
|
|
d542843fdd | ||
|
|
4bb2f806b1 | ||
|
|
cc31a69b65 | ||
|
|
78f0a1152e | ||
|
|
1f21cd4329 | ||
|
|
9f69160797 | ||
|
|
e81334ef87 | ||
|
|
6c3e1e2768 | ||
|
|
92739f48ce | ||
|
|
d28d01e76c | ||
|
|
75450548b3 | ||
|
|
c3b4208853 | ||
|
|
d38c673e2a | ||
|
|
93686eab65 | ||
|
|
224ddb5a33 | ||
|
|
4db23fd471 | ||
|
|
a003866a55 | ||
|
|
0d90f1f1dd | ||
|
|
ef5a76392d | ||
|
|
8d0cbb6eb4 | ||
|
|
536999d4dc | ||
|
|
827a2b8a54 | ||
|
|
a954f7d4b4 | ||
|
|
a137f248f7 | ||
|
|
95d02bb924 | ||
|
|
921e57b9aa | ||
|
|
25f9655a38 | ||
|
|
919204dd38 | ||
|
|
34f25afe90 | ||
|
|
8b29ae910f | ||
|
|
6c96b060e7 | ||
|
|
f4662d5e27 | ||
|
|
b15618fcfd | ||
|
|
03e3f517a8 | ||
|
|
f0d2af329a | ||
|
|
452b9ad7f1 | ||
|
|
fb18e814de | ||
|
|
75413c56d2 | ||
|
|
c3d83d5412 | ||
|
|
b14aa75a98 | ||
|
|
dbc76a2b1e | ||
|
|
6d774794c8 | ||
|
|
81be5edb97 | ||
|
|
e30e5dd059 | ||
|
|
0cdd8beab1 | ||
|
|
7b9d5a29aa | ||
|
|
5cc831c1e1 | ||
|
|
72aa3c5127 | ||
|
|
43ccfcef8f | ||
|
|
c789c147b7 | ||
|
|
a2adb67d2f | ||
|
|
34e2f47761 | ||
|
|
0d2b232bd7 | ||
|
|
83e16e059f | ||
|
|
6e4dc3911f | ||
|
|
2a08a11e89 | ||
|
|
993dce398d | ||
|
|
eee9a62c8f | ||
|
|
ce17b6cf46 | ||
|
|
923c0ffc87 | ||
|
|
48ed20323f | ||
|
|
9a4cd8936d | ||
|
|
019ada8da5 | ||
|
|
6a95b71164 | ||
|
|
3b4ce4a0b4 | ||
|
|
a414896885 | ||
|
|
47734d8ff4 | ||
|
|
fef1808288 | ||
|
|
d2c82fdeca | ||
|
|
e657cdbc3a | ||
|
|
bc14e8432f | ||
|
|
34b03ef835 | ||
|
|
329b7de9cc | ||
|
|
2dcad1f284 | ||
|
|
1b98a10100 | ||
|
|
187dd56b1c | ||
|
|
ba9099f084 | ||
|
|
16e05167a4 | ||
|
|
756e304c92 | ||
|
|
e762a6aa95 | ||
|
|
b3d5c9affe | ||
|
|
0268aba85a | ||
|
|
9ca92309a1 | ||
|
|
0fae40fb61 | ||
|
|
0e5df34ea8 | ||
|
|
f3938c1a66 | ||
|
|
07aa80048a | ||
|
|
c57e7ac3e3 | ||
|
|
6d14b47d02 | ||
|
|
ef3b468626 | ||
|
|
4d38c09db5 | ||
|
|
3ba99a1c2a | ||
|
|
9cbdb6262b | ||
|
|
cc268428b8 | ||
|
|
80d030f51a | ||
|
|
e23da5da0e | ||
|
|
9d532fc0a1 | ||
|
|
144c7de27f | ||
|
|
b7fcebfba8 | ||
|
|
d39a6e59c7 | ||
|
|
fc559a1cf6 | ||
|
|
f457053d85 | ||
|
|
e255ba9aa4 | ||
|
|
3fe0d88f98 | ||
|
|
68c6b1c942 | ||
|
|
001c37e240 | ||
|
|
b6cc584f48 | ||
|
|
af1ad47a64 | ||
|
|
2eaac2e94e | ||
|
|
40abffe8de | ||
|
|
259a465125 | ||
|
|
6c1fbf13c6 | ||
|
|
6353a89816 | ||
|
|
38aac7ada2 | ||
|
|
24245867d7 | ||
|
|
1459df56bc | ||
|
|
dc3a0e1a32 | ||
|
|
0411495d20 | ||
|
|
3d69fbf5f7 | ||
|
|
5e9df49fd1 | ||
|
|
565a5ca0eb | ||
|
|
9061583538 | ||
|
|
35b1db6974 | ||
|
|
068ee71bf7 | ||
|
|
efcf37d162 | ||
|
|
e645693147 | ||
|
|
12fbfc9847 | ||
|
|
6b2ba65084 | ||
|
|
a5ee3451ac | ||
|
|
da671df728 | ||
|
|
650221357d | ||
|
|
d996b48cfa | ||
|
|
22b4322710 | ||
|
|
36edd445a6 | ||
|
|
7305783c21 | ||
|
|
ee3a88d574 | ||
|
|
e5c52589ec | ||
|
|
3b0e1cf289 | ||
|
|
767fc0e47e | ||
|
|
63581af0f6 | ||
|
|
813ada6661 | ||
|
|
4be72a2a0d | ||
|
|
541c3c1fed | ||
|
|
3408d4ad78 | ||
|
|
e614ae08c4 | ||
|
|
552d2a6be4 | ||
|
|
415253b1b1 | ||
|
|
d07b7e3773 | ||
|
|
3de101dff4 | ||
|
|
48dacd1e97 | ||
|
|
14778165a8 | ||
|
|
72b199378a | ||
|
|
329fa55af5 | ||
|
|
ecf34769ad | ||
|
|
dc85ba2d86 | ||
|
|
741b76fbd4 | ||
|
|
58b2904d62 | ||
|
|
9cb281868f | ||
|
|
67f6aea77f | ||
|
|
7bcba262df | ||
|
|
75c0786d2e | ||
|
|
c4f6cbb32e | ||
|
|
b10e9e127e | ||
|
|
32f1e856ad | ||
|
|
17e45e9a9c | ||
|
|
e1f43da8df | ||
|
|
70aef8a55a | ||
|
|
0b824dad29 | ||
|
|
65fa4b4e31 | ||
|
|
c0a3f30060 | ||
|
|
7af1ee3702 | ||
|
|
3cbece1ec0 | ||
|
|
0d73372c50 | ||
|
|
fb7bd02713 | ||
|
|
fb71941daa | ||
|
|
504c56216c | ||
|
|
88803c6d0e | ||
|
|
b585ee8261 | ||
|
|
f4817e8568 | ||
|
|
105aca9b04 | ||
|
|
f556f6acb1 | ||
|
|
22d0cf4171 | ||
|
|
fa0963f370 | ||
|
|
ba28845651 | ||
|
|
8fd7ff0187 | ||
|
|
e040b296c5 | ||
|
|
b616c57352 | ||
|
|
50390ea38c | ||
|
|
9d7d30891e | ||
|
|
4cf73abccd | ||
|
|
2d6451b99a | ||
|
|
40d1feec9f | ||
|
|
e40d9692c7 | ||
|
|
770fc9673c | ||
|
|
56b6590a4f | ||
|
|
f8fd4dd6e3 | ||
|
|
d8c28d1c91 | ||
|
|
46f39f3cdb | ||
|
|
8a9df8ede1 | ||
|
|
e4d35f9591 | ||
|
|
346353153d | ||
|
|
9df33e82e6 | ||
|
|
fa09eba15e | ||
|
|
d5b329a1a4 | ||
|
|
0cd02bb98a | ||
|
|
a7cbf66347 | ||
|
|
fa6865da6a | ||
|
|
63b6b99365 | ||
|
|
a0a1476e5b | ||
|
|
8a9d803137 | ||
|
|
4588af77ac | ||
|
|
91bd2e84f5 | ||
|
|
2a534798fa | ||
|
|
a062e9cc58 | ||
|
|
6c84764334 | ||
|
|
a01ca3ade4 | ||
|
|
6ee4692afd | ||
|
|
b8cd3b317d | ||
|
|
64a49e95e8 | ||
|
|
8dd971ca5e | ||
|
|
c9801e2e24 | ||
|
|
4578d47409 | ||
|
|
12aaf506b8 | ||
|
|
4cfe6263d9 | ||
|
|
b8bea7fc56 | ||
|
|
cd8ff96a09 | ||
|
|
4a69059e1b | ||
|
|
842ea0bd46 | ||
|
|
1d0607177d | ||
|
|
9e4d9fda65 | ||
|
|
47c582acb3 | ||
|
|
32334f1106 | ||
|
|
a10238516c | ||
|
|
4801da091b | ||
|
|
76612b1e8a | ||
|
|
eb8c9929d3 | ||
|
|
cf10398104 | ||
|
|
d00927ce66 | ||
|
|
28a84fec18 | ||
|
|
2c8eff9b53 | ||
|
|
5f26d3a1b8 | ||
|
|
3344fae96e | ||
|
|
dedbd01f64 | ||
|
|
4c78976cba | ||
|
|
1a6186648c | ||
|
|
36f42d0fda | ||
|
|
45712a5d4c | ||
|
|
73690164b7 | ||
|
|
3fa1eadf2c | ||
|
|
3a1c251065 | ||
|
|
d0268c69da | ||
|
|
fd3d1c7e2e | ||
|
|
cbd3adc564 | ||
|
|
86e26846a8 | ||
|
|
6860478950 | ||
|
|
dc9ae77e2f | ||
|
|
8f60870d9a | ||
|
|
d6c3430607 | ||
|
|
2cee788ad3 | ||
|
|
647cab7c69 | ||
|
|
9bb75e1230 | ||
|
|
7099560add | ||
|
|
14cb9ca1ef | ||
|
|
31057f0ef2 | ||
|
|
fa09962ab1 | ||
|
|
bad3c6b086 | ||
|
|
0922b312d3 | ||
|
|
949b913d4f | ||
|
|
af25827ff4 | ||
|
|
9872229e11 | ||
|
|
682e86d236 | ||
|
|
f0a5fb56a5 | ||
|
|
53dfafd2ea | ||
|
|
7a33661b72 | ||
|
|
a5b65fba5b | ||
|
|
63f2a041ed | ||
|
|
3289eca040 | ||
|
|
c5a7174a2a | ||
|
|
49e2ac4559 | ||
|
|
e5352cc5ac | ||
|
|
0bb5a52dc4 | ||
|
|
37b9f0ec01 | ||
|
|
73f94e4873 | ||
|
|
a2f0806804 | ||
|
|
b317fe156a | ||
|
|
763d3e9f89 | ||
|
|
f83e3f41d2 | ||
|
|
aa40e803e2 | ||
|
|
4be0b6655e | ||
|
|
6c6bb45d3d | ||
|
|
0a31742ee8 | ||
|
|
1f700ceea0 | ||
|
|
a6ebd4a3e0 | ||
|
|
d1aa3542ae | ||
|
|
b1da3995f6 | ||
|
|
79d438ed80 | ||
|
|
35b71f0472 | ||
|
|
a01b2efc22 | ||
|
|
a248f8b008 | ||
|
|
69ff979ee7 | ||
|
|
1aa7833a90 | ||
|
|
40ce23d5ae | ||
|
|
060e220806 | ||
|
|
1fcdaedb5f | ||
|
|
596f8df373 | ||
|
|
ea0c9d9b5e | ||
|
|
c5ae82ab5b | ||
|
|
0025f2188a | ||
|
|
ea04a7e2c6 | ||
|
|
fc6efa0e12 | ||
|
|
26dafd9320 | ||
|
|
c7f302ca0b | ||
|
|
b6c7708f32 | ||
|
|
ced05d8a44 | ||
|
|
8dde91b2a1 | ||
|
|
8aa420d160 | ||
|
|
6bbc8bc3ea | ||
|
|
c990de3b3e | ||
|
|
411d198d0d | ||
|
|
060c006875 | ||
|
|
42fd6dea8b | ||
|
|
5b38a5b6f1 | ||
|
|
65f8a87629 | ||
|
|
2e4b8c1d36 | ||
|
|
2a5aca0038 | ||
|
|
8cb8a75658 | ||
|
|
647e8d5cc1 | ||
|
|
25329cebf3 | ||
|
|
f839d5ac25 | ||
|
|
406889d7c3 | ||
|
|
8bd53120df | ||
|
|
4a4e58179f | ||
|
|
0b0c0c7e89 | ||
|
|
594c626665 | ||
|
|
001bf042b4 | ||
|
|
fe5a81fd08 | ||
|
|
fe76c6b887 | ||
|
|
3ff5930d18 | ||
|
|
f782af67e2 | ||
|
|
536e9a58ad | ||
|
|
5dc5bfe7ff | ||
|
|
8fc70327fb | ||
|
|
0fb7260fd4 | ||
|
|
0ed7b6b058 | ||
|
|
00eb35b4f5 | ||
|
|
4f7ff182b1 | ||
|
|
9c534a0a80 | ||
|
|
8871fffb7c | ||
|
|
d029cadd60 | ||
|
|
45bc098262 | ||
|
|
3052952733 | ||
|
|
f9d76cea9a | ||
|
|
da61118303 | ||
|
|
37c8a3a123 | ||
|
|
a987a2a4de | ||
|
|
1c56b3b206 | ||
|
|
594085c6f5 | ||
|
|
7a370e7885 | ||
|
|
933f041f4d | ||
|
|
abc8be3317 | ||
|
|
51986426b7 | ||
|
|
a3e1cd7bb6 | ||
|
|
3e769815bf | ||
|
|
9e28e9f7ae | ||
|
|
0e78996fdb | ||
|
|
8d432beb3d | ||
|
|
02e574c8e9 | ||
|
|
c38f25b5d6 | ||
|
|
024d73934f | ||
|
|
9315954f3e | ||
|
|
fe57642b6c | ||
|
|
7066325e41 | ||
|
|
b08631dab3 | ||
|
|
767af152f9 | ||
|
|
4ee84efa3e | ||
|
|
04356ca0b0 | ||
|
|
f80b296a1a | ||
|
|
52eee61247 | ||
|
|
7e3f2d9b1d | ||
|
|
8bd3dca2f7 | ||
|
|
b87d43fdcd | ||
|
|
06a2d87e55 | ||
|
|
50b33db7e2 | ||
|
|
3e4c6d67e5 | ||
|
|
4fe6bad829 | ||
|
|
13f08f7255 | ||
|
|
8c985124f2 | ||
|
|
1127082dd2 | ||
|
|
9b34f7906f | ||
|
|
b9bc67d331 | ||
|
|
033b967505 | ||
|
|
5308e7171b | ||
|
|
cbce3f1395 | ||
|
|
e62fc3a07b | ||
|
|
03e31ed154 | ||
|
|
ad96c516ac | ||
|
|
0c8cd8e5f7 | ||
|
|
6aed2f510a | ||
|
|
c7f444049d | ||
|
|
2e9ac3ba75 | ||
|
|
bc466f7f85 | ||
|
|
15ea9bba81 | ||
|
|
c2ae381aaf | ||
|
|
96c8e6fb71 | ||
|
|
ba7af8e31c | ||
|
|
794ba74be4 | ||
|
|
3ac662c755 | ||
|
|
ee124dadb1 | ||
|
|
06f4346cfe | ||
|
|
619b49c3d4 | ||
|
|
cd64b707bd | ||
|
|
6980d1a1d2 | ||
|
|
00da70626d | ||
|
|
4d491d704e | ||
|
|
73629178d8 | ||
|
|
8670cfc31b | ||
|
|
bbcc8f141d | ||
|
|
2f881b2674 | ||
|
|
46bb56cab9 | ||
|
|
fc668ea326 | ||
|
|
95b0237061 | ||
|
|
fa01efa059 | ||
|
|
6a3ede75f6 | ||
|
|
d9fe03e1b4 | ||
|
|
67a29ff495 | ||
|
|
828a54deba | ||
|
|
fd4344c866 | ||
|
|
c369236333 | ||
|
|
a710c28d38 | ||
|
|
8ea900534f | ||
|
|
4c5667b93f | ||
|
|
7da82a12a6 | ||
|
|
9567e5cb1a | ||
|
|
052b019210 | ||
|
|
4d8667db7b | ||
|
|
0fdedcbaa5 | ||
|
|
7639ff8b95 | ||
|
|
990b3b8ccc | ||
|
|
2b78d06646 | ||
|
|
1088cc5dca | ||
|
|
8e4882b801 | ||
|
|
d53ffc2158 | ||
|
|
ef81b5c1b2 | ||
|
|
849f9259b8 | ||
|
|
1602db304a | ||
|
|
822f3f2498 | ||
|
|
150301ed5f | ||
|
|
3e2288eee5 | ||
|
|
f4592e3603 | ||
|
|
cbb612aaaa | ||
|
|
38f4735758 | ||
|
|
6acf188c2f | ||
|
|
125b519937 | ||
|
|
d5a2afeef7 | ||
|
|
147957cef7 | ||
|
|
adae922f36 | ||
|
|
81037ca4fb | ||
|
|
7e9725782d | ||
|
|
32d542b633 | ||
|
|
bb7331e6a0 | ||
|
|
60c8ec61e3 | ||
|
|
e9b5616657 | ||
|
|
24eb008794 | ||
|
|
9edfe6d1ff | ||
|
|
91bb94eda6 | ||
|
|
63a04ff753 | ||
|
|
c106cf2a34 | ||
|
|
5136b62e84 | ||
|
|
ed13006512 | ||
|
|
9824540ed8 | ||
|
|
48848de529 | ||
|
|
2a9a50553b | ||
|
|
4bab88a1a0 | ||
|
|
f301fc2dcd | ||
|
|
b99148daeb | ||
|
|
34384b8256 | ||
|
|
6ff96b3ec2 | ||
|
|
df0564862e | ||
|
|
691f319f26 | ||
|
|
55ad89b309 | ||
|
|
740843446f | ||
|
|
44ad4e174d | ||
|
|
2ecff21280 | ||
|
|
dbf5eede9d | ||
|
|
4183f73548 | ||
|
|
0830f5ce89 | ||
|
|
99c70e9ef6 | ||
|
|
09836534ef | ||
|
|
e5b5e98a7d | ||
|
|
72fa9ff0b5 | ||
|
|
ad00e5e965 | ||
|
|
17a7865153 | ||
|
|
1d52a4c1d5 | ||
|
|
a8b7951a11 | ||
|
|
b40bfb94f5 | ||
|
|
1bb436080b | ||
|
|
9ac04aa5b9 | ||
|
|
be0c1e1b49 | ||
|
|
cb4eb8a467 | ||
|
|
6103758e68 | ||
|
|
4b6d02cdf8 | ||
|
|
1c0c335d38 | ||
|
|
4f7e5f25a0 | ||
|
|
b90a12bfb4 | ||
|
|
cff70ad1df | ||
|
|
a7d475e3e7 | ||
|
|
39a68b9b14 | ||
|
|
c8305c4cf5 | ||
|
|
5f3f208bc4 | ||
|
|
dc4485f0a9 | ||
|
|
7d83d0ecb9 | ||
|
|
683f6eefc7 | ||
|
|
5444647f61 | ||
|
|
184273750a | ||
|
|
1fdfc407d1 | ||
|
|
2faeccc3ff | ||
|
|
47fc034746 | ||
|
|
8829a8e808 | ||
|
|
b9d9f3c7bc | ||
|
|
9995e35659 | ||
|
|
f44c8fedf7 | ||
|
|
2867a3f10d | ||
|
|
49f4ef5c52 | ||
|
|
8f79244220 | ||
|
|
1de6fed32a | ||
|
|
e72495e4de | ||
|
|
8c8f659028 | ||
|
|
df8fce2bf9 | ||
|
|
650f61cac1 | ||
|
|
64af68a30b | ||
|
|
7d330a2d4b | ||
|
|
f4d2794c9c | ||
|
|
8cd4f6e225 | ||
|
|
0c710f65d4 | ||
|
|
3d0605a8e7 | ||
|
|
17c8dea525 | ||
|
|
3aca451f26 | ||
|
|
da21494a52 | ||
|
|
7aa1428d71 | ||
|
|
45540fdae9 | ||
|
|
a41ee665e9 | ||
|
|
abbacd4377 | ||
|
|
e71e4ccb4c | ||
|
|
2c8d81c1ae | ||
|
|
f41ffd9ee1 | ||
|
|
61cdde0797 | ||
|
|
372a0e22a7 | ||
|
|
9d2f3c8703 | ||
|
|
f503d8130b | ||
|
|
8d9ef7afd2 | ||
|
|
bcbec6871f | ||
|
|
cfe76ffaf0 | ||
|
|
a564bba261 | ||
|
|
31abc08df8 | ||
|
|
dd885e1d3a | ||
|
|
f757128dd9 | ||
|
|
f3e7bf849a | ||
|
|
b021664203 | ||
|
|
3736f2229f | ||
|
|
c1b9a9a46c | ||
|
|
994fa4f1ea | ||
|
|
6160604023 | ||
|
|
1bdb65c4dc | ||
|
|
c0fe3a6ff7 | ||
|
|
37c97a18ca | ||
|
|
4f7bffd771 | ||
|
|
fb886bda4c | ||
|
|
657191eed8 | ||
|
|
3f47f63c61 | ||
|
|
6317c7737d | ||
|
|
8a1b8910c1 | ||
|
|
62e582456e | ||
|
|
1dcde25561 | ||
|
|
804fb36faa | ||
|
|
390d10284d | ||
|
|
145a8c62ff | ||
|
|
f6e24b1646 | ||
|
|
bc725959e6 | ||
|
|
7aca91a808 | ||
|
|
28856804a4 | ||
|
|
85d212c226 | ||
|
|
961ec0b857 | ||
|
|
facd49a195 | ||
|
|
faabb9ef38 | ||
|
|
9fdcff3c1c | ||
|
|
e411291537 | ||
|
|
21cc6ceb59 | ||
|
|
6664b0fb7e | ||
|
|
4e22af6de0 | ||
|
|
646fb067ca | ||
|
|
e85aff166f | ||
|
|
114aaec91e | ||
|
|
33236f7a83 | ||
|
|
2e245412dc | ||
|
|
9ffca2f6e6 | ||
|
|
076a0a2634 | ||
|
|
74f965df88 | ||
|
|
e7e5559df5 | ||
|
|
3cf3560a20 | ||
|
|
21dc4d939c | ||
|
|
d92531c7fb | ||
|
|
376384d98d | ||
|
|
58bbea56cd | ||
|
|
507b224c95 | ||
|
|
5e2afaba9f | ||
|
|
9043c4b219 | ||
|
|
e8c6ef04d2 | ||
|
|
34349f1482 | ||
|
|
cbd690dd71 | ||
|
|
5a0d56e910 | ||
|
|
e2ef558e5f | ||
|
|
07ba250939 | ||
|
|
0d074077bb | ||
|
|
e0ef072bd0 | ||
|
|
877f9cf360 | ||
|
|
8f96e15296 | ||
|
|
90b09fc60f | ||
|
|
aef38b0530 | ||
|
|
19b4148a37 | ||
|
|
9a7805c318 | ||
|
|
e8e3c5789b | ||
|
|
39b5bd5fc4 | ||
|
|
c95be3adae | ||
|
|
837e6b6b31 | ||
|
|
6e839eddbb | ||
|
|
9e2592f35f | ||
|
|
32ff363ee3 | ||
|
|
0be7532b70 | ||
|
|
3b3d169c72 | ||
|
|
f8453fe65c | ||
|
|
a338f9bf58 | ||
|
|
b8ece2fb5d | ||
|
|
6f6f69a891 | ||
|
|
ddd5c7586b | ||
|
|
dec121d455 | ||
|
|
10c7c4eb93 | ||
|
|
feeda916f7 | ||
|
|
ffb2b5e80c | ||
|
|
9b32d638bb | ||
|
|
be6b7c6cac | ||
|
|
352f29804e | ||
|
|
127b3f6154 | ||
|
|
75439423d9 | ||
|
|
af4269f26d | ||
|
|
e1ad0e4f39 | ||
|
|
5328619593 | ||
|
|
36d839cf28 | ||
|
|
166a2f67f8 | ||
|
|
999215a7e9 | ||
|
|
0ec2fbb4d4 | ||
|
|
4d7c675cab | ||
|
|
bbc2c6a9da | ||
|
|
73225975d7 | ||
|
|
491cdefc84 | ||
|
|
9ab32bdb3c | ||
|
|
20285c4550 | ||
|
|
07db5e0bfb | ||
|
|
b788a9e69b | ||
|
|
fc427f4f3a | ||
|
|
e80754a191 | ||
|
|
89b366bc1b | ||
|
|
7a1133a2fd | ||
|
|
56b0917acd | ||
|
|
9de402aaf0 | ||
|
|
e5dad4ade2 | ||
|
|
c1b0ecda3e | ||
|
|
c6b4f2e1d3 | ||
|
|
1060a3f9eb | ||
|
|
d17b17e515 | ||
|
|
b7739dc0bd | ||
|
|
1f7fa44923 | ||
|
|
5557adf289 | ||
|
|
ab80a40269 | ||
|
|
c3b3572d83 | ||
|
|
406bc96cec | ||
|
|
340a1c2c2f | ||
|
|
ffc1fa000f | ||
|
|
c2a3bec036 | ||
|
|
10f500dfea | ||
|
|
19c4890018 | ||
|
|
219a3c51c8 | ||
|
|
4285d73bbc | ||
|
|
5f9069cc1b | ||
|
|
22b0a85acf | ||
|
|
7c109ba274 | ||
|
|
1a0ba88f8d | ||
|
|
2f1b337d9e | ||
|
|
e7c79f8725 | ||
|
|
04a36e9af9 | ||
|
|
6a551c2d73 | ||
|
|
48356d8d4f | ||
|
|
f4addc5259 | ||
|
|
679e818fca | ||
|
|
063ddcced5 | ||
|
|
4a6b289c8e | ||
|
|
bc2001a939 | ||
|
|
273712ad72 | ||
|
|
6948350552 | ||
|
|
1aa3144d05 | ||
|
|
9bfc2a311c | ||
|
|
877d9ba5ce | ||
|
|
749f51afe6 | ||
|
|
ba1bb263b3 | ||
|
|
82a63f335b | ||
|
|
50d2054e36 | ||
|
|
13f34d1ea9 | ||
|
|
2cf2021995 | ||
|
|
5f370927f1 | ||
|
|
c8248bb19c | ||
|
|
3a8191b7ac | ||
|
|
7dd454f0b4 | ||
|
|
e51640eb98 | ||
|
|
2e32bf1f97 | ||
|
|
27c7a218bd | ||
|
|
2e4a7121a9 | ||
|
|
81e134f872 | ||
|
|
e680d22023 | ||
|
|
aae2289095 | ||
|
|
4660ff852c | ||
|
|
f29a7cb140 | ||
|
|
64297aea60 | ||
|
|
41cde565d5 | ||
|
|
e80eb058e9 | ||
|
|
7dd90f56f1 | ||
|
|
8e0ead4678 | ||
|
|
c05e332ca3 | ||
|
|
717f4535a9 | ||
|
|
d100a1ed9a | ||
|
|
21756c492a | ||
|
|
26ad18bab2 | ||
|
|
e04be3a996 | ||
|
|
0869ff02c6 | ||
|
|
1dc9044ff4 | ||
|
|
5eb3eaa06e | ||
|
|
55c494b767 | ||
|
|
005c963e2d | ||
|
|
2c381345b4 | ||
|
|
15e698d302 | ||
|
|
7be9d5c7ca | ||
|
|
2dfe2640db | ||
|
|
68aba96c72 | ||
|
|
bf94b88503 | ||
|
|
b51d4ab105 | ||
|
|
fabfb8a0bc | ||
|
|
5a4d1b3704 | ||
|
|
982974fe27 | ||
|
|
3ed0ce926c | ||
|
|
65fae98558 | ||
|
|
af30f59737 | ||
|
|
2f996ba014 | ||
|
|
b7e0f1d81c | ||
|
|
20915b1764 | ||
|
|
516416e72b | ||
|
|
c38655418b | ||
|
|
046da00eb6 | ||
|
|
22f0a5ded8 | ||
|
|
6a41240c42 | ||
|
|
a09916737e | ||
|
|
e99463b295 | ||
|
|
b7021c9c7f | ||
|
|
94a0cc8de8 | ||
|
|
9c78b3bb34 | ||
|
|
0e6003e833 | ||
|
|
601cdd43c1 | ||
|
|
17a8495c2e | ||
|
|
40c61f6cfc | ||
|
|
63c400f95d | ||
|
|
34adf46293 | ||
|
|
1ecdde0500 | ||
|
|
7f05141b89 | ||
|
|
d513de4d71 | ||
|
|
18d51c6b6e | ||
|
|
5eda7e547f | ||
|
|
f7e671448c | ||
|
|
d97ae22fb4 | ||
|
|
49c1484722 | ||
|
|
7541ceb1ca | ||
|
|
2afd915f00 | ||
|
|
5a0be7e7fe | ||
|
|
de2c3968d4 | ||
|
|
e24d1fcb02 | ||
|
|
3cae3e2f7f | ||
|
|
fd5e6ef343 | ||
|
|
8ae8507972 | ||
|
|
b0b4cb1576 | ||
|
|
ada8917e43 | ||
|
|
e287642e26 | ||
|
|
4858f332c8 | ||
|
|
91dbaca3c4 | ||
|
|
741cd5b4b6 | ||
|
|
0f47ae8e0f | ||
|
|
01a2722c94 | ||
|
|
3bc5c17d03 | ||
|
|
a199998f54 | ||
|
|
c4040f03d9 | ||
|
|
db7d05b3ec | ||
|
|
3d07d8bbd8 | ||
|
|
bcd1e059f5 | ||
|
|
0eadfc2b3f | ||
|
|
c270a06fb1 | ||
|
|
2b58ebe327 | ||
|
|
a72347f3c7 | ||
|
|
6f58f5af44 | ||
|
|
6bdfec0a1a | ||
|
|
93f581175f | ||
|
|
971c51783f | ||
|
|
ba5e7a1b53 | ||
|
|
46a7e7eea0 | ||
|
|
7af362554a | ||
|
|
a8947b62b8 | ||
|
|
37adf537c9 | ||
|
|
e8e95e5fd7 | ||
|
|
285afc202a | ||
|
|
8cce005b70 | ||
|
|
433357f824 | ||
|
|
d97300dd5a | ||
|
|
99221f3265 | ||
|
|
fee31e73c1 | ||
|
|
2c626c7fc7 | ||
|
|
3093f58157 | ||
|
|
1a1b800b40 | ||
|
|
e4d5835dab | ||
|
|
aba9d23ba2 | ||
|
|
190812456f | ||
|
|
58a8df7c86 | ||
|
|
cb57afd0e5 | ||
|
|
b14a2a5330 | ||
|
|
0cd85c1ce9 | ||
|
|
c69d9fcfdf | ||
|
|
5739e03e97 | ||
|
|
79b61855e5 | ||
|
|
7769cab32c | ||
|
|
f3920f381d | ||
|
|
f697486884 | ||
|
|
5d68a29b3e | ||
|
|
e531d6ef41 | ||
|
|
a38ea926f2 | ||
|
|
5b36472a45 | ||
|
|
e139f94561 | ||
|
|
50528be5cb | ||
|
|
2323f433c4 | ||
|
|
f43ef7b083 | ||
|
|
e1545065f0 | ||
|
|
9a4b30a646 | ||
|
|
2b2d6987ef | ||
|
|
356cadf2b2 | ||
|
|
8caa889635 | ||
|
|
dd9167a101 | ||
|
|
34633a4e60 | ||
|
|
3d2b869f2e | ||
|
|
737c2bdc0e | ||
|
|
1e310977b6 | ||
|
|
79fd0238b5 | ||
|
|
f86cb5f837 | ||
|
|
de0d3aca84 | ||
|
|
51b7104342 | ||
|
|
15e83e9396 | ||
|
|
0448bd118c | ||
|
|
632cc7c014 | ||
|
|
7a62838510 | ||
|
|
da2a0190a4 | ||
|
|
8eaad7475c | ||
|
|
f6e1c589f9 | ||
|
|
61dc40a512 | ||
|
|
35b6491a3c | ||
|
|
0cd81fddb0 | ||
|
|
a9262d8752 | ||
|
|
588cb7c0c3 | ||
|
|
b5ad37ff2b |
2
.github/FUNDING.yml
vendored
Normal file
2
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
patreon: jakubvrana
|
||||
custom: ["https://sourceforge.net/p/adminer/donate/"]
|
||||
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
67
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '20 16 * * 0'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'javascript' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
# Learn more:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,2 +1,4 @@
|
||||
/adminer/adminer.css
|
||||
/adminer*.php
|
||||
/editor*.php
|
||||
/vendor/
|
||||
|
||||
22
.gitmodules
vendored
22
.gitmodules
vendored
@@ -1,18 +1,12 @@
|
||||
[submodule "jush"]
|
||||
path = externals/jush
|
||||
url = git://jush.git.sourceforge.net/gitroot/jush/jush
|
||||
[submodule "tinymce"]
|
||||
path = externals/tinymce
|
||||
url = git://github.com/tinymce/tinymce.git
|
||||
[submodule "jquery-ui"]
|
||||
path = externals/jquery-ui
|
||||
url = git://github.com/jquery/jquery-ui.git
|
||||
[submodule "jquery-timepicker"]
|
||||
path = externals/jquery-timepicker
|
||||
url = git://github.com/trentrichardson/jQuery-Timepicker-Addon.git
|
||||
[submodule "wymeditor"]
|
||||
path = externals/wymeditor
|
||||
url = git://github.com/wymeditor/wymeditor.git
|
||||
url = git://github.com/vrana/jush
|
||||
[submodule "JsShrink"]
|
||||
path = externals/JsShrink
|
||||
url = git://github.com/vrana/JsShrink.git
|
||||
url = git://github.com/vrana/JsShrink
|
||||
[submodule "designs/hydra"]
|
||||
path = designs/hydra
|
||||
url = https://github.com/Niyko/Hydra-Dark-Theme-for-Adminer
|
||||
[submodule "designs/pepa-linha-dark"]
|
||||
path = designs/pepa-linha-dark
|
||||
url = https://github.com/pepa-linha/Adminer-Design-Dark/
|
||||
|
||||
9
.travis.yml
Normal file
9
.travis.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
language: php
|
||||
php:
|
||||
- 5.6
|
||||
- 7.1
|
||||
- 7.2
|
||||
- 7.3
|
||||
- 7.4
|
||||
- 8.0
|
||||
script: git diff --name-only $TRAVIS_COMMIT_RANGE | grep '\.php$' | xargs -n1 -P8 php -l | grep -v 'No syntax errors'; test $? -eq 1
|
||||
39
Makefile
Normal file
39
Makefile
Normal file
@@ -0,0 +1,39 @@
|
||||
ROOT_DIRECTORY = $(shell dirname "$(realpath $(lastword $(MAKEFILE_LIST)))")
|
||||
PHP := $(shell which php)
|
||||
PORT := 8000
|
||||
|
||||
|
||||
.DEFAULT_GOAL := default
|
||||
|
||||
|
||||
.PHONY: default
|
||||
default: compile
|
||||
|
||||
.PHONY: compile
|
||||
compile:
|
||||
$(PHP) $(ROOT_DIRECTORY)/compile.php
|
||||
|
||||
.PHONY: server
|
||||
server:
|
||||
php \
|
||||
--server 127.0.0.1:$(PORT) \
|
||||
--docroot $(ROOT_DIRECTORY)
|
||||
|
||||
.PHONY: initialize
|
||||
initialize:
|
||||
git \
|
||||
-C $(ROOT_DIRECTORY) \
|
||||
submodule \
|
||||
update \
|
||||
--init \
|
||||
--recursive
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm \
|
||||
--recursive \
|
||||
--force \
|
||||
$(ROOT_DIRECTORY)/adminer.php
|
||||
|
||||
.PHONY: clean.all
|
||||
clean.all: clean
|
||||
11
SECURITY.md
Normal file
11
SECURITY.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
I support only the last published version and the last development version (last commit).
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
To report a vulnerability, create a private bug at https://sourceforge.net/p/adminer/bugs-and-features/new/?private=1.
|
||||
|
||||
I handle security issues with top priority. If you don't hear from me in a week then please ping the bug. Once I accept the bug, the fix should be available and new version released within days. I will mark the bug as public after releasing a new version or declining the bug.
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
$PROCEDURE = $_GET["call"];
|
||||
$PROCEDURE = ($_GET["name"] ? $_GET["name"] : $_GET["call"]);
|
||||
page_header(lang('Call') . ": " . h($PROCEDURE), $error);
|
||||
|
||||
$routine = routine($PROCEDURE, (isset($_GET["callf"]) ? "FUNCTION" : "PROCEDURE"));
|
||||
$routine = routine($_GET["call"], (isset($_GET["callf"]) ? "FUNCTION" : "PROCEDURE"));
|
||||
$in = array();
|
||||
$out = array();
|
||||
foreach ($routine["fields"] as $i => $field) {
|
||||
@@ -28,23 +28,32 @@ if (!$error && $_POST) {
|
||||
}
|
||||
$call[] = (isset($out[$key]) ? "@" . idf_escape($field["field"]) : $val);
|
||||
}
|
||||
$query = (isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . idf_escape($PROCEDURE) . "(" . implode(", ", $call) . ")";
|
||||
echo "<p><code class='jush-$jush'>" . h($query) . "</code> <a href='" . h(ME) . "sql=" . urlencode($query) . "'>" . lang('Edit') . "</a>\n";
|
||||
if (!$connection->multi_query($query)) {
|
||||
|
||||
$query = (isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . table($PROCEDURE) . "(" . implode(", ", $call) . ")";
|
||||
$start = microtime(true);
|
||||
$result = $connection->multi_query($query);
|
||||
$affected = $connection->affected_rows; // getting warnigns overwrites this
|
||||
echo $adminer->selectQuery($query, $start, !$result);
|
||||
|
||||
if (!$result) {
|
||||
echo "<p class='error'>" . error() . "\n";
|
||||
} else {
|
||||
$connection2 = connect();
|
||||
if (is_object($connection2)) {
|
||||
$connection2->select_db(DB);
|
||||
}
|
||||
|
||||
do {
|
||||
$result = $connection->store_result();
|
||||
if (is_object($result)) {
|
||||
select($result, $connection2);
|
||||
} else {
|
||||
echo "<p class='message'>" . lang('Routine has been called, %d row(s) affected.', $connection->affected_rows) . "\n";
|
||||
echo "<p class='message'>" . lang('Routine has been called, %d row(s) affected.', $affected)
|
||||
. " <span class='time'>" . @date("H:i:s") . "</span>\n" // @ - time zone may be not set
|
||||
;
|
||||
}
|
||||
} while ($connection->next_result());
|
||||
|
||||
if ($out) {
|
||||
select($connection->query("SELECT " . implode(", ", $out)));
|
||||
}
|
||||
@@ -55,7 +64,7 @@ if (!$error && $_POST) {
|
||||
<form action="" method="post">
|
||||
<?php
|
||||
if ($in) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<table cellspacing='0' class='layout'>\n";
|
||||
foreach ($in as $key) {
|
||||
$field = $routine["fields"][$key];
|
||||
$name = $field["field"];
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<?php
|
||||
$TABLE = $_GET["create"];
|
||||
$partition_by = array('HASH', 'LINEAR HASH', 'KEY', 'LINEAR KEY', 'RANGE', 'LIST');
|
||||
$partition_by = array();
|
||||
foreach (array('HASH', 'LINEAR HASH', 'KEY', 'LINEAR KEY', 'RANGE', 'LIST') as $key) {
|
||||
$partition_by[$key] = $key;
|
||||
}
|
||||
|
||||
$referencable_primary = referencable_primary($TABLE);
|
||||
$foreign_keys = array();
|
||||
@@ -9,51 +12,61 @@ foreach ($referencable_primary as $table_name => $field) {
|
||||
}
|
||||
|
||||
$orig_fields = array();
|
||||
$orig_status = array();
|
||||
$table_status = array();
|
||||
if ($TABLE != "") {
|
||||
$orig_fields = fields($TABLE);
|
||||
$orig_status = table_status($TABLE);
|
||||
}
|
||||
if ($_POST && !$_POST["fields"]) {
|
||||
$_POST["fields"] = array();
|
||||
$table_status = table_status($TABLE);
|
||||
if (!$table_status) {
|
||||
$error = lang('No tables.');
|
||||
}
|
||||
}
|
||||
|
||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) {
|
||||
$row = $_POST;
|
||||
$row["fields"] = (array) $row["fields"];
|
||||
if ($row["auto_increment_col"]) {
|
||||
$row["fields"][$row["auto_increment_col"]]["auto_increment"] = true;
|
||||
}
|
||||
|
||||
if ($_POST) {
|
||||
set_adminer_settings(array("comments" => $_POST["comments"], "defaults" => $_POST["defaults"]));
|
||||
}
|
||||
|
||||
if ($_POST && !process_fields($row["fields"]) && !$error) {
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP TABLE " . table($TABLE), substr(ME, 0, -1), lang('Table has been dropped.'));
|
||||
queries_redirect(substr(ME, 0, -1), lang('Table has been dropped.'), drop_tables(array($TABLE)));
|
||||
} else {
|
||||
$fields = array();
|
||||
$all_fields = array();
|
||||
$use_all_fields = false;
|
||||
$foreign = array();
|
||||
ksort($_POST["fields"]);
|
||||
$orig_field = reset($orig_fields);
|
||||
$after = " FIRST";
|
||||
foreach ($_POST["fields"] as $key => $field) {
|
||||
|
||||
foreach ($row["fields"] as $key => $field) {
|
||||
$foreign_key = $foreign_keys[$field["type"]];
|
||||
$type_field = ($foreign_key !== null ? $referencable_primary[$foreign_key] : $field); //! can collide with user defined type
|
||||
if ($field["field"] != "") {
|
||||
if (!$field["has_default"]) {
|
||||
$field["default"] = null;
|
||||
}
|
||||
$default = eregi_replace(" *on update CURRENT_TIMESTAMP", "", $field["default"]);
|
||||
if ($default != $field["default"]) { // preg_replace $count is available since PHP 5.1.0
|
||||
$field["on_update"] = "CURRENT_TIMESTAMP";
|
||||
$field["default"] = $default;
|
||||
}
|
||||
if ($key == $_POST["auto_increment_col"]) {
|
||||
if ($key == $row["auto_increment_col"]) {
|
||||
$field["auto_increment"] = true;
|
||||
}
|
||||
$process_field = process_field($field, $type_field);
|
||||
$all_fields[] = array($field["orig"], $process_field, $after);
|
||||
if ($process_field != process_field($orig_field, $orig_field)) {
|
||||
if (!$orig_field || $process_field != process_field($orig_field, $orig_field)) {
|
||||
$fields[] = array($field["orig"], $process_field, $after);
|
||||
if ($field["orig"] != "" || $after) {
|
||||
$use_all_fields = true;
|
||||
}
|
||||
}
|
||||
if ($foreign_key !== null) {
|
||||
$foreign[idf_escape($field["field"])] = ($TABLE != "" && $jush != "sqlite" ? "ADD" : " ") . " FOREIGN KEY (" . idf_escape($field["field"]) . ") REFERENCES " . table($foreign_keys[$field["type"]]) . " (" . idf_escape($type_field["field"]) . ")" . (ereg("^($on_actions)\$", $field["on_delete"]) ? " ON DELETE $field[on_delete]" : "");
|
||||
$foreign[idf_escape($field["field"])] = ($TABLE != "" && $jush != "sqlite" ? "ADD" : " ") . format_foreign_key(array(
|
||||
'table' => $foreign_keys[$field["type"]],
|
||||
'source' => array($field["field"]),
|
||||
'target' => array($type_field["field"]),
|
||||
'on_delete' => $field["on_delete"],
|
||||
));
|
||||
}
|
||||
$after = " AFTER " . idf_escape($field["field"]);
|
||||
} elseif ($field["orig"] != "") {
|
||||
@@ -67,89 +80,79 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$partitioning = "";
|
||||
if (in_array($_POST["partition_by"], $partition_by)) {
|
||||
if ($partition_by[$row["partition_by"]]) {
|
||||
$partitions = array();
|
||||
if ($_POST["partition_by"] == 'RANGE' || $_POST["partition_by"] == 'LIST') {
|
||||
foreach (array_filter($_POST["partition_names"]) as $key => $val) {
|
||||
$value = $_POST["partition_values"][$key];
|
||||
$partitions[] = "\nPARTITION " . idf_escape($val) . " VALUES " . ($_POST["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . ($value != "" ? " ($value)" : " MAXVALUE"); //! SQL injection
|
||||
if ($row["partition_by"] == 'RANGE' || $row["partition_by"] == 'LIST') {
|
||||
foreach (array_filter($row["partition_names"]) as $key => $val) {
|
||||
$value = $row["partition_values"][$key];
|
||||
$partitions[] = "\n PARTITION " . idf_escape($val) . " VALUES " . ($row["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . ($value != "" ? " ($value)" : " MAXVALUE"); //! SQL injection
|
||||
}
|
||||
}
|
||||
$partitioning .= "\nPARTITION BY $_POST[partition_by]($_POST[partition])" . ($partitions // $_POST["partition"] can be expression, not only column
|
||||
$partitioning .= "\nPARTITION BY $row[partition_by]($row[partition])" . ($partitions // $row["partition"] can be expression, not only column
|
||||
? " (" . implode(",", $partitions) . "\n)"
|
||||
: ($_POST["partitions"] ? " PARTITIONS " . (+$_POST["partitions"]) : "")
|
||||
: ($row["partitions"] ? " PARTITIONS " . (+$row["partitions"]) : "")
|
||||
);
|
||||
} elseif (support("partitioning") && ereg("partitioned", $orig_status["Create_options"])) {
|
||||
} elseif (support("partitioning") && preg_match("~partitioned~", $table_status["Create_options"])) {
|
||||
$partitioning .= "\nREMOVE PARTITIONING";
|
||||
}
|
||||
|
||||
$message = lang('Table has been altered.');
|
||||
if ($TABLE == "") {
|
||||
cookie("adminer_engine", $_POST["Engine"]);
|
||||
cookie("adminer_engine", $row["Engine"]);
|
||||
$message = lang('Table has been created.');
|
||||
}
|
||||
$name = trim($_POST["name"]);
|
||||
queries_redirect(ME . "table=" . urlencode($name), $message, alter_table(
|
||||
$name = trim($row["name"]);
|
||||
|
||||
queries_redirect(ME . (support("table") ? "table=" : "select=") . urlencode($name), $message, alter_table(
|
||||
$TABLE,
|
||||
$name,
|
||||
($jush == "sqlite" && ($use_all_fields || $foreign) ? $all_fields : $fields),
|
||||
$foreign,
|
||||
$_POST["Comment"],
|
||||
($_POST["Engine"] && $_POST["Engine"] != $orig_status["Engine"] ? $_POST["Engine"] : ""),
|
||||
($_POST["Collation"] && $_POST["Collation"] != $orig_status["Collation"] ? $_POST["Collation"] : ""),
|
||||
($_POST["Auto_increment"] != "" ? +$_POST["Auto_increment"] : ""),
|
||||
($row["Comment"] != $table_status["Comment"] ? $row["Comment"] : null),
|
||||
($row["Engine"] && $row["Engine"] != $table_status["Engine"] ? $row["Engine"] : ""),
|
||||
($row["Collation"] && $row["Collation"] != $table_status["Collation"] ? $row["Collation"] : ""),
|
||||
($row["Auto_increment"] != "" ? number($row["Auto_increment"]) : ""),
|
||||
$partitioning
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
page_header(($TABLE != "" ? lang('Alter table') : lang('Create table')), $error, array("table" => $TABLE), $TABLE);
|
||||
page_header(($TABLE != "" ? lang('Alter table') : lang('Create table')), $error, array("table" => $TABLE), h($TABLE));
|
||||
|
||||
$row = array(
|
||||
"Engine" => $_COOKIE["adminer_engine"],
|
||||
"fields" => array(array("field" => "", "type" => (isset($types["int"]) ? "int" : (isset($types["integer"]) ? "integer" : "")))),
|
||||
"partition_names" => array(""),
|
||||
);
|
||||
if ($_POST) {
|
||||
$row = $_POST;
|
||||
if ($row["auto_increment_col"]) {
|
||||
$row["fields"][$row["auto_increment_col"]]["auto_increment"] = true;
|
||||
}
|
||||
process_fields($row["fields"]);
|
||||
} elseif ($TABLE != "") {
|
||||
$row = $orig_status;
|
||||
$row["name"] = $TABLE;
|
||||
$row["fields"] = array();
|
||||
if (!$_GET["auto_increment"]) { // don't prefill by original Auto_increment for the sake of performance and not reusing deleted ids
|
||||
$row["Auto_increment"] = "";
|
||||
}
|
||||
foreach ($orig_fields as $field) {
|
||||
$field["has_default"] = isset($field["default"]);
|
||||
if ($field["on_update"]) {
|
||||
$field["default"] .= " ON UPDATE $field[on_update]"; // CURRENT_TIMESTAMP
|
||||
if (!$_POST) {
|
||||
$row = array(
|
||||
"Engine" => $_COOKIE["adminer_engine"],
|
||||
"fields" => array(array("field" => "", "type" => (isset($types["int"]) ? "int" : (isset($types["integer"]) ? "integer" : "")), "on_update" => "")),
|
||||
"partition_names" => array(""),
|
||||
);
|
||||
|
||||
if ($TABLE != "") {
|
||||
$row = $table_status;
|
||||
$row["name"] = $TABLE;
|
||||
$row["fields"] = array();
|
||||
if (!$_GET["auto_increment"]) { // don't prefill by original Auto_increment for the sake of performance and not reusing deleted ids
|
||||
$row["Auto_increment"] = "";
|
||||
}
|
||||
$row["fields"][] = $field;
|
||||
}
|
||||
if (support("partitioning")) {
|
||||
$from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . q(DB) . " AND TABLE_NAME = " . q($TABLE);
|
||||
$result = $connection->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");
|
||||
list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row();
|
||||
$row["partition_names"] = array();
|
||||
$row["partition_values"] = array();
|
||||
foreach (get_rows("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION") as $row1) {
|
||||
$row["partition_names"][] = $row1["PARTITION_NAME"];
|
||||
$row["partition_values"][] = $row1["PARTITION_DESCRIPTION"];
|
||||
foreach ($orig_fields as $field) {
|
||||
$field["has_default"] = isset($field["default"]);
|
||||
$row["fields"][] = $field;
|
||||
}
|
||||
|
||||
if (support("partitioning")) {
|
||||
$from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = " . q(DB) . " AND TABLE_NAME = " . q($TABLE);
|
||||
$result = $connection->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1");
|
||||
list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row();
|
||||
$partitions = get_key_vals("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION");
|
||||
$partitions[""] = "";
|
||||
$row["partition_names"] = array_keys($partitions);
|
||||
$row["partition_values"] = array_values($partitions);
|
||||
}
|
||||
$row["partition_names"][] = "";
|
||||
}
|
||||
}
|
||||
|
||||
$collations = collations();
|
||||
|
||||
$suhosin = floor(extension_loaded("suhosin") ? (min(ini_get("suhosin.request.max_vars"), ini_get("suhosin.post.max_vars")) - 13) / 10 : 0); // 10 - number of fields per row, 13 - number of other fields
|
||||
if ($suhosin && count($row["fields"]) > $suhosin) {
|
||||
echo "<p class='error'>" . h(lang('Maximum number of allowed fields exceeded. Please increase %s and %s.', 'suhosin.post.max_vars', 'suhosin.request.max_vars')) . "\n";
|
||||
}
|
||||
|
||||
$engines = engines();
|
||||
// case of engine may differ
|
||||
foreach ($engines as $engine) {
|
||||
@@ -162,49 +165,58 @@ foreach ($engines as $engine) {
|
||||
|
||||
<form action="" method="post" id="form">
|
||||
<p>
|
||||
<?php echo lang('Table name'); ?>: <input name="name" maxlength="64" value="<?php echo h($row["name"]); ?>">
|
||||
<?php if ($TABLE == "" && !$_POST) { ?><script type='text/javascript'>document.getElementById('form')['name'].focus();</script><?php } ?>
|
||||
<?php echo ($engines ? html_select("Engine", array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) : ""); ?>
|
||||
<?php echo ($collations && !ereg("sqlite|mssql", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
|
||||
<?php if (support("columns") || $TABLE == "") { ?>
|
||||
<?php echo lang('Table name'); ?>: <input name="name" data-maxlength="64" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||
<?php if ($TABLE == "" && !$_POST) { echo script("focus(qs('#form')['name']);"); } ?>
|
||||
<?php echo ($engines ? "<select name='Engine'>" . optionlist(array("" => "(" . lang('engine') . ")") + $engines, $row["Engine"]) . "</select>" . on_help("getTarget(event).value", 1) . script("qsl('select').onchange = helpClose;") : ""); ?>
|
||||
<?php echo ($collations && !preg_match("~sqlite|mssql~", $jush) ? html_select("Collation", array("" => "(" . lang('collation') . ")") + $collations, $row["Collation"]) : ""); ?>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php } ?>
|
||||
|
||||
<?php if (support("columns")) { ?>
|
||||
<div class="scrollable">
|
||||
<table cellspacing="0" id="edit-fields" class="nowrap">
|
||||
<?php
|
||||
$comments = ($_POST ? $_POST["comments"] : $row["Comment"] != "");
|
||||
if (!$_POST && !$comments) {
|
||||
foreach ($row["fields"] as $field) {
|
||||
if ($field["comment"] != "") {
|
||||
$comments = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
edit_fields($row["fields"], $collations, "TABLE", $suhosin, $foreign_keys, $comments);
|
||||
edit_fields($row["fields"], $collations, "TABLE", $foreign_keys);
|
||||
?>
|
||||
</table>
|
||||
<?php echo script("editFields();"); ?>
|
||||
</div>
|
||||
<p>
|
||||
<?php echo lang('Auto Increment'); ?>: <input name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
|
||||
<label class="jsonly"><input type="checkbox" id="defaults" name="defaults" value="1" checked onclick="columnShow(this.checked, 5);"><?php echo lang('Default values'); ?></label>
|
||||
<?php if (!$_POST["defaults"]) { ?><script type="text/javascript">editingHideDefaults()</script><?php } ?>
|
||||
<?php echo (support("comment") ? checkbox("comments", 1, $comments, lang('Comment'), "columnShow(this.checked, 6); toggle('Comment'); if (this.checked) this.form['Comment'].focus();", true) . ' <input id="Comment" name="Comment" value="' . h($row["Comment"]) . '" maxlength="' . ($connection->server_info >= 5.5 ? 2048 : 60) . '"' . ($comments ? '' : ' class="hidden"') . '>' : ''); ?>
|
||||
<?php echo lang('Auto Increment'); ?>: <input type="number" name="Auto_increment" size="6" value="<?php echo h($row["Auto_increment"]); ?>">
|
||||
<?php echo checkbox("defaults", 1, ($_POST ? $_POST["defaults"] : adminer_setting("defaults")), lang('Default values'), "columnShow(this.checked, 5)", "jsonly"); ?>
|
||||
<?php
|
||||
$comments = ($_POST ? $_POST["comments"] : adminer_setting("comments"));
|
||||
echo (support("comment")
|
||||
? checkbox("comments", 1, $comments, lang('Comment'), "editingCommentsClick(this, true);", "jsonly")
|
||||
. ' ' . (preg_match('~\n~', $row["Comment"])
|
||||
? "<textarea name='Comment' rows='2' cols='20'" . ($comments ? "" : " class='hidden'") . ">" . h($row["Comment"]) . "</textarea>"
|
||||
: '<input name="Comment" value="' . h($row["Comment"]) . '" data-maxlength="' . (min_version(5.5) ? 2048 : 60) . '"' . ($comments ? "" : " class='hidden'") . '>'
|
||||
)
|
||||
: '')
|
||||
;
|
||||
?>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php if ($_GET["create"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($TABLE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $TABLE)); ?><?php } ?>
|
||||
<?php
|
||||
if (support("partitioning")) {
|
||||
$partition_table = ereg('RANGE|LIST', $row["partition_by"]);
|
||||
$partition_table = preg_match('~RANGE|LIST~', $row["partition_by"]);
|
||||
print_fieldset("partition", lang('Partition by'), $row["partition_by"]);
|
||||
?>
|
||||
<p>
|
||||
<?php echo html_select("partition_by", array(-1 => "") + $partition_by, $row["partition_by"], "partitionByChange(this);"); ?>
|
||||
<?php echo "<select name='partition_by'>" . optionlist(array("" => "") + $partition_by, $row["partition_by"]) . "</select>" . on_help("getTarget(event).value.replace(/./, 'PARTITION BY \$&')", 1) . script("qsl('select').onchange = partitionByChange;"); ?>
|
||||
(<input name="partition" value="<?php echo h($row["partition"]); ?>">)
|
||||
<?php echo lang('Partitions'); ?>: <input type="number" name="partitions" class="size" value="<?php echo h($row["partitions"]); ?>"<?php echo ($partition_table || !$row["partition_by"] ? " class='hidden'" : ""); ?>>
|
||||
<?php echo lang('Partitions'); ?>: <input type="number" name="partitions" class="size<?php echo ($partition_table || !$row["partition_by"] ? " hidden" : ""); ?>" value="<?php echo h($row["partitions"]); ?>">
|
||||
<table cellspacing="0" id="partition-table"<?php echo ($partition_table ? "" : " class='hidden'"); ?>>
|
||||
<thead><tr><th><?php echo lang('Partition name'); ?><th><?php echo lang('Values'); ?></thead>
|
||||
<?php
|
||||
foreach ($row["partition_names"] as $key => $val) {
|
||||
echo '<tr>';
|
||||
echo '<td><input name="partition_names[]" value="' . h($val) . '"' . ($key == count($row["partition_names"]) - 1 ? ' onchange="partitionNameChange(this);"' : '') . '>';
|
||||
echo '<td><input name="partition_names[]" value="' . h($val) . '" autocapitalize="off">';
|
||||
echo ($key == count($row["partition_names"]) - 1 ? script("qsl('input').oninput = partitionNameChange;") : '');
|
||||
echo '<td><input name="partition_values[]" value="' . h($row["partition_values"][$key]) . '">';
|
||||
}
|
||||
?>
|
||||
@@ -213,4 +225,5 @@ foreach ($row["partition_names"] as $key => $val) {
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
<?php
|
||||
$row = $_POST;
|
||||
|
||||
if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP changes add.x to add_x
|
||||
restart_session();
|
||||
$name = trim($_POST["name"]);
|
||||
$name = trim($row["name"]);
|
||||
if ($_POST["drop"]) {
|
||||
$_GET["db"] = ""; // to save in global history
|
||||
queries_redirect(remove_from_uri("db|database"), lang('Database has been dropped.'), drop_databases(array(DB)));
|
||||
@@ -9,44 +10,44 @@ if ($_POST && !$error && !isset($_POST["add_x"])) { // add is an image and PHP c
|
||||
// create or rename database
|
||||
if (DB != "") {
|
||||
$_GET["db"] = $name;
|
||||
queries_redirect(preg_replace('~db=[^&]*&~', '', ME) . "db=" . urlencode($name), lang('Database has been renamed.'), rename_database($name, $_POST["collation"]));
|
||||
queries_redirect(preg_replace('~\bdb=[^&]*&~', '', ME) . "db=" . urlencode($name), lang('Database has been renamed.'), rename_database($name, $row["collation"]));
|
||||
} else {
|
||||
$databases = explode("\n", str_replace("\r", "", $name));
|
||||
$success = true;
|
||||
$last = "";
|
||||
foreach ($databases as $db) {
|
||||
if (count($databases) == 1 || $db != "") { // ignore empty lines but always try to create single database
|
||||
if (!create_database($db, $_POST["collation"])) {
|
||||
if (!create_database($db, $row["collation"])) {
|
||||
$success = false;
|
||||
}
|
||||
$last = $db;
|
||||
}
|
||||
}
|
||||
restart_session();
|
||||
set_session("dbs", null);
|
||||
queries_redirect(ME . "db=" . urlencode($last), lang('Database has been created.'), $success);
|
||||
}
|
||||
} else {
|
||||
// alter database
|
||||
if (!$_POST["collation"]) {
|
||||
if (!$row["collation"]) {
|
||||
redirect(substr(ME, 0, -1));
|
||||
}
|
||||
query_redirect("ALTER DATABASE " . idf_escape($name) . (eregi('^[a-z0-9_]+$', $_POST["collation"]) ? " COLLATE $_POST[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
|
||||
query_redirect("ALTER DATABASE " . idf_escape($name) . (preg_match('~^[a-z0-9_]+$~i', $row["collation"]) ? " COLLATE $row[collation]" : ""), substr(ME, 0, -1), lang('Database has been altered.'));
|
||||
}
|
||||
}
|
||||
|
||||
page_header(DB != "" ? lang('Alter database') : lang('Create database'), $error, array(), DB);
|
||||
page_header(DB != "" ? lang('Alter database') : lang('Create database'), $error, array(), h(DB));
|
||||
|
||||
$collations = collations();
|
||||
$name = DB;
|
||||
$collate = null;
|
||||
if ($_POST) {
|
||||
$name = $_POST["name"];
|
||||
$collate = $_POST["collation"];
|
||||
$name = $row["name"];
|
||||
} elseif (DB != "") {
|
||||
$collate = db_collation(DB, $collations);
|
||||
$row["collation"] = db_collation(DB, $collations);
|
||||
} elseif ($jush == "sql") {
|
||||
// propose database name with limited privileges
|
||||
foreach (get_vals("SHOW GRANTS") as $grant) {
|
||||
if (preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\\.\\*)?~', $grant, $match) && $match[1]) {
|
||||
if (preg_match('~ ON (`(([^\\\\`]|``|\\\\.)*)%`\.\*)?~', $grant, $match) && $match[1]) {
|
||||
$name = stripcslashes(idf_unescape("`$match[2]`"));
|
||||
break;
|
||||
}
|
||||
@@ -59,16 +60,20 @@ if ($_POST) {
|
||||
<?php
|
||||
echo ($_POST["add_x"] || strpos($name, "\n")
|
||||
? '<textarea id="name" name="name" rows="10" cols="40">' . h($name) . '</textarea><br>'
|
||||
: '<input id="name" name="name" value="' . h($name) . '" maxlength="64">'
|
||||
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $collate) : "");
|
||||
: '<input name="name" id="name" value="' . h($name) . '" data-maxlength="64" autocapitalize="off">'
|
||||
) . "\n" . ($collations ? html_select("collation", array("" => "(" . lang('collation') . ")") + $collations, $row["collation"]) . doc_link(array(
|
||||
'sql' => "charset-charsets.html",
|
||||
'mariadb' => "supported-character-sets-and-collations/",
|
||||
'mssql' => "ms187963.aspx",
|
||||
)) : "");
|
||||
echo script("focus(qs('#name'));");
|
||||
?>
|
||||
<script type='text/javascript'>document.getElementById('name').focus();</script>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php
|
||||
if (DB != "") {
|
||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm(lang('Drop %s?', DB)) . "\n";
|
||||
} elseif (!$_POST["add_x"] && $_GET["db"] == "") {
|
||||
echo "<input type='image' name='add' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>\n";
|
||||
echo "<input type='image' class='icon' name='add' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>\n";
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
|
||||
@@ -4,9 +4,10 @@ $tables_views = array_merge((array) $_POST["tables"], (array) $_POST["views"]);
|
||||
if ($tables_views && !$error && !$_POST["search"]) {
|
||||
$result = true;
|
||||
$message = "";
|
||||
if ($jush == "sql" && count($_POST["tables"]) > 1 && ($_POST["drop"] || $_POST["truncate"] || $_POST["copy"])) {
|
||||
if ($jush == "sql" && $_POST["tables"] && count($_POST["tables"]) > 1 && ($_POST["drop"] || $_POST["truncate"] || $_POST["copy"])) {
|
||||
queries("SET foreign_key_checks = 0"); // allows to truncate or drop several tables at once
|
||||
}
|
||||
|
||||
if ($_POST["truncate"]) {
|
||||
if ($_POST["tables"]) {
|
||||
$result = truncate_tables($_POST["tables"]);
|
||||
@@ -32,11 +33,14 @@ if ($tables_views && !$error && !$_POST["search"]) {
|
||||
: apply_queries("VACUUM" . ($_POST["optimize"] ? "" : " ANALYZE"), $_POST["tables"])
|
||||
);
|
||||
$message = lang('Tables have been optimized.');
|
||||
} elseif ($_POST["tables"] && ($result = queries(($_POST["optimize"] ? "OPTIMIZE" : ($_POST["check"] ? "CHECK" : ($_POST["repair"] ? "REPAIR" : "ANALYZE"))) . " TABLE " . implode(", ", array_map('idf_escape', $_POST["tables"]))))) {
|
||||
} elseif (!$_POST["tables"]) {
|
||||
$message = lang('No tables.');
|
||||
} elseif ($result = queries(($_POST["optimize"] ? "OPTIMIZE" : ($_POST["check"] ? "CHECK" : ($_POST["repair"] ? "REPAIR" : "ANALYZE"))) . " TABLE " . implode(", ", array_map('idf_escape', $_POST["tables"])))) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$message .= "<b>" . h($row["Table"]) . "</b>: " . h($row["Msg_text"]) . "<br>";
|
||||
}
|
||||
}
|
||||
|
||||
queries_redirect(substr(ME, 0, -1), $message, $result);
|
||||
}
|
||||
|
||||
@@ -44,34 +48,47 @@ page_header(($_GET["ns"] == "" ? lang('Database') . ": " . h(DB) : lang('Schema'
|
||||
|
||||
if ($adminer->homepage()) {
|
||||
if ($_GET["ns"] !== "") {
|
||||
echo "<h3>" . lang('Tables and views') . "</h3>\n";
|
||||
echo "<h3 id='tables-views'>" . lang('Tables and views') . "</h3>\n";
|
||||
$tables_list = tables_list();
|
||||
if (!$tables_list) {
|
||||
echo "<p class='message'>" . lang('No tables.') . "\n";
|
||||
} else {
|
||||
echo "<form action='' method='post'>\n";
|
||||
echo "<p>" . lang('Search data in tables') . ": <input type='search' name='query' value='" . h($_POST["query"]) . "'> <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
||||
if ($_POST["search"] && $_POST["query"] != "") {
|
||||
search_tables();
|
||||
if (support("table")) {
|
||||
echo "<fieldset><legend>" . lang('Search data in tables') . " <span id='selected2'></span></legend><div>";
|
||||
echo "<input type='search' name='query' value='" . h($_POST["query"]) . "'>";
|
||||
echo script("qsl('input').onkeydown = partialArg(bodyKeydown, 'search');", "");
|
||||
echo " <input type='submit' name='search' value='" . lang('Search') . "'>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
if ($_POST["search"] && $_POST["query"] != "") {
|
||||
$_GET["where"][0]["op"] = "LIKE %%";
|
||||
search_tables();
|
||||
}
|
||||
}
|
||||
echo "<table cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
||||
echo '<thead><tr class="wrap"><td><input id="check-all" type="checkbox" onclick="formCheck(this, /^(tables|views)\[/);">';
|
||||
echo "<div class='scrollable'>\n";
|
||||
echo "<table cellspacing='0' class='nowrap checkable'>\n";
|
||||
echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
|
||||
echo '<thead><tr class="wrap">';
|
||||
echo '<td><input id="check-all" type="checkbox" class="jsonly">' . script("qs('#check-all').onclick = partial(formCheck, /^(tables|views)\[/);", "");
|
||||
echo '<th>' . lang('Table');
|
||||
echo '<td>' . lang('Engine');
|
||||
echo '<td>' . lang('Collation');
|
||||
echo '<td>' . lang('Data Length');
|
||||
echo '<td>' . lang('Index Length');
|
||||
echo '<td>' . lang('Data Free');
|
||||
echo '<td>' . lang('Auto Increment');
|
||||
echo '<td>' . lang('Rows');
|
||||
echo (support("comment") ? '<td>' . lang('Comment') : '');
|
||||
echo '<td>' . lang('Engine') . doc_link(array('sql' => 'storage-engines.html'));
|
||||
echo '<td>' . lang('Collation') . doc_link(array('sql' => 'charset-charsets.html', 'mariadb' => 'supported-character-sets-and-collations/'));
|
||||
echo '<td>' . lang('Data Length') . doc_link(array('sql' => 'show-table-status.html', 'pgsql' => 'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT', 'oracle' => 'REFRN20286'));
|
||||
echo '<td>' . lang('Index Length') . doc_link(array('sql' => 'show-table-status.html', 'pgsql' => 'functions-admin.html#FUNCTIONS-ADMIN-DBOBJECT'));
|
||||
echo '<td>' . lang('Data Free') . doc_link(array('sql' => 'show-table-status.html'));
|
||||
echo '<td>' . lang('Auto Increment') . doc_link(array('sql' => 'example-auto-increment.html', 'mariadb' => 'auto_increment/'));
|
||||
echo '<td>' . lang('Rows') . doc_link(array('sql' => 'show-table-status.html', 'pgsql' => 'catalog-pg-class.html#CATALOG-PG-CLASS', 'oracle' => 'REFRN20286'));
|
||||
echo (support("comment") ? '<td>' . lang('Comment') . doc_link(array('sql' => 'show-table-status.html', 'pgsql' => 'functions-info.html#FUNCTIONS-INFO-COMMENT-TABLE')) : '');
|
||||
echo "</thead>\n";
|
||||
|
||||
$tables = 0;
|
||||
foreach ($tables_list as $name => $type) {
|
||||
$view = ($type !== null && !eregi("table", $type));
|
||||
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "formUncheck('check-all');");
|
||||
echo '<th><a href="' . h(ME) . 'table=' . urlencode($name) . '" title="' . lang('Show structure') . '">' . h($name) . '</a>';
|
||||
$view = ($type !== null && !preg_match('~table|sequence~i', $type));
|
||||
$id = h("Table-" . $name);
|
||||
echo '<tr' . odd() . '><td>' . checkbox(($view ? "views[]" : "tables[]"), $name, in_array($name, $tables_views, true), "", "", "", $id);
|
||||
echo '<th>' . (support("table") || support("indexes") ? "<a href='" . h(ME) . "table=" . urlencode($name) . "' title='" . lang('Show structure') . "' id='$id'>" . h($name) . '</a>' : h($name));
|
||||
if ($view) {
|
||||
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '" title="' . lang('Alter view') . '">' . lang('View') . '</a>';
|
||||
echo '<td colspan="6"><a href="' . h(ME) . "view=" . urlencode($name) . '" title="' . lang('Alter view') . '">' . (preg_match('~materialized~i', $type) ? lang('Materialized view') : lang('View')) . '</a>';
|
||||
echo '<td align="right"><a href="' . h(ME) . "select=" . urlencode($name) . '" title="' . lang('Select data') . '">?</a>';
|
||||
} else {
|
||||
foreach (array(
|
||||
@@ -83,65 +100,87 @@ if ($adminer->homepage()) {
|
||||
"Auto_increment" => array("auto_increment=1&create", lang('Alter table')),
|
||||
"Rows" => array("select", lang('Select data')),
|
||||
) as $key => $link) {
|
||||
echo ($link ? "<td align='right'><a href='" . h(ME . "$link[0]=") . urlencode($name) . "' id='$key-" . h($name) . "' title='$link[1]'>?</a>" : "<td id='$key-" . h($name) . "'> ");
|
||||
$id = " id='$key-" . h($name) . "'";
|
||||
echo ($link ? "<td align='right'>" . (support("table") || $key == "Rows" || (support("indexes") && $key != "Data_length")
|
||||
? "<a href='" . h(ME . "$link[0]=") . urlencode($name) . "'$id title='$link[1]'>?</a>"
|
||||
: "<span$id>?</span>"
|
||||
) : "<td id='$key-" . h($name) . "'>");
|
||||
}
|
||||
$tables++;
|
||||
}
|
||||
echo (support("comment") ? "<td id='Comment-" . h($name) . "'> " : "");
|
||||
echo (support("comment") ? "<td id='Comment-" . h($name) . "'>" : "");
|
||||
}
|
||||
echo "<tr><td> <th>" . lang('%d in total', count($tables_list));
|
||||
echo "<td>" . nbsp($jush == "sql" ? $connection->result("SELECT @@storage_engine") : "");
|
||||
echo "<td>" . nbsp(db_collation(DB, collations()));
|
||||
|
||||
echo "<tr><td><th>" . lang('%d in total', count($tables_list));
|
||||
echo "<td>" . h($jush == "sql" ? $connection->result("SELECT @@default_storage_engine") : "");
|
||||
echo "<td>" . h(db_collation(DB, collations()));
|
||||
foreach (array("Data_length", "Index_length", "Data_free") as $key) {
|
||||
echo "<td align='right' id='sum-$key'> ";
|
||||
echo "<td align='right' id='sum-$key'>";
|
||||
}
|
||||
|
||||
echo "</table>\n";
|
||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
||||
echo "</div>\n";
|
||||
if (!information_schema(DB)) {
|
||||
echo "<p>" . (ereg('^(sql|sqlite|pgsql)$', $jush)
|
||||
? ($jush != "sqlite" ? "<input type='submit' value='" . lang('Analyze') . "'> " : "")
|
||||
. "<input type='submit' name='optimize' value='" . lang('Optimize') . "'> " : ""
|
||||
) . ($jush == "sql" ? "<input type='submit' name='check' value='" . lang('Check') . "'> <input type='submit' name='repair' value='" . lang('Repair') . "'> " : "") . "<input type='submit' name='truncate' value='" . lang('Truncate') . "'" . confirm("formChecked(this, /tables/)") . "> <input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /tables|views/)") . ">\n";
|
||||
$databases = (support("scheme") ? schemas() : $adminer->databases());
|
||||
echo "<div class='footer'><div>\n";
|
||||
$vacuum = "<input type='submit' value='" . lang('Vacuum') . "'> " . on_help("'VACUUM'");
|
||||
$optimize = "<input type='submit' name='optimize' value='" . lang('Optimize') . "'> " . on_help($jush == "sql" ? "'OPTIMIZE TABLE'" : "'VACUUM OPTIMIZE'");
|
||||
echo "<fieldset><legend>" . lang('Selected') . " <span id='selected'></span></legend><div>"
|
||||
. ($jush == "sqlite" ? $vacuum
|
||||
: ($jush == "pgsql" ? $vacuum . $optimize
|
||||
: ($jush == "sql" ? "<input type='submit' value='" . lang('Analyze') . "'> " . on_help("'ANALYZE TABLE'") . $optimize
|
||||
. "<input type='submit' name='check' value='" . lang('Check') . "'> " . on_help("'CHECK TABLE'")
|
||||
. "<input type='submit' name='repair' value='" . lang('Repair') . "'> " . on_help("'REPAIR TABLE'")
|
||||
: "")))
|
||||
. "<input type='submit' name='truncate' value='" . lang('Truncate') . "'> " . on_help($jush == "sqlite" ? "'DELETE'" : "'TRUNCATE" . ($jush == "pgsql" ? "'" : " TABLE'")) . confirm()
|
||||
. "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . on_help("'DROP TABLE'") . confirm() . "\n";
|
||||
$databases = (support("scheme") ? $adminer->schemas() : $adminer->databases());
|
||||
if (count($databases) != 1 && $jush != "sqlite") {
|
||||
$db = (isset($_POST["target"]) ? $_POST["target"] : (support("scheme") ? $_GET["ns"] : DB));
|
||||
echo "<p>" . lang('Move to other database') . ": ";
|
||||
echo ($databases ? html_select("target", $databases, $db) : '<input name="target" value="' . h($db) . '">');
|
||||
echo ($databases ? html_select("target", $databases, $db) : '<input name="target" value="' . h($db) . '" autocapitalize="off">');
|
||||
echo " <input type='submit' name='move' value='" . lang('Move') . "'>";
|
||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'>" : "");
|
||||
echo (support("copy") ? " <input type='submit' name='copy' value='" . lang('Copy') . "'> " . checkbox("overwrite", 1, $_POST["overwrite"], lang('overwrite')) : "");
|
||||
echo "\n";
|
||||
}
|
||||
echo "<input type='hidden' name='all' value=''>"; // used by trCheck()
|
||||
echo script("qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^(tables|views)\[/));" . (support("table") ? " selectCount('selected2', formChecked(this, /^tables\[/) || $tables);" : "") . " }");
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
echo "</div></div>\n";
|
||||
}
|
||||
echo "</form>\n";
|
||||
echo script("tableCheck();");
|
||||
}
|
||||
|
||||
echo '<p><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
|
||||
if (support("view")) {
|
||||
echo '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n";
|
||||
}
|
||||
|
||||
|
||||
echo '<p class="links"><a href="' . h(ME) . 'create=">' . lang('Create table') . "</a>\n";
|
||||
echo (support("view") ? '<a href="' . h(ME) . 'view=">' . lang('Create view') . "</a>\n" : "");
|
||||
|
||||
if (support("routine")) {
|
||||
echo "<h3>" . lang('Routines') . "</h3>\n";
|
||||
echo "<h3 id='routines'>" . lang('Routines') . "</h3>\n";
|
||||
$routines = routines();
|
||||
if ($routines) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td> </thead>\n";
|
||||
echo '<thead><tr><th>' . lang('Name') . '<td>' . lang('Type') . '<td>' . lang('Return type') . "<td></thead>\n";
|
||||
odd('');
|
||||
foreach ($routines as $row) {
|
||||
$name = ($row["SPECIFIC_NAME"] == $row["ROUTINE_NAME"] ? "" : "&name=" . urlencode($row["ROUTINE_NAME"])); // not computed on the pages to be able to print the header first
|
||||
echo '<tr' . odd() . '>';
|
||||
echo '<th><a href="' . h(ME) . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'callf=' : 'call=') . urlencode($row["ROUTINE_NAME"]) . '">' . h($row["ROUTINE_NAME"]) . '</a>';
|
||||
echo '<th><a href="' . h(ME . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'callf=' : 'call=') . urlencode($row["SPECIFIC_NAME"]) . $name) . '">' . h($row["ROUTINE_NAME"]) . '</a>';
|
||||
echo '<td>' . h($row["ROUTINE_TYPE"]);
|
||||
echo '<td>' . h($row["DTD_IDENTIFIER"]);
|
||||
echo '<td><a href="' . h(ME) . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'function=' : 'procedure=') . urlencode($row["ROUTINE_NAME"]) . '">' . lang('Alter') . "</a>";
|
||||
echo '<td><a href="' . h(ME . ($row["ROUTINE_TYPE"] != "PROCEDURE" ? 'function=' : 'procedure=') . urlencode($row["SPECIFIC_NAME"]) . $name) . '">' . lang('Alter') . "</a>";
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
echo '<p>' . (support("procedure") ? '<a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a> ' : '') . '<a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n";
|
||||
echo '<p class="links">'
|
||||
. (support("procedure") ? '<a href="' . h(ME) . 'procedure=">' . lang('Create procedure') . '</a>' : '')
|
||||
. '<a href="' . h(ME) . 'function=">' . lang('Create function') . "</a>\n"
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
if (support("sequence")) {
|
||||
echo "<h3>" . lang('Sequences') . "</h3>\n";
|
||||
$sequences = get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema()");
|
||||
echo "<h3 id='sequences'>" . lang('Sequences') . "</h3>\n";
|
||||
$sequences = get_vals("SELECT sequence_name FROM information_schema.sequences WHERE sequence_schema = current_schema() ORDER BY sequence_name");
|
||||
if ($sequences) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<thead><tr><th>" . lang('Name') . "</thead>\n";
|
||||
@@ -151,35 +190,36 @@ if ($adminer->homepage()) {
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
echo "<p><a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>\n";
|
||||
echo "<p class='links'><a href='" . h(ME) . "sequence='>" . lang('Create sequence') . "</a>\n";
|
||||
}
|
||||
|
||||
|
||||
if (support("type")) {
|
||||
echo "<h3>" . lang('User types') . "</h3>\n";
|
||||
$types = types();
|
||||
if ($types) {
|
||||
echo "<h3 id='user-types'>" . lang('User types') . "</h3>\n";
|
||||
$user_types = types();
|
||||
if ($user_types) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<thead><tr><th>" . lang('Name') . "</thead>\n";
|
||||
odd('');
|
||||
foreach ($types as $val) {
|
||||
foreach ($user_types as $val) {
|
||||
echo "<tr" . odd() . "><th><a href='" . h(ME) . "type=" . urlencode($val) . "'>" . h($val) . "</a>\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
echo "<p><a href='" . h(ME) . "type='>" . lang('Create type') . "</a>\n";
|
||||
echo "<p class='links'><a href='" . h(ME) . "type='>" . lang('Create type') . "</a>\n";
|
||||
}
|
||||
|
||||
|
||||
if (support("event")) {
|
||||
echo "<h3>" . lang('Events') . "</h3>\n";
|
||||
echo "<h3 id='events'>" . lang('Events') . "</h3>\n";
|
||||
$rows = get_rows("SHOW EVENTS");
|
||||
if ($rows) {
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<thead><tr><th>" . lang('Name') . "<td>" . lang('Schedule') . "<td>" . lang('Start') . "<td>" . lang('End') . "</thead>\n";
|
||||
echo "<thead><tr><th>" . lang('Name') . "<td>" . lang('Schedule') . "<td>" . lang('Start') . "<td>" . lang('End') . "<td></thead>\n";
|
||||
foreach ($rows as $row) {
|
||||
echo "<tr>";
|
||||
echo '<th><a href="' . h(ME) . 'event=' . urlencode($row["Name"]) . '">' . h($row["Name"]) . "</a>";
|
||||
echo "<th>" . h($row["Name"]);
|
||||
echo "<td>" . ($row["Execute at"] ? lang('At given time') . "<td>" . $row["Execute at"] : lang('Every') . " " . $row["Interval value"] . " " . $row["Interval field"] . "<td>$row[Starts]");
|
||||
echo "<td>$row[Ends]";
|
||||
echo '<td><a href="' . h(ME) . 'event=' . urlencode($row["Name"]) . '">' . lang('Alter') . '</a>';
|
||||
}
|
||||
echo "</table>\n";
|
||||
$event_scheduler = $connection->result("SELECT @@event_scheduler");
|
||||
@@ -187,11 +227,11 @@ if ($adminer->homepage()) {
|
||||
echo "<p class='error'><code class='jush-sqlset'>event_scheduler</code>: " . h($event_scheduler) . "\n";
|
||||
}
|
||||
}
|
||||
echo '<p><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n";
|
||||
echo '<p class="links"><a href="' . h(ME) . 'event=">' . lang('Create event') . "</a>\n";
|
||||
}
|
||||
|
||||
|
||||
if ($tables_list) {
|
||||
echo "<script type='text/javascript'>ajaxSetHtml('" . js_escape(ME) . "script=db');</script>\n";
|
||||
echo script("ajaxSetHtml('" . js_escape(ME) . "script=db');");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
14
adminer/designs.php
Normal file
14
adminer/designs.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
function adminer_object() {
|
||||
include_once "../plugins/plugin.php";
|
||||
include_once "../plugins/designs.php";
|
||||
$designs = array();
|
||||
foreach (glob("../designs/*", GLOB_ONLYDIR) as $filename) {
|
||||
$designs["$filename/adminer.css"] = basename($filename);
|
||||
}
|
||||
return new AdminerPlugin(array(
|
||||
new AdminerDesigns($designs),
|
||||
));
|
||||
}
|
||||
|
||||
include "./index.php";
|
||||
@@ -3,5 +3,8 @@ $TABLE = $_GET["download"];
|
||||
$fields = fields($TABLE);
|
||||
header("Content-Type: application/octet-stream");
|
||||
header("Content-Disposition: attachment; filename=" . friendly_url("$TABLE-" . implode("_", $_GET["where"])) . "." . friendly_url($_GET["field"]));
|
||||
echo $connection->result("SELECT" . limit(idf_escape($_GET["field"]) . " FROM " . table($TABLE), " WHERE " . where($_GET, $fields), 1));
|
||||
$select = array(idf_escape($_GET["field"]));
|
||||
$result = $driver->select($TABLE, $select, array(where($_GET, $fields)), $select);
|
||||
$row = ($result ? $result->fetch_row() : array());
|
||||
echo $driver->value($row[0], $fields[$_GET["field"]]);
|
||||
exit; // don't output footer
|
||||
|
||||
486
adminer/drivers/elastic.inc.php
Normal file
486
adminer/drivers/elastic.inc.php
Normal file
@@ -0,0 +1,486 @@
|
||||
<?php
|
||||
$drivers["elastic"] = "Elasticsearch (beta)";
|
||||
|
||||
if (isset($_GET["elastic"])) {
|
||||
define("DRIVER", "elastic");
|
||||
|
||||
if (function_exists('json_decode') && ini_bool('allow_url_fopen')) {
|
||||
class Min_DB {
|
||||
var $extension = "JSON", $server_info, $errno, $error, $_url, $_db;
|
||||
|
||||
/** Performs query
|
||||
* @param string
|
||||
* @param array
|
||||
* @param string
|
||||
* @return mixed
|
||||
*/
|
||||
function rootQuery($path, $content = array(), $method = 'GET') {
|
||||
@ini_set('track_errors', 1); // @ - may be disabled
|
||||
$file = @file_get_contents("$this->_url/" . ltrim($path, '/'), false, stream_context_create(array('http' => array(
|
||||
'method' => $method,
|
||||
'content' => $content === null ? $content : json_encode($content),
|
||||
'header' => 'Content-Type: application/json',
|
||||
'ignore_errors' => 1, // available since PHP 5.2.10
|
||||
))));
|
||||
if (!$file) {
|
||||
$this->error = $php_errormsg;
|
||||
return $file;
|
||||
}
|
||||
if (!preg_match('~^HTTP/[0-9.]+ 2~i', $http_response_header[0])) {
|
||||
$this->error = lang('Invalid credentials.') . " $http_response_header[0]";
|
||||
return false;
|
||||
}
|
||||
$return = json_decode($file, true);
|
||||
if ($return === null) {
|
||||
$this->errno = json_last_error();
|
||||
if (function_exists('json_last_error_msg')) {
|
||||
$this->error = json_last_error_msg();
|
||||
} else {
|
||||
$constants = get_defined_constants(true);
|
||||
foreach ($constants['json'] as $name => $value) {
|
||||
if ($value == $this->errno && preg_match('~^JSON_ERROR_~', $name)) {
|
||||
$this->error = $name;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Performs query relative to actual selected DB
|
||||
* @param string
|
||||
* @param array
|
||||
* @param string
|
||||
* @return mixed
|
||||
*/
|
||||
function query($path, $content = array(), $method = 'GET') {
|
||||
return $this->rootQuery(($this->_db != "" ? "$this->_db/" : "/") . ltrim($path, '/'), $content, $method);
|
||||
}
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
preg_match('~^(https?://)?(.*)~', $server, $match);
|
||||
$this->_url = ($match[1] ? $match[1] : "http://") . "$username:$password@$match[2]";
|
||||
$return = $this->query('');
|
||||
if ($return) {
|
||||
$this->server_info = $return['version']['number'];
|
||||
}
|
||||
return (bool) $return;
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
$this->_db = $database;
|
||||
return true;
|
||||
}
|
||||
|
||||
function quote($string) {
|
||||
return $string;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class Min_Result {
|
||||
var $num_rows, $_rows;
|
||||
|
||||
function __construct($rows) {
|
||||
$this->num_rows = count($rows);
|
||||
$this->_rows = $rows;
|
||||
reset($this->_rows);
|
||||
}
|
||||
|
||||
function fetch_assoc() {
|
||||
$return = current($this->_rows);
|
||||
next($this->_rows);
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fetch_row() {
|
||||
return array_values($this->fetch_assoc());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
global $adminer;
|
||||
$data = array();
|
||||
$query = "$table/_search";
|
||||
if ($select != array("*")) {
|
||||
$data["fields"] = $select;
|
||||
}
|
||||
if ($order) {
|
||||
$sort = array();
|
||||
foreach ($order as $col) {
|
||||
$col = preg_replace('~ DESC$~', '', $col, 1, $count);
|
||||
$sort[] = ($count ? array($col => "desc") : $col);
|
||||
}
|
||||
$data["sort"] = $sort;
|
||||
}
|
||||
if ($limit) {
|
||||
$data["size"] = +$limit;
|
||||
if ($page) {
|
||||
$data["from"] = ($page * $limit);
|
||||
}
|
||||
}
|
||||
foreach ($where as $val) {
|
||||
list($col, $op, $val) = explode(" ", $val, 3);
|
||||
if ($col == "_id") {
|
||||
$data["query"]["ids"]["values"][] = $val;
|
||||
}
|
||||
elseif ($col . $val != "") {
|
||||
$term = array("term" => array(($col != "" ? $col : "_all") => $val));
|
||||
if ($op == "=") {
|
||||
$data["query"]["filtered"]["filter"]["and"][] = $term;
|
||||
} else {
|
||||
$data["query"]["filtered"]["query"]["bool"]["must"][] = $term;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($data["query"] && !$data["query"]["filtered"]["query"] && !$data["query"]["ids"]) {
|
||||
$data["query"]["filtered"]["query"] = array("match_all" => array());
|
||||
}
|
||||
$start = microtime(true);
|
||||
$search = $this->_conn->query($query, $data);
|
||||
if ($print) {
|
||||
echo $adminer->selectQuery("$query: " . json_encode($data), $start, !$search);
|
||||
}
|
||||
if (!$search) {
|
||||
return false;
|
||||
}
|
||||
$return = array();
|
||||
foreach ($search['hits']['hits'] as $hit) {
|
||||
$row = array();
|
||||
if ($select == array("*")) {
|
||||
$row["_id"] = $hit["_id"];
|
||||
}
|
||||
$fields = $hit['_source'];
|
||||
if ($select != array("*")) {
|
||||
$fields = array();
|
||||
foreach ($select as $key) {
|
||||
$fields[$key] = $hit['fields'][$key];
|
||||
}
|
||||
}
|
||||
foreach ($fields as $key => $val) {
|
||||
if ($data["fields"]) {
|
||||
$val = $val[0];
|
||||
}
|
||||
$row[$key] = (is_array($val) ? json_encode($val) : $val); //! display JSON and others differently
|
||||
}
|
||||
$return[] = $row;
|
||||
}
|
||||
return new Min_Result($return);
|
||||
}
|
||||
|
||||
function update($type, $record, $queryWhere, $limit = 0, $separator = "\n") {
|
||||
//! use $limit
|
||||
$parts = preg_split('~ *= *~', $queryWhere);
|
||||
if (count($parts) == 2) {
|
||||
$id = trim($parts[1]);
|
||||
$query = "$type/$id";
|
||||
return $this->_conn->query($query, $record, 'POST');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function insert($type, $record) {
|
||||
$id = ""; //! user should be able to inform _id
|
||||
$query = "$type/$id";
|
||||
$response = $this->_conn->query($query, $record, 'POST');
|
||||
$this->_conn->last_id = $response['_id'];
|
||||
return $response['created'];
|
||||
}
|
||||
|
||||
function delete($type, $queryWhere, $limit = 0) {
|
||||
//! use $limit
|
||||
$ids = array();
|
||||
if (is_array($_GET["where"]) && $_GET["where"]["_id"]) {
|
||||
$ids[] = $_GET["where"]["_id"];
|
||||
}
|
||||
if (is_array($_POST['check'])) {
|
||||
foreach ($_POST['check'] as $check) {
|
||||
$parts = preg_split('~ *= *~', $check);
|
||||
if (count($parts) == 2) {
|
||||
$ids[] = trim($parts[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->_conn->affected_rows = 0;
|
||||
foreach ($ids as $id) {
|
||||
$query = "{$type}/{$id}";
|
||||
$response = $this->_conn->query($query, '{}', 'DELETE');
|
||||
if (is_array($response) && $response['found'] == true) {
|
||||
$this->_conn->affected_rows++;
|
||||
}
|
||||
}
|
||||
return $this->_conn->affected_rows;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function connect() {
|
||||
global $adminer;
|
||||
$connection = new Min_DB;
|
||||
list($server, $username, $password) = $adminer->credentials();
|
||||
if ($password != "" && $connection->connect($server, $username, "")) {
|
||||
return lang('Database does not support password.');
|
||||
}
|
||||
if ($connection->connect($server, $username, $password)) {
|
||||
return $connection;
|
||||
}
|
||||
return $connection->error;
|
||||
}
|
||||
|
||||
function support($feature) {
|
||||
return preg_match("~database|table|columns~", $feature);
|
||||
}
|
||||
|
||||
function logged_user() {
|
||||
global $adminer;
|
||||
$credentials = $adminer->credentials();
|
||||
return $credentials[1];
|
||||
}
|
||||
|
||||
function get_databases() {
|
||||
global $connection;
|
||||
$return = $connection->rootQuery('_aliases');
|
||||
if ($return) {
|
||||
$return = array_keys($return);
|
||||
sort($return, SORT_STRING);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function collations() {
|
||||
return array();
|
||||
}
|
||||
|
||||
function db_collation($db, $collations) {
|
||||
}
|
||||
|
||||
function engines() {
|
||||
return array();
|
||||
}
|
||||
|
||||
function count_tables($databases) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
$result = $connection->query('_stats');
|
||||
if ($result && $result['indices']) {
|
||||
$indices = $result['indices'];
|
||||
foreach ($indices as $indice => $stats) {
|
||||
$indexing = $stats['total']['indexing'];
|
||||
$return[$indice] = $indexing['index_total'];
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function tables_list() {
|
||||
global $connection;
|
||||
|
||||
if (min_version(6)) {
|
||||
return array('_doc' => 'table');
|
||||
}
|
||||
|
||||
$return = $connection->query('_mapping');
|
||||
if ($return) {
|
||||
$return = array_fill_keys(array_keys($return[$connection->_db]["mappings"]), 'table');
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function table_status($name = "", $fast = false) {
|
||||
global $connection;
|
||||
$search = $connection->query("_search", array(
|
||||
"size" => 0,
|
||||
"aggregations" => array(
|
||||
"count_by_type" => array(
|
||||
"terms" => array(
|
||||
"field" => "_type"
|
||||
)
|
||||
)
|
||||
)
|
||||
), "POST");
|
||||
$return = array();
|
||||
if ($search) {
|
||||
$tables = $search["aggregations"]["count_by_type"]["buckets"];
|
||||
foreach ($tables as $table) {
|
||||
$return[$table["key"]] = array(
|
||||
"Name" => $table["key"],
|
||||
"Engine" => "table",
|
||||
"Rows" => $table["doc_count"],
|
||||
);
|
||||
if ($name != "" && $name == $table["key"]) {
|
||||
return $return[$name];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function error() {
|
||||
global $connection;
|
||||
return h($connection->error);
|
||||
}
|
||||
|
||||
function information_schema() {
|
||||
}
|
||||
|
||||
function is_view($table_status) {
|
||||
}
|
||||
|
||||
function indexes($table, $connection2 = null) {
|
||||
return array(
|
||||
array("type" => "PRIMARY", "columns" => array("_id")),
|
||||
);
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
global $connection;
|
||||
|
||||
$mappings = array();
|
||||
if (min_version(6)) {
|
||||
$result = $connection->query("_mapping");
|
||||
if ($result) {
|
||||
$mappings = $result[$connection->_db]['mappings']['properties'];
|
||||
}
|
||||
} else {
|
||||
$result = $connection->query("$table/_mapping");
|
||||
if ($result) {
|
||||
$mappings = $result[$table]['properties'];
|
||||
if (!$mappings) {
|
||||
$mappings = $result[$connection->_db]['mappings'][$table]['properties'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$return = array();
|
||||
if ($mappings) {
|
||||
foreach ($mappings as $name => $field) {
|
||||
$return[$name] = array(
|
||||
"field" => $name,
|
||||
"full_type" => $field["type"],
|
||||
"type" => $field["type"],
|
||||
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
||||
);
|
||||
if ($field["properties"]) { // only leaf fields can be edited
|
||||
unset($return[$name]["privileges"]["insert"]);
|
||||
unset($return[$name]["privileges"]["update"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
return array();
|
||||
}
|
||||
|
||||
function table($idf) {
|
||||
return $idf;
|
||||
}
|
||||
|
||||
function idf_escape($idf) {
|
||||
return $idf;
|
||||
}
|
||||
|
||||
function convert_field($field) {
|
||||
}
|
||||
|
||||
function unconvert_field($field, $return) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fk_support($table_status) {
|
||||
}
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/** Create index
|
||||
* @param string
|
||||
* @return mixed
|
||||
*/
|
||||
function create_database($db) {
|
||||
global $connection;
|
||||
return $connection->rootQuery(urlencode($db), null, 'PUT');
|
||||
}
|
||||
|
||||
/** Remove index
|
||||
* @param array
|
||||
* @return mixed
|
||||
*/
|
||||
function drop_databases($databases) {
|
||||
global $connection;
|
||||
return $connection->rootQuery(urlencode(implode(',', $databases)), array(), 'DELETE');
|
||||
}
|
||||
|
||||
/** Alter type
|
||||
* @param array
|
||||
* @return mixed
|
||||
*/
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
global $connection;
|
||||
$properties = array();
|
||||
foreach ($fields as $f) {
|
||||
$field_name = trim($f[1][0]);
|
||||
$field_type = trim($f[1][1] ? $f[1][1] : "text");
|
||||
$properties[$field_name] = array(
|
||||
'type' => $field_type
|
||||
);
|
||||
}
|
||||
if (!empty($properties)) {
|
||||
$properties = array('properties' => $properties);
|
||||
}
|
||||
return $connection->query("_mapping/{$name}", $properties, 'PUT');
|
||||
}
|
||||
|
||||
/** Drop types
|
||||
* @param array
|
||||
* @return bool
|
||||
*/
|
||||
function drop_tables($tables) {
|
||||
global $connection;
|
||||
$return = true;
|
||||
foreach ($tables as $table) { //! convert to bulk api
|
||||
$return = $return && $connection->query(urlencode($table), array(), 'DELETE');
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function last_id() {
|
||||
global $connection;
|
||||
return $connection->last_id;
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array(
|
||||
lang('Numbers') => array("long" => 3, "integer" => 5, "short" => 8, "byte" => 10, "double" => 20, "float" => 66, "half_float" => 12, "scaled_float" => 21),
|
||||
lang('Date and time') => array("date" => 10),
|
||||
lang('Strings') => array("string" => 65535, "text" => 65535),
|
||||
lang('Binary') => array("binary" => 255),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("json + allow_url_fopen"),
|
||||
'jush' => "elastic",
|
||||
'operators' => array("=", "query"),
|
||||
'functions' => array(),
|
||||
'grouping' => array(),
|
||||
'edit_functions' => array(array("json")),
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
);
|
||||
}
|
||||
}
|
||||
745
adminer/drivers/mongo.inc.php
Normal file
745
adminer/drivers/mongo.inc.php
Normal file
@@ -0,0 +1,745 @@
|
||||
<?php
|
||||
$drivers["mongo"] = "MongoDB (alpha)";
|
||||
|
||||
if (isset($_GET["mongo"])) {
|
||||
define("DRIVER", "mongo");
|
||||
|
||||
if (class_exists('MongoDB')) {
|
||||
class Min_DB {
|
||||
var $extension = "Mongo", $server_info = MongoClient::VERSION, $error, $last_id, $_link, $_db;
|
||||
|
||||
function connect($uri, $options) {
|
||||
try {
|
||||
$this->_link = new MongoClient($uri, $options);
|
||||
if ($options["password"] != "") {
|
||||
$options["password"] = "";
|
||||
try {
|
||||
new MongoClient($uri, $options);
|
||||
$this->error = lang('Database does not support password.');
|
||||
} catch (Exception $e) {
|
||||
// this is what we want
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
function query($query) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
try {
|
||||
$this->_db = $this->_link->selectDB($database);
|
||||
return true;
|
||||
} catch (Exception $ex) {
|
||||
$this->error = $ex->getMessage();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function quote($string) {
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
class Min_Result {
|
||||
var $num_rows, $_rows = array(), $_offset = 0, $_charset = array();
|
||||
|
||||
function __construct($result) {
|
||||
foreach ($result as $item) {
|
||||
$row = array();
|
||||
foreach ($item as $key => $val) {
|
||||
if (is_a($val, 'MongoBinData')) {
|
||||
$this->_charset[$key] = 63;
|
||||
}
|
||||
$row[$key] =
|
||||
(is_a($val, 'MongoId') ? "ObjectId(\"$val\")" :
|
||||
(is_a($val, 'MongoDate') ? gmdate("Y-m-d H:i:s", $val->sec) . " GMT" :
|
||||
(is_a($val, 'MongoBinData') ? $val->bin : //! allow downloading
|
||||
(is_a($val, 'MongoRegex') ? "$val" :
|
||||
(is_object($val) ? get_class($val) : // MongoMinKey, MongoMaxKey
|
||||
$val
|
||||
)))));
|
||||
}
|
||||
$this->_rows[] = $row;
|
||||
foreach ($row as $key => $val) {
|
||||
if (!isset($this->_rows[0][$key])) {
|
||||
$this->_rows[0][$key] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->num_rows = count($this->_rows);
|
||||
}
|
||||
|
||||
function fetch_assoc() {
|
||||
$row = current($this->_rows);
|
||||
if (!$row) {
|
||||
return $row;
|
||||
}
|
||||
$return = array();
|
||||
foreach ($this->_rows[0] as $key => $val) {
|
||||
$return[$key] = $row[$key];
|
||||
}
|
||||
next($this->_rows);
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fetch_row() {
|
||||
$return = $this->fetch_assoc();
|
||||
if (!$return) {
|
||||
return $return;
|
||||
}
|
||||
return array_values($return);
|
||||
}
|
||||
|
||||
function fetch_field() {
|
||||
$keys = array_keys($this->_rows[0]);
|
||||
$name = $keys[$this->_offset++];
|
||||
return (object) array(
|
||||
'name' => $name,
|
||||
'charsetnr' => $this->_charset[$name],
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
public $primary = "_id";
|
||||
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
$select = ($select == array("*")
|
||||
? array()
|
||||
: array_fill_keys($select, true)
|
||||
);
|
||||
$sort = array();
|
||||
foreach ($order as $val) {
|
||||
$val = preg_replace('~ DESC$~', '', $val, 1, $count);
|
||||
$sort[$val] = ($count ? -1 : 1);
|
||||
}
|
||||
return new Min_Result($this->_conn->_db->selectCollection($table)
|
||||
->find(array(), $select)
|
||||
->sort($sort)
|
||||
->limit($limit != "" ? +$limit : 0)
|
||||
->skip($page * $limit)
|
||||
);
|
||||
}
|
||||
|
||||
function insert($table, $set) {
|
||||
try {
|
||||
$return = $this->_conn->_db->selectCollection($table)->insert($set);
|
||||
$this->_conn->errno = $return['code'];
|
||||
$this->_conn->error = $return['err'];
|
||||
$this->_conn->last_id = $set['_id'];
|
||||
return !$return['err'];
|
||||
} catch (Exception $ex) {
|
||||
$this->_conn->error = $ex->getMessage();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function get_databases($flush) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
$dbs = $connection->_link->listDBs();
|
||||
foreach ($dbs['databases'] as $db) {
|
||||
$return[] = $db['name'];
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function count_tables($databases) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($databases as $db) {
|
||||
$return[$db] = count($connection->_link->selectDB($db)->getCollectionNames(true));
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function tables_list() {
|
||||
global $connection;
|
||||
return array_fill_keys($connection->_db->getCollectionNames(true), 'table');
|
||||
}
|
||||
|
||||
function drop_databases($databases) {
|
||||
global $connection;
|
||||
foreach ($databases as $db) {
|
||||
$response = $connection->_link->selectDB($db)->drop();
|
||||
if (!$response['ok']) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function indexes($table, $connection2 = null) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($connection->_db->selectCollection($table)->getIndexInfo() as $index) {
|
||||
$descs = array();
|
||||
foreach ($index["key"] as $column => $type) {
|
||||
$descs[] = ($type == -1 ? '1' : null);
|
||||
}
|
||||
$return[$index["name"]] = array(
|
||||
"type" => ($index["name"] == "_id_" ? "PRIMARY" : ($index["unique"] ? "UNIQUE" : "INDEX")),
|
||||
"columns" => array_keys($index["key"]),
|
||||
"lengths" => array(),
|
||||
"descs" => $descs,
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
return fields_from_edit();
|
||||
}
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
global $connection;
|
||||
//! don't call count_rows()
|
||||
return $connection->_db->selectCollection($_GET["select"])->count($where);
|
||||
}
|
||||
|
||||
$operators = array("=");
|
||||
|
||||
} elseif (class_exists('MongoDB\Driver\Manager')) {
|
||||
class Min_DB {
|
||||
var $extension = "MongoDB", $server_info = MONGODB_VERSION, $affected_rows, $error, $last_id;
|
||||
/** @var MongoDB\Driver\Manager */
|
||||
var $_link;
|
||||
var $_db, $_db_name;
|
||||
|
||||
function connect($uri, $options) {
|
||||
$class = 'MongoDB\Driver\Manager';
|
||||
$this->_link = new $class($uri, $options);
|
||||
$this->executeCommand('admin', array('ping' => 1));
|
||||
}
|
||||
|
||||
function executeCommand($db, $command) {
|
||||
$class = 'MongoDB\Driver\Command';
|
||||
try {
|
||||
return $this->_link->executeCommand($db, new $class($command));
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
function executeBulkWrite($namespace, $bulk, $counter) {
|
||||
try {
|
||||
$results = $this->_link->executeBulkWrite($namespace, $bulk);
|
||||
$this->affected_rows = $results->$counter();
|
||||
return true;
|
||||
} catch (Exception $e) {
|
||||
$this->error = $e->getMessage();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function query($query) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
$this->_db_name = $database;
|
||||
return true;
|
||||
}
|
||||
|
||||
function quote($string) {
|
||||
return $string;
|
||||
}
|
||||
}
|
||||
|
||||
class Min_Result {
|
||||
var $num_rows, $_rows = array(), $_offset = 0, $_charset = array();
|
||||
|
||||
function __construct($result) {
|
||||
foreach ($result as $item) {
|
||||
$row = array();
|
||||
foreach ($item as $key => $val) {
|
||||
if (is_a($val, 'MongoDB\BSON\Binary')) {
|
||||
$this->_charset[$key] = 63;
|
||||
}
|
||||
$row[$key] =
|
||||
(is_a($val, 'MongoDB\BSON\ObjectID') ? 'MongoDB\BSON\ObjectID("' . "$val\")" :
|
||||
(is_a($val, 'MongoDB\BSON\UTCDatetime') ? $val->toDateTime()->format('Y-m-d H:i:s') :
|
||||
(is_a($val, 'MongoDB\BSON\Binary') ? $val->getData() : //! allow downloading
|
||||
(is_a($val, 'MongoDB\BSON\Regex') ? "$val" :
|
||||
(is_object($val) || is_array($val) ? json_encode($val, 256) : // 256 = JSON_UNESCAPED_UNICODE
|
||||
$val // MongoMinKey, MongoMaxKey
|
||||
)))));
|
||||
}
|
||||
$this->_rows[] = $row;
|
||||
foreach ($row as $key => $val) {
|
||||
if (!isset($this->_rows[0][$key])) {
|
||||
$this->_rows[0][$key] = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->num_rows = count($this->_rows);
|
||||
}
|
||||
|
||||
function fetch_assoc() {
|
||||
$row = current($this->_rows);
|
||||
if (!$row) {
|
||||
return $row;
|
||||
}
|
||||
$return = array();
|
||||
foreach ($this->_rows[0] as $key => $val) {
|
||||
$return[$key] = $row[$key];
|
||||
}
|
||||
next($this->_rows);
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fetch_row() {
|
||||
$return = $this->fetch_assoc();
|
||||
if (!$return) {
|
||||
return $return;
|
||||
}
|
||||
return array_values($return);
|
||||
}
|
||||
|
||||
function fetch_field() {
|
||||
$keys = array_keys($this->_rows[0]);
|
||||
$name = $keys[$this->_offset++];
|
||||
return (object) array(
|
||||
'name' => $name,
|
||||
'charsetnr' => $this->_charset[$name],
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
public $primary = "_id";
|
||||
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
global $connection;
|
||||
$select = ($select == array("*")
|
||||
? array()
|
||||
: array_fill_keys($select, 1)
|
||||
);
|
||||
if (count($select) && !isset($select['_id'])) {
|
||||
$select['_id'] = 0;
|
||||
}
|
||||
$where = where_to_query($where);
|
||||
$sort = array();
|
||||
foreach ($order as $val) {
|
||||
$val = preg_replace('~ DESC$~', '', $val, 1, $count);
|
||||
$sort[$val] = ($count ? -1 : 1);
|
||||
}
|
||||
if (isset($_GET['limit']) && is_numeric($_GET['limit']) && $_GET['limit'] > 0) {
|
||||
$limit = $_GET['limit'];
|
||||
}
|
||||
$limit = min(200, max(1, (int) $limit));
|
||||
$skip = $page * $limit;
|
||||
$class = 'MongoDB\Driver\Query';
|
||||
try {
|
||||
return new Min_Result($connection->_link->executeQuery("$connection->_db_name.$table", new $class($where, array('projection' => $select, 'limit' => $limit, 'skip' => $skip, 'sort' => $sort))));
|
||||
} catch (Exception $e) {
|
||||
$connection->error = $e->getMessage();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
|
||||
global $connection;
|
||||
$db = $connection->_db_name;
|
||||
$where = sql_query_where_parser($queryWhere);
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
if (isset($set['_id'])) {
|
||||
unset($set['_id']);
|
||||
}
|
||||
$removeFields = array();
|
||||
foreach ($set as $key => $value) {
|
||||
if ($value == 'NULL') {
|
||||
$removeFields[$key] = 1;
|
||||
unset($set[$key]);
|
||||
}
|
||||
}
|
||||
$update = array('$set' => $set);
|
||||
if (count($removeFields)) {
|
||||
$update['$unset'] = $removeFields;
|
||||
}
|
||||
$bulk->update($where, $update, array('upsert' => false));
|
||||
return $connection->executeBulkWrite("$db.$table", $bulk, 'getModifiedCount');
|
||||
}
|
||||
|
||||
function delete($table, $queryWhere, $limit = 0) {
|
||||
global $connection;
|
||||
$db = $connection->_db_name;
|
||||
$where = sql_query_where_parser($queryWhere);
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
$bulk->delete($where, array('limit' => $limit));
|
||||
return $connection->executeBulkWrite("$db.$table", $bulk, 'getDeletedCount');
|
||||
}
|
||||
|
||||
function insert($table, $set) {
|
||||
global $connection;
|
||||
$db = $connection->_db_name;
|
||||
$class = 'MongoDB\Driver\BulkWrite';
|
||||
$bulk = new $class(array());
|
||||
if ($set['_id'] == '') {
|
||||
unset($set['_id']);
|
||||
}
|
||||
$bulk->insert($set);
|
||||
return $connection->executeBulkWrite("$db.$table", $bulk, 'getInsertedCount');
|
||||
}
|
||||
}
|
||||
|
||||
function get_databases($flush) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($connection->executeCommand('admin', array('listDatabases' => 1)) as $dbs) {
|
||||
foreach ($dbs->databases as $db) {
|
||||
$return[] = $db->name;
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function count_tables($databases) {
|
||||
$return = array();
|
||||
return $return;
|
||||
}
|
||||
|
||||
function tables_list() {
|
||||
global $connection;
|
||||
$collections = array();
|
||||
foreach ($connection->executeCommand($connection->_db_name, array('listCollections' => 1)) as $result) {
|
||||
$collections[$result->name] = 'table';
|
||||
}
|
||||
return $collections;
|
||||
}
|
||||
|
||||
function drop_databases($databases) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function indexes($table, $connection2 = null) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($connection->executeCommand($connection->_db_name, array('listIndexes' => $table)) as $index) {
|
||||
$descs = array();
|
||||
$columns = array();
|
||||
foreach (get_object_vars($index->key) as $column => $type) {
|
||||
$descs[] = ($type == -1 ? '1' : null);
|
||||
$columns[] = $column;
|
||||
}
|
||||
$return[$index->name] = array(
|
||||
"type" => ($index->name == "_id_" ? "PRIMARY" : (isset($index->unique) ? "UNIQUE" : "INDEX")),
|
||||
"columns" => $columns,
|
||||
"lengths" => array(),
|
||||
"descs" => $descs,
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
global $driver;
|
||||
$fields = fields_from_edit();
|
||||
if (!$fields) {
|
||||
$result = $driver->select($table, array("*"), null, null, array(), 10);
|
||||
if ($result) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
foreach ($row as $key => $val) {
|
||||
$row[$key] = null;
|
||||
$fields[$key] = array(
|
||||
"field" => $key,
|
||||
"type" => "string",
|
||||
"null" => ($key != $driver->primary),
|
||||
"auto_increment" => ($key == $driver->primary),
|
||||
"privileges" => array(
|
||||
"insert" => 1,
|
||||
"select" => 1,
|
||||
"update" => 1,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $fields;
|
||||
}
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
global $connection;
|
||||
$where = where_to_query($where);
|
||||
$toArray = $connection->executeCommand($connection->_db_name, array('count' => $table_status['Name'], 'query' => $where))->toArray();
|
||||
return $toArray[0]->n;
|
||||
}
|
||||
|
||||
function sql_query_where_parser($queryWhere) {
|
||||
$queryWhere = preg_replace('~^\sWHERE \(?\(?(.+?)\)?\)?$~', '\1', $queryWhere);
|
||||
$wheres = explode(' AND ', $queryWhere);
|
||||
$wheresOr = explode(') OR (', $queryWhere);
|
||||
$where = array();
|
||||
foreach ($wheres as $whereStr) {
|
||||
$where[] = trim($whereStr);
|
||||
}
|
||||
if (count($wheresOr) == 1) {
|
||||
$wheresOr = array();
|
||||
} elseif (count($wheresOr) > 1) {
|
||||
$where = array();
|
||||
}
|
||||
return where_to_query($where, $wheresOr);
|
||||
}
|
||||
|
||||
function where_to_query($whereAnd = array(), $whereOr = array()) {
|
||||
global $adminer;
|
||||
$data = array();
|
||||
foreach (array('and' => $whereAnd, 'or' => $whereOr) as $type => $where) {
|
||||
if (is_array($where)) {
|
||||
foreach ($where as $expression) {
|
||||
list($col, $op, $val) = explode(" ", $expression, 3);
|
||||
if ($col == "_id" && preg_match('~^(MongoDB\\\\BSON\\\\ObjectID)\("(.+)"\)$~', $val, $match)) {
|
||||
list(, $class, $val) = $match;
|
||||
$val = new $class($val);
|
||||
}
|
||||
if (!in_array($op, $adminer->operators)) {
|
||||
continue;
|
||||
}
|
||||
if (preg_match('~^\(f\)(.+)~', $op, $match)) {
|
||||
$val = (float) $val;
|
||||
$op = $match[1];
|
||||
} elseif (preg_match('~^\(date\)(.+)~', $op, $match)) {
|
||||
$dateTime = new DateTime($val);
|
||||
$class = 'MongoDB\BSON\UTCDatetime';
|
||||
$val = new $class($dateTime->getTimestamp() * 1000);
|
||||
$op = $match[1];
|
||||
}
|
||||
switch ($op) {
|
||||
case '=':
|
||||
$op = '$eq';
|
||||
break;
|
||||
case '!=':
|
||||
$op = '$ne';
|
||||
break;
|
||||
case '>':
|
||||
$op = '$gt';
|
||||
break;
|
||||
case '<':
|
||||
$op = '$lt';
|
||||
break;
|
||||
case '>=':
|
||||
$op = '$gte';
|
||||
break;
|
||||
case '<=':
|
||||
$op = '$lte';
|
||||
break;
|
||||
case 'regex':
|
||||
$op = '$regex';
|
||||
break;
|
||||
default:
|
||||
continue 2;
|
||||
}
|
||||
if ($type == 'and') {
|
||||
$data['$and'][] = array($col => array($op => $val));
|
||||
} elseif ($type == 'or') {
|
||||
$data['$or'][] = array($col => array($op => $val));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
$operators = array(
|
||||
"=",
|
||||
"!=",
|
||||
">",
|
||||
"<",
|
||||
">=",
|
||||
"<=",
|
||||
"regex",
|
||||
"(f)=",
|
||||
"(f)!=",
|
||||
"(f)>",
|
||||
"(f)<",
|
||||
"(f)>=",
|
||||
"(f)<=",
|
||||
"(date)=",
|
||||
"(date)!=",
|
||||
"(date)>",
|
||||
"(date)<",
|
||||
"(date)>=",
|
||||
"(date)<=",
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
function table($idf) {
|
||||
return $idf;
|
||||
}
|
||||
|
||||
function idf_escape($idf) {
|
||||
return $idf;
|
||||
}
|
||||
|
||||
function table_status($name = "", $fast = false) {
|
||||
$return = array();
|
||||
foreach (tables_list() as $table => $type) {
|
||||
$return[$table] = array("Name" => $table);
|
||||
if ($name == $table) {
|
||||
return $return[$table];
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function create_database($db, $collation) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function last_id() {
|
||||
global $connection;
|
||||
return $connection->last_id;
|
||||
}
|
||||
|
||||
function error() {
|
||||
global $connection;
|
||||
return h($connection->error);
|
||||
}
|
||||
|
||||
function collations() {
|
||||
return array();
|
||||
}
|
||||
|
||||
function logged_user() {
|
||||
global $adminer;
|
||||
$credentials = $adminer->credentials();
|
||||
return $credentials[1];
|
||||
}
|
||||
|
||||
function connect() {
|
||||
global $adminer;
|
||||
$connection = new Min_DB;
|
||||
list($server, $username, $password) = $adminer->credentials();
|
||||
$options = array();
|
||||
if ($username . $password != "") {
|
||||
$options["username"] = $username;
|
||||
$options["password"] = $password;
|
||||
}
|
||||
$db = $adminer->database();
|
||||
if ($db != "") {
|
||||
$options["db"] = $db;
|
||||
}
|
||||
if (($auth_source = getenv("MONGO_AUTH_SOURCE"))) {
|
||||
$options["authSource"] = $auth_source;
|
||||
}
|
||||
$connection->connect("mongodb://$server", $options);
|
||||
if ($connection->error) {
|
||||
return $connection->error;
|
||||
}
|
||||
return $connection;
|
||||
}
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
global $connection;
|
||||
foreach ($alter as $val) {
|
||||
list($type, $name, $set) = $val;
|
||||
if ($set == "DROP") {
|
||||
$return = $connection->_db->command(array("deleteIndexes" => $table, "index" => $name));
|
||||
} else {
|
||||
$columns = array();
|
||||
foreach ($set as $column) {
|
||||
$column = preg_replace('~ DESC$~', '', $column, 1, $count);
|
||||
$columns[$column] = ($count ? -1 : 1);
|
||||
}
|
||||
$return = $connection->_db->selectCollection($table)->ensureIndex($columns, array(
|
||||
"unique" => ($type == "UNIQUE"),
|
||||
"name" => $name,
|
||||
//! "sparse"
|
||||
));
|
||||
}
|
||||
if ($return['errmsg']) {
|
||||
$connection->error = $return['errmsg'];
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function support($feature) {
|
||||
return preg_match("~database|indexes|descidx~", $feature);
|
||||
}
|
||||
|
||||
function db_collation($db, $collations) {
|
||||
}
|
||||
|
||||
function information_schema() {
|
||||
}
|
||||
|
||||
function is_view($table_status) {
|
||||
}
|
||||
|
||||
function convert_field($field) {
|
||||
}
|
||||
|
||||
function unconvert_field($field, $return) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
return array();
|
||||
}
|
||||
|
||||
function fk_support($table_status) {
|
||||
}
|
||||
|
||||
function engines() {
|
||||
return array();
|
||||
}
|
||||
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
global $connection;
|
||||
if ($table == "") {
|
||||
$connection->_db->createCollection($name);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function drop_tables($tables) {
|
||||
global $connection;
|
||||
foreach ($tables as $table) {
|
||||
$response = $connection->_db->selectCollection($table)->drop();
|
||||
if (!$response['ok']) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function truncate_tables($tables) {
|
||||
global $connection;
|
||||
foreach ($tables as $table) {
|
||||
$response = $connection->_db->selectCollection($table)->remove();
|
||||
if (!$response['ok']) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
global $operators;
|
||||
return array(
|
||||
'possible_drivers' => array("mongo", "mongodb"),
|
||||
'jush' => "mongo",
|
||||
'operators' => $operators,
|
||||
'functions' => array(),
|
||||
'grouping' => array(),
|
||||
'edit_functions' => array(array("json")),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -5,25 +5,31 @@
|
||||
* @author Jakub Vrana
|
||||
*/
|
||||
|
||||
$drivers["mssql"] = "MS SQL";
|
||||
$drivers["mssql"] = "MS SQL (beta)";
|
||||
|
||||
if (isset($_GET["mssql"])) {
|
||||
$possible_drivers = array("SQLSRV", "MSSQL");
|
||||
define("DRIVER", "mssql");
|
||||
if (extension_loaded("sqlsrv")) {
|
||||
class Min_DB {
|
||||
var $extension = "sqlsrv", $_link, $_result, $server_info, $affected_rows, $error;
|
||||
var $extension = "sqlsrv", $_link, $_result, $server_info, $affected_rows, $errno, $error;
|
||||
|
||||
function _get_error() {
|
||||
$this->error = "";
|
||||
foreach (sqlsrv_errors() as $error) {
|
||||
$this->errno = $error["code"];
|
||||
$this->error .= "$error[message]\n";
|
||||
}
|
||||
$this->error = rtrim($this->error);
|
||||
}
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
$this->_link = @sqlsrv_connect($server, array("UID" => $username, "PWD" => $password, "CharacterSet" => "UTF-8"));
|
||||
global $adminer;
|
||||
$db = $adminer->database();
|
||||
$connection_info = array("UID" => $username, "PWD" => $password, "CharacterSet" => "UTF-8");
|
||||
if ($db != "") {
|
||||
$connection_info["Database"] = $db;
|
||||
}
|
||||
$this->_link = @sqlsrv_connect(preg_replace('~:~', ',', $server), $connection_info);
|
||||
if ($this->_link) {
|
||||
$info = sqlsrv_server_info($this->_link);
|
||||
$this->server_info = $info['SQLServerVersion'];
|
||||
@@ -65,6 +71,9 @@ if (isset($_GET["mssql"])) {
|
||||
if (!$result) {
|
||||
$result = $this->_result;
|
||||
}
|
||||
if (!$result) {
|
||||
return false;
|
||||
}
|
||||
if (sqlsrv_field_metadata($result)) {
|
||||
return new Min_Result($result);
|
||||
}
|
||||
@@ -73,7 +82,7 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
|
||||
function next_result() {
|
||||
return sqlsrv_next_result($this->_result);
|
||||
return $this->_result ? sqlsrv_next_result($this->_result) : null;
|
||||
}
|
||||
|
||||
function result($query, $field = 0) {
|
||||
@@ -89,7 +98,7 @@ if (isset($_GET["mssql"])) {
|
||||
class Min_Result {
|
||||
var $_result, $_offset = 0, $_fields, $num_rows;
|
||||
|
||||
function Min_Result($result) {
|
||||
function __construct($result) {
|
||||
$this->_result = $result;
|
||||
// $this->num_rows = sqlsrv_num_rows($result); // available only in scrollable results
|
||||
}
|
||||
@@ -103,13 +112,13 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
|
||||
|
||||
function fetch_assoc() {
|
||||
return $this->_convert(sqlsrv_fetch_array($this->_result, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_NEXT));
|
||||
return $this->_convert(sqlsrv_fetch_array($this->_result, SQLSRV_FETCH_ASSOC));
|
||||
}
|
||||
|
||||
function fetch_row() {
|
||||
return $this->_convert(sqlsrv_fetch_array($this->_result, SQLSRV_FETCH_NUMERIC, SQLSRV_SCROLL_NEXT));
|
||||
return $this->_convert(sqlsrv_fetch_array($this->_result, SQLSRV_FETCH_NUMERIC));
|
||||
}
|
||||
|
||||
function fetch_field() {
|
||||
@@ -123,7 +132,7 @@ if (isset($_GET["mssql"])) {
|
||||
$return->type = ($field["Type"] == 1 ? 254 : 0);
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function seek($offset) {
|
||||
for ($i=0; $i < $offset; $i++) {
|
||||
sqlsrv_fetch($this->_result); // SQLSRV_SCROLL_ABSOLUTE added in sqlsrv 1.1
|
||||
@@ -134,7 +143,7 @@ if (isset($_GET["mssql"])) {
|
||||
sqlsrv_free_stmt($this->_result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} elseif (extension_loaded("mssql")) {
|
||||
class Min_DB {
|
||||
var $extension = "MSSQL", $_link, $_result, $server_info, $affected_rows, $error;
|
||||
@@ -143,8 +152,10 @@ if (isset($_GET["mssql"])) {
|
||||
$this->_link = @mssql_connect($server, $username, $password);
|
||||
if ($this->_link) {
|
||||
$result = $this->query("SELECT SERVERPROPERTY('ProductLevel'), SERVERPROPERTY('Edition')");
|
||||
$row = $result->fetch_row();
|
||||
$this->server_info = $this->result("sp_server_info 2", 2) . " [$row[0]] $row[1]";
|
||||
if ($result) {
|
||||
$row = $result->fetch_row();
|
||||
$this->server_info = $this->result("sp_server_info 2", 2) . " [$row[0]] $row[1]";
|
||||
}
|
||||
} else {
|
||||
$this->error = mssql_get_last_message();
|
||||
}
|
||||
@@ -160,7 +171,7 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
|
||||
function query($query, $unbuffered = false) {
|
||||
$result = mssql_query($query, $this->_link); //! $unbuffered
|
||||
$result = @mssql_query($query, $this->_link); //! $unbuffered
|
||||
$this->error = "";
|
||||
if (!$result) {
|
||||
$this->error = mssql_get_last_message();
|
||||
@@ -182,7 +193,7 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
|
||||
function next_result() {
|
||||
return mssql_next_result($this->_result);
|
||||
return mssql_next_result($this->_result->_result);
|
||||
}
|
||||
|
||||
function result($query, $field = 0) {
|
||||
@@ -197,7 +208,7 @@ if (isset($_GET["mssql"])) {
|
||||
class Min_Result {
|
||||
var $_result, $_offset = 0, $_fields, $num_rows;
|
||||
|
||||
function Min_Result($result) {
|
||||
function __construct($result) {
|
||||
$this->_result = $result;
|
||||
$this->num_rows = mssql_num_rows($result);
|
||||
}
|
||||
@@ -224,14 +235,60 @@ if (isset($_GET["mssql"])) {
|
||||
function seek($offset) {
|
||||
mssql_data_seek($this->_result, $offset);
|
||||
}
|
||||
|
||||
|
||||
function __destruct() {
|
||||
mssql_free_result($this->_result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} elseif (extension_loaded("pdo_dblib")) {
|
||||
class Min_DB extends Min_PDO {
|
||||
var $extension = "PDO_DBLIB";
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
$this->dsn("dblib:charset=utf8;host=" . str_replace(":", ";unix_socket=", preg_replace('~:(\d)~', ';port=\1', $server)), $username, $password);
|
||||
return true;
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
// database selection is separated from the connection so dbname in DSN can't be used
|
||||
return $this->query("USE " . idf_escape($database));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
|
||||
function insertUpdate($table, $rows, $primary) {
|
||||
foreach ($rows as $set) {
|
||||
$update = array();
|
||||
$where = array();
|
||||
foreach ($set as $key => $val) {
|
||||
$update[] = "$key = $val";
|
||||
if (isset($primary[idf_unescape($key)])) {
|
||||
$where[] = "$key = $val";
|
||||
}
|
||||
}
|
||||
//! can use only one query for all rows
|
||||
if (!queries("MERGE " . table($table) . " USING (VALUES(" . implode(", ", $set) . ")) AS source (c" . implode(", c", range(1, count($set))) . ") ON " . implode(" AND ", $where) //! source, c1 - possible conflict
|
||||
. " WHEN MATCHED THEN UPDATE SET " . implode(", ", $update)
|
||||
. " WHEN NOT MATCHED THEN INSERT (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ");" // ; is mandatory
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function begin() {
|
||||
return queries("BEGIN TRANSACTION");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function idf_escape($idf) {
|
||||
return "[" . str_replace("]", "]]", $idf) . "]";
|
||||
}
|
||||
@@ -251,20 +308,20 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
|
||||
function get_databases() {
|
||||
return get_vals("EXEC sp_databases");
|
||||
return get_vals("SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')");
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
return ($limit !== null ? " TOP (" . ($limit + $offset) . ")" : "") . " $query$where"; // seek later
|
||||
}
|
||||
|
||||
function limit1($query, $where) {
|
||||
return limit($query, $where, 1);
|
||||
function limit1($table, $query, $where, $separator = "\n") {
|
||||
return limit($query, $where, 1, 0, $separator);
|
||||
}
|
||||
|
||||
function db_collation($db, $collations) {
|
||||
global $connection;
|
||||
return $connection->result("SELECT collation_name FROM sys.databases WHERE name = " . q($db));
|
||||
return $connection->result("SELECT collation_name FROM sys.databases WHERE name = " . q($db));
|
||||
}
|
||||
|
||||
function engines() {
|
||||
@@ -289,10 +346,10 @@ if (isset($_GET["mssql"])) {
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT name AS Name, type_desc AS Engine FROM sys.all_objects WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V')" . ($name != "" ? " AND name = " . q($name) : "")) as $row) {
|
||||
foreach (get_rows("SELECT ao.name AS Name, ao.type_desc AS Engine, (SELECT value FROM fn_listextendedproperty(default, 'SCHEMA', schema_name(schema_id), 'TABLE', ao.name, null, null)) AS Comment FROM sys.all_objects AS ao WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
||||
if ($name != "") {
|
||||
return $row;
|
||||
}
|
||||
@@ -304,14 +361,15 @@ if (isset($_GET["mssql"])) {
|
||||
function is_view($table_status) {
|
||||
return $table_status["Engine"] == "VIEW";
|
||||
}
|
||||
|
||||
|
||||
function fk_support($table_status) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
$comments = get_key_vals("SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', " . q(get_schema()) . ", 'table', " . q($table) . ", 'column', NULL)");
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT c.*, t.name type, d.definition [default]
|
||||
foreach (get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default]
|
||||
FROM sys.all_columns c
|
||||
JOIN sys.all_objects o ON c.object_id = o.object_id
|
||||
JOIN sys.types t ON c.user_type_id = t.user_type_id
|
||||
@@ -319,7 +377,7 @@ LEFT JOIN sys.default_constraints d ON c.default_object_id = d.parent_column_id
|
||||
WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U', 'V') AND o.name = " . q($table)
|
||||
) as $row) {
|
||||
$type = $row["type"];
|
||||
$length = (ereg("char|binary", $type) ? $row["max_length"] : ($type == "decimal" ? "$row[precision],$row[scale]" : ""));
|
||||
$length = (preg_match("~char|binary~", $type) ? $row["max_length"] : ($type == "decimal" ? "$row[precision],$row[scale]" : ""));
|
||||
$return[$row["name"]] = array(
|
||||
"field" => $row["name"],
|
||||
"full_type" => $type . ($length ? "($length)" : ""),
|
||||
@@ -331,6 +389,7 @@ WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U',
|
||||
"collation" => $row["collation_name"],
|
||||
"privileges" => array("insert" => 1, "select" => 1, "update" => 1),
|
||||
"primary" => $row["is_identity"], //! or indexes.is_primary_key
|
||||
"comment" => $comments[$row["name"]],
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
@@ -339,28 +398,30 @@ WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U',
|
||||
function indexes($table, $connection2 = null) {
|
||||
$return = array();
|
||||
// sp_statistics doesn't return information about primary key
|
||||
foreach (get_rows("SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name
|
||||
foreach (get_rows("SELECT i.name, key_ordinal, is_unique, is_primary_key, c.name AS column_name, is_descending_key
|
||||
FROM sys.indexes i
|
||||
INNER JOIN sys.index_columns ic ON i.object_id = ic.object_id AND i.index_id = ic.index_id
|
||||
INNER JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id
|
||||
WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
, $connection2) as $row) {
|
||||
$return[$row["name"]]["type"] = ($row["is_primary_key"] ? "PRIMARY" : ($row["is_unique"] ? "UNIQUE" : "INDEX"));
|
||||
$return[$row["name"]]["lengths"] = array();
|
||||
$return[$row["name"]]["columns"][$row["key_ordinal"]] = $row["column_name"];
|
||||
$name = $row["name"];
|
||||
$return[$name]["type"] = ($row["is_primary_key"] ? "PRIMARY" : ($row["is_unique"] ? "UNIQUE" : "INDEX"));
|
||||
$return[$name]["lengths"] = array();
|
||||
$return[$name]["columns"][$row["key_ordinal"]] = $row["column_name"];
|
||||
$return[$name]["descs"][$row["key_ordinal"]] = ($row["is_descending_key"] ? '1' : null);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function view($name) {
|
||||
global $connection;
|
||||
return array("select" => preg_replace('~^(?:[^[]|\\[[^]]*])*\\s+AS\\s+~isU', '', $connection->result("SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = SCHEMA_NAME() AND TABLE_NAME = " . q($name))));
|
||||
return array("select" => preg_replace('~^(?:[^[]|\[[^]]*])*\s+AS\s+~isU', '', $connection->result("SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = SCHEMA_NAME() AND TABLE_NAME = " . q($name))));
|
||||
}
|
||||
|
||||
|
||||
function collations() {
|
||||
$return = array();
|
||||
foreach (get_vals("SELECT name FROM fn_helpcollations()") as $collation) {
|
||||
$return[ereg_replace("_.*", "", $collation)][] = $collation;
|
||||
$return[preg_replace('~_.*~', '', $collation)][] = $collation;
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -371,23 +432,19 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
|
||||
function error() {
|
||||
global $connection;
|
||||
return nl_br(h(preg_replace('~^(\\[[^]]*])+~m', '', $connection->error)));
|
||||
}
|
||||
|
||||
function exact_value($val) {
|
||||
return q($val);
|
||||
return nl_br(h(preg_replace('~^(\[[^]]*])+~m', '', $connection->error)));
|
||||
}
|
||||
|
||||
function create_database($db, $collation) {
|
||||
return queries("CREATE DATABASE " . idf_escape($db) . (eregi('^[a-z0-9_]+$', $collation) ? " COLLATE $collation" : ""));
|
||||
return queries("CREATE DATABASE " . idf_escape($db) . (preg_match('~^[a-z0-9_]+$~i', $collation) ? " COLLATE $collation" : ""));
|
||||
}
|
||||
|
||||
|
||||
function drop_databases($databases) {
|
||||
return queries("DROP DATABASE " . implode(", ", array_map('idf_escape', $databases)));
|
||||
}
|
||||
|
||||
|
||||
function rename_database($name, $collation) {
|
||||
if (eregi('^[a-z0-9_]+$', $collation)) {
|
||||
if (preg_match('~^[a-z0-9_]+$~i', $collation)) {
|
||||
queries("ALTER DATABASE " . idf_escape(DB) . " COLLATE $collation");
|
||||
}
|
||||
queries("ALTER DATABASE " . idf_escape(DB) . " MODIFY NAME = " . idf_escape($name));
|
||||
@@ -395,18 +452,21 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
}
|
||||
|
||||
function auto_increment() {
|
||||
return " IDENTITY" . ($_POST["Auto_increment"] != "" ? "(" . (+$_POST["Auto_increment"]) . ",1)" : "") . " PRIMARY KEY";
|
||||
return " IDENTITY" . ($_POST["Auto_increment"] != "" ? "(" . number($_POST["Auto_increment"]) . ",1)" : "") . " PRIMARY KEY";
|
||||
}
|
||||
|
||||
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
$alter = array();
|
||||
$comments = array();
|
||||
foreach ($fields as $field) {
|
||||
$column = idf_escape($field[0]);
|
||||
$val = $field[1];
|
||||
if (!$val) {
|
||||
$alter["DROP"][] = " COLUMN $column";
|
||||
} else {
|
||||
$val[1] = preg_replace("~( COLLATE )'(\\w+)'~", "\\1\\2", $val[1]);
|
||||
$val[1] = preg_replace("~( COLLATE )'(\\w+)'~", '\1\2', $val[1]);
|
||||
$comments[$field[0]] = $val[5];
|
||||
unset($val[5]);
|
||||
if ($field[0] == "") {
|
||||
$alter["ADD"][] = "\n " . implode("", $val) . ($table == "" ? substr($foreign[$val[0]], 16 + strlen($val[0])) : ""); // 16 - strlen(" FOREIGN KEY ()")
|
||||
} else {
|
||||
@@ -432,9 +492,14 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
foreach ($comments as $key => $val) {
|
||||
$comment = substr($val, 9); // 9 - strlen(" COMMENT ")
|
||||
queries("EXEC sp_dropextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
queries("EXEC sp_addextendedproperty @name = N'MS_Description', @value = " . $comment . ", @level0type = N'Schema', @level0name = " . q(get_schema()) . ", @level1type = N'Table', @level1name = " . q($name) . ", @level2type = N'Column', @level2name = " . q($key));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
$index = array();
|
||||
$drop = array();
|
||||
@@ -448,7 +513,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
} elseif (!queries(($val[0] != "PRIMARY"
|
||||
? "CREATE $val[0] " . ($val[0] != "INDEX" ? "INDEX " : "") . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table)
|
||||
: "ALTER TABLE " . table($table) . " ADD PRIMARY KEY"
|
||||
) . " $val[2]")) {
|
||||
) . " (" . implode(", ", $val[2]) . ")")) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -456,50 +521,27 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
&& (!$drop || queries("ALTER TABLE " . table($table) . " DROP " . implode(", ", $drop)))
|
||||
;
|
||||
}
|
||||
|
||||
function begin() {
|
||||
return queries("BEGIN TRANSACTION");
|
||||
}
|
||||
|
||||
function insert_into($table, $set) {
|
||||
return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES"));
|
||||
}
|
||||
|
||||
function insert_update($table, $set, $primary) {
|
||||
$update = array();
|
||||
$where = array();
|
||||
foreach ($set as $key => $val) {
|
||||
$update[] = "$key = $val";
|
||||
if (isset($primary[idf_unescape($key)])) {
|
||||
$where[] = "$key = $val";
|
||||
}
|
||||
}
|
||||
// can use only one query for all rows with different API
|
||||
return queries("MERGE " . table($table) . " USING (VALUES(" . implode(", ", $set) . ")) AS source (c" . implode(", c", range(1, count($set))) . ") ON " . implode(" AND ", $where) //! source, c1 - possible conflict
|
||||
. " WHEN MATCHED THEN UPDATE SET " . implode(", ", $update)
|
||||
. " WHEN NOT MATCHED THEN INSERT (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ");" // ; is mandatory
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function last_id() {
|
||||
global $connection;
|
||||
return $connection->result("SELECT SCOPE_IDENTITY()"); // @@IDENTITY can return trigger INSERT
|
||||
}
|
||||
|
||||
|
||||
function explain($connection, $query) {
|
||||
$connection->query("SET SHOWPLAN_ALL ON");
|
||||
$return = $connection->query($query);
|
||||
$connection->query("SET SHOWPLAN_ALL OFF"); // connection is used also for indexes
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
}
|
||||
|
||||
|
||||
function foreign_keys($table) {
|
||||
$return = array();
|
||||
foreach (get_rows("EXEC sp_fkeys @fktable_name = " . q($table)) as $row) {
|
||||
$foreign_key = &$return[$row["FK_NAME"]];
|
||||
$foreign_key["db"] = $row["PKTABLE_QUALIFIER"];
|
||||
$foreign_key["table"] = $row["PKTABLE_NAME"];
|
||||
$foreign_key["source"][] = $row["FKCOLUMN_NAME"];
|
||||
$foreign_key["target"][] = $row["PKCOLUMN_NAME"];
|
||||
@@ -522,7 +564,7 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table)
|
||||
function move_tables($tables, $views, $target) {
|
||||
return apply_queries("ALTER SCHEMA " . idf_escape($target) . " TRANSFER", array_merge($tables, $views));
|
||||
}
|
||||
|
||||
|
||||
function trigger($name) {
|
||||
if ($name == "") {
|
||||
return array();
|
||||
@@ -537,11 +579,11 @@ WHERE s.xtype = 'TR' AND s.name = " . q($name)
|
||||
); // triggers are not schema-scoped
|
||||
$return = reset($rows);
|
||||
if ($return) {
|
||||
$return["Statement"] = preg_replace('~^.+\\s+AS\\s+~isU', '', $return["text"]); //! identifiers, comments
|
||||
$return["Statement"] = preg_replace('~^.+\s+AS\s+~isU', '', $return["text"]); //! identifiers, comments
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function triggers($table) {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT sys1.name,
|
||||
@@ -555,18 +597,19 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function trigger_options() {
|
||||
return array(
|
||||
"Timing" => array("AFTER", "INSTEAD OF"),
|
||||
"Event" => array("INSERT", "UPDATE", "DELETE"),
|
||||
"Type" => array("AS"),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function schemas() {
|
||||
return get_vals("SELECT name FROM sys.schemas");
|
||||
}
|
||||
|
||||
|
||||
function get_schema() {
|
||||
global $connection;
|
||||
if ($_GET["ns"] != "") {
|
||||
@@ -574,56 +617,63 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)
|
||||
}
|
||||
return $connection->result("SELECT SCHEMA_NAME()");
|
||||
}
|
||||
|
||||
|
||||
function set_schema($schema) {
|
||||
return true; // ALTER USER is permanent
|
||||
}
|
||||
|
||||
|
||||
function use_sql($database) {
|
||||
return "USE " . idf_escape($database);
|
||||
}
|
||||
|
||||
|
||||
function show_variables() {
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
function show_status() {
|
||||
return array();
|
||||
}
|
||||
|
||||
function convert_field($field) {
|
||||
}
|
||||
|
||||
|
||||
function unconvert_field($field, $return) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function support($feature) {
|
||||
return ereg('^(scheme|trigger|view|drop_col)$', $feature); //! routine|
|
||||
return preg_match('~^(comment|columns|database|drop_col|indexes|descidx|scheme|sql|table|trigger|view|view_trigger)$~', $feature); //! routine|
|
||||
}
|
||||
|
||||
$jush = "mssql";
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! use sys.types
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "int" => 10, "bigint" => 20, "bit" => 1, "decimal" => 0, "real" => 12, "float" => 53, "smallmoney" => 10, "money" => 20),
|
||||
lang('Date and time') => array("date" => 10, "smalldatetime" => 19, "datetime" => 19, "datetime2" => 19, "time" => 8, "datetimeoffset" => 10),
|
||||
lang('Strings') => array("char" => 8000, "varchar" => 8000, "text" => 2147483647, "nchar" => 4000, "nvarchar" => 4000, "ntext" => 1073741823),
|
||||
lang('Binary') => array("binary" => 8000, "varbinary" => 8000, "image" => 2147483647),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array( //! use sys.types
|
||||
lang('Numbers') => array("tinyint" => 3, "smallint" => 5, "int" => 10, "bigint" => 20, "bit" => 1, "decimal" => 0, "real" => 12, "float" => 53, "smallmoney" => 10, "money" => 20),
|
||||
lang('Date and time') => array("date" => 10, "smalldatetime" => 19, "datetime" => 19, "datetime2" => 19, "time" => 8, "datetimeoffset" => 10),
|
||||
lang('Strings') => array("char" => 8000, "varchar" => 8000, "text" => 2147483647, "nchar" => 4000, "nvarchar" => 4000, "ntext" => 1073741823),
|
||||
lang('Binary') => array("binary" => 8000, "varbinary" => 8000, "image" => 2147483647),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("SQLSRV", "MSSQL", "PDO_DBLIB"),
|
||||
'jush' => "mssql",
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL"),
|
||||
'functions' => array("len", "lower", "round", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array(
|
||||
"date|time" => "getdate",
|
||||
), array(
|
||||
"int|decimal|real|float|money|datetime" => "+/-",
|
||||
"char|text" => "+",
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL");
|
||||
$functions = array("len", "lower", "round", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array(
|
||||
"date|time" => "getdate",
|
||||
), array(
|
||||
"int|decimal|real|float|money|datetime" => "+/-",
|
||||
"char|text" => "+",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,21 +1,21 @@
|
||||
<?php
|
||||
$drivers["oracle"] = "Oracle";
|
||||
$drivers["oracle"] = "Oracle (beta)";
|
||||
|
||||
if (isset($_GET["oracle"])) {
|
||||
$possible_drivers = array("OCI8", "PDO_OCI");
|
||||
define("DRIVER", "oracle");
|
||||
if (extension_loaded("oci8")) {
|
||||
class Min_DB {
|
||||
var $extension = "oci8", $_link, $_result, $server_info, $affected_rows, $error;
|
||||
var $extension = "oci8", $_link, $_result, $server_info, $affected_rows, $errno, $error;
|
||||
var $_current_db;
|
||||
|
||||
function _error($errno, $error) {
|
||||
if (ini_bool("html_errors")) {
|
||||
$error = html_entity_decode(strip_tags($error));
|
||||
}
|
||||
$error = ereg_replace('^[^:]*: ', '', $error);
|
||||
$error = preg_replace('~^[^:]*: ~', '', $error);
|
||||
$this->error = $error;
|
||||
}
|
||||
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
$this->_link = @oci_new_connect($username, $password, $server, "AL32UTF8");
|
||||
if ($this->_link) {
|
||||
@@ -32,6 +32,7 @@ if (isset($_GET["oracle"])) {
|
||||
}
|
||||
|
||||
function select_db($database) {
|
||||
$this->_current_db = $database;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -40,6 +41,7 @@ if (isset($_GET["oracle"])) {
|
||||
$this->error = "";
|
||||
if (!$result) {
|
||||
$error = oci_error($this->_link);
|
||||
$this->errno = $error["code"];
|
||||
$this->error = $error["message"];
|
||||
return false;
|
||||
}
|
||||
@@ -51,6 +53,7 @@ if (isset($_GET["oracle"])) {
|
||||
return new Min_Result($result);
|
||||
}
|
||||
$this->affected_rows = oci_num_rows($result);
|
||||
oci_free_statement($result);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
@@ -58,15 +61,15 @@ if (isset($_GET["oracle"])) {
|
||||
function multi_query($query) {
|
||||
return $this->_result = $this->query($query);
|
||||
}
|
||||
|
||||
|
||||
function store_result() {
|
||||
return $this->_result;
|
||||
}
|
||||
|
||||
|
||||
function next_result() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function result($query, $field = 1) {
|
||||
$result = $this->query($query);
|
||||
if (!is_object($result) || !oci_fetch($result->_result)) {
|
||||
@@ -79,7 +82,7 @@ if (isset($_GET["oracle"])) {
|
||||
class Min_Result {
|
||||
var $_result, $_offset = 1, $num_rows;
|
||||
|
||||
function Min_Result($result) {
|
||||
function __construct($result) {
|
||||
$this->_result = $result;
|
||||
}
|
||||
|
||||
@@ -91,7 +94,7 @@ if (isset($_GET["oracle"])) {
|
||||
}
|
||||
return $row;
|
||||
}
|
||||
|
||||
|
||||
function fetch_assoc() {
|
||||
return $this->_convert(oci_fetch_assoc($this->_result));
|
||||
}
|
||||
@@ -106,31 +109,66 @@ if (isset($_GET["oracle"])) {
|
||||
$return->name = oci_field_name($this->_result, $column);
|
||||
$return->orgname = $return->name;
|
||||
$return->type = oci_field_type($this->_result, $column);
|
||||
$return->charsetnr = (ereg("raw|blob|bfile", $return->type) ? 63 : 0); // 63 - binary
|
||||
$return->charsetnr = (preg_match("~raw|blob|bfile~", $return->type) ? 63 : 0); // 63 - binary
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function __destruct() {
|
||||
oci_free_statement($this->_result);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} elseif (extension_loaded("pdo_oci")) {
|
||||
class Min_DB extends Min_PDO {
|
||||
var $extension = "PDO_OCI";
|
||||
|
||||
var $_current_db;
|
||||
|
||||
function connect($server, $username, $password) {
|
||||
$this->dsn("oci:dbname=//$server;charset=AL32UTF8", $username, $password);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function select_db($database) {
|
||||
$this->_current_db = $database;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
|
||||
//! support empty $set in insert()
|
||||
|
||||
function begin() {
|
||||
return true; // automatic start
|
||||
}
|
||||
|
||||
function insertUpdate($table, $rows, $primary) {
|
||||
global $connection;
|
||||
foreach ($rows as $set) {
|
||||
$update = array();
|
||||
$where = array();
|
||||
foreach ($set as $key => $val) {
|
||||
$update[] = "$key = $val";
|
||||
if (isset($primary[idf_unescape($key)])) {
|
||||
$where[] = "$key = $val";
|
||||
}
|
||||
}
|
||||
if (!(($where && queries("UPDATE " . table($table) . " SET " . implode(", ", $update) . " WHERE " . implode(" AND ", $where)) && $connection->affected_rows)
|
||||
|| queries("INSERT INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ")")
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function idf_escape($idf) {
|
||||
return '"' . str_replace('"', '""', $idf) . '"';
|
||||
}
|
||||
@@ -150,7 +188,7 @@ if (isset($_GET["oracle"])) {
|
||||
}
|
||||
|
||||
function get_databases() {
|
||||
return get_vals("SELECT tablespace_name FROM user_tablespaces");
|
||||
return get_vals("SELECT tablespace_name FROM user_tablespaces ORDER BY 1");
|
||||
}
|
||||
|
||||
function limit($query, $where, $limit, $offset = 0, $separator = " ") {
|
||||
@@ -160,8 +198,8 @@ if (isset($_GET["oracle"])) {
|
||||
));
|
||||
}
|
||||
|
||||
function limit1($query, $where) {
|
||||
return " $query$where";
|
||||
function limit1($table, $query, $where, $separator = "\n") {
|
||||
return " $query$where"; //! limit
|
||||
}
|
||||
|
||||
function db_collation($db, $collations) {
|
||||
@@ -178,21 +216,52 @@ if (isset($_GET["oracle"])) {
|
||||
return $connection->result("SELECT USER FROM DUAL");
|
||||
}
|
||||
|
||||
function get_current_db() {
|
||||
global $connection;
|
||||
$db = $connection->_current_db ? $connection->_current_db : DB;
|
||||
unset($connection->_current_db);
|
||||
return $db;
|
||||
}
|
||||
|
||||
function where_owner($prefix, $owner = "owner") {
|
||||
if (!$_GET["ns"]) {
|
||||
return '';
|
||||
}
|
||||
return "$prefix$owner = sys_context('USERENV', 'CURRENT_SCHEMA')";
|
||||
}
|
||||
|
||||
function views_table($columns) {
|
||||
$owner = where_owner('');
|
||||
return "(SELECT $columns FROM all_views WHERE " . ($owner ? $owner : "rownum < 0") . ")";
|
||||
}
|
||||
|
||||
function tables_list() {
|
||||
return get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "
|
||||
UNION SELECT view_name, 'view' FROM user_views"
|
||||
$view = views_table("view_name");
|
||||
$owner = where_owner(" AND ");
|
||||
return get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "$owner
|
||||
UNION SELECT view_name, 'view' FROM $view
|
||||
ORDER BY 1"
|
||||
); //! views don't have schema
|
||||
}
|
||||
|
||||
function count_tables($databases) {
|
||||
return array();
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach ($databases as $db) {
|
||||
$return[$db] = $connection->result("SELECT COUNT(*) FROM all_tables WHERE tablespace_name = " . q($db));
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function table_status($name = "") {
|
||||
$return = array();
|
||||
$search = q($name);
|
||||
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q(DB) . ($name != "" ? " AND table_name = $search" : "") . "
|
||||
UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE view_name = $search" : "")
|
||||
$db = get_current_db();
|
||||
$view = views_table("view_name");
|
||||
$owner = where_owner(" AND ");
|
||||
foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q($db) . $owner . ($name != "" ? " AND table_name = $search" : "") . "
|
||||
UNION SELECT view_name, 'view', 0, 0 FROM $view" . ($name != "" ? " WHERE view_name = $search" : "") . "
|
||||
ORDER BY 1"
|
||||
) as $row) {
|
||||
if ($name != "") {
|
||||
return $row;
|
||||
@@ -205,18 +274,19 @@ UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE v
|
||||
function is_view($table_status) {
|
||||
return $table_status["Engine"] == "view";
|
||||
}
|
||||
|
||||
|
||||
function fk_support($table_status) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT * FROM all_tab_columns WHERE table_name = " . q($table) . " ORDER BY column_id") as $row) {
|
||||
$owner = where_owner(" AND ");
|
||||
foreach (get_rows("SELECT * FROM all_tab_columns WHERE table_name = " . q($table) . "$owner ORDER BY column_id") as $row) {
|
||||
$type = $row["DATA_TYPE"];
|
||||
$length = "$row[DATA_PRECISION],$row[DATA_SCALE]";
|
||||
if ($length == ",") {
|
||||
$length = $row["DATA_LENGTH"];
|
||||
$length = $row["CHAR_COL_DECL_LENGTH"];
|
||||
} //! int
|
||||
$return[$row["COLUMN_NAME"]] = array(
|
||||
"field" => $row["COLUMN_NAME"],
|
||||
@@ -237,23 +307,30 @@ UNION SELECT view_name, 'view', 0, 0 FROM user_views" . ($name != "" ? " WHERE v
|
||||
|
||||
function indexes($table, $connection2 = null) {
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT uic.*, uc.constraint_type
|
||||
FROM user_ind_columns uic
|
||||
LEFT JOIN user_constraints uc ON uic.index_name = uc.constraint_name AND uic.table_name = uc.table_name
|
||||
WHERE uic.table_name = " . q($table) . "
|
||||
ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||
$return[$row["INDEX_NAME"]]["type"] = ($row["CONSTRAINT_TYPE"] == "P" ? "PRIMARY" : ($row["CONSTRAINT_TYPE"] == "U" ? "UNIQUE" : "INDEX"));
|
||||
$return[$row["INDEX_NAME"]]["columns"][] = $row["COLUMN_NAME"];
|
||||
$return[$row["INDEX_NAME"]]["lengths"][] = ($row["CHAR_LENGTH"] && $row["CHAR_LENGTH"] != $row["COLUMN_LENGTH"] ? $row["CHAR_LENGTH"] : null);
|
||||
$owner = where_owner(" AND ", "aic.table_owner");
|
||||
foreach (get_rows("SELECT aic.*, ac.constraint_type, atc.data_default
|
||||
FROM all_ind_columns aic
|
||||
LEFT JOIN all_constraints ac ON aic.index_name = ac.constraint_name AND aic.table_name = ac.table_name AND aic.index_owner = ac.owner
|
||||
LEFT JOIN all_tab_cols atc ON aic.column_name = atc.column_name AND aic.table_name = atc.table_name AND aic.index_owner = atc.owner
|
||||
WHERE aic.table_name = " . q($table) . "$owner
|
||||
ORDER BY ac.constraint_type, aic.column_position", $connection2) as $row) {
|
||||
$index_name = $row["INDEX_NAME"];
|
||||
$column_name = $row["DATA_DEFAULT"];
|
||||
$column_name = ($column_name ? trim($column_name, '"') : $row["COLUMN_NAME"]); // trim - possibly wrapped in quotes but never contains quotes inside
|
||||
$return[$index_name]["type"] = ($row["CONSTRAINT_TYPE"] == "P" ? "PRIMARY" : ($row["CONSTRAINT_TYPE"] == "U" ? "UNIQUE" : "INDEX"));
|
||||
$return[$index_name]["columns"][] = $column_name;
|
||||
$return[$index_name]["lengths"][] = ($row["CHAR_LENGTH"] && $row["CHAR_LENGTH"] != $row["COLUMN_LENGTH"] ? $row["CHAR_LENGTH"] : null);
|
||||
$return[$index_name]["descs"][] = ($row["DESCEND"] && $row["DESCEND"] == "DESC" ? '1' : null);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function view($name) {
|
||||
$rows = get_rows('SELECT text "select" FROM user_views WHERE view_name = ' . q($name));
|
||||
$view = views_table("view_name, text");
|
||||
$rows = get_rows('SELECT text "select" FROM ' . $view . ' WHERE view_name = ' . q($name));
|
||||
return reset($rows);
|
||||
}
|
||||
|
||||
|
||||
function collations() {
|
||||
return array(); //!
|
||||
}
|
||||
@@ -266,26 +343,34 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||
global $connection;
|
||||
return h($connection->error); //! highlight sqltext from offset
|
||||
}
|
||||
|
||||
function exact_value($val) {
|
||||
return q($val);
|
||||
}
|
||||
|
||||
|
||||
function explain($connection, $query) {
|
||||
$connection->query("EXPLAIN PLAN FOR $query");
|
||||
return $connection->query("SELECT * FROM plan_table");
|
||||
}
|
||||
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
}
|
||||
|
||||
|
||||
function auto_increment() {
|
||||
return "";
|
||||
}
|
||||
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
$alter = $drop = array();
|
||||
$orig_fields = ($table ? fields($table) : array());
|
||||
foreach ($fields as $field) {
|
||||
$val = $field[1];
|
||||
if ($val && $field[0] != "" && idf_escape($field[0]) != $val[0]) {
|
||||
queries("ALTER TABLE " . table($table) . " RENAME COLUMN " . idf_escape($field[0]) . " TO $val[0]");
|
||||
}
|
||||
$orig_field = $orig_fields[$field[0]];
|
||||
if ($val && $orig_field) {
|
||||
$old = process_field($orig_field, $orig_field);
|
||||
if ($val[2] == $old[2]) {
|
||||
$val[2] = "";
|
||||
}
|
||||
}
|
||||
if ($val) {
|
||||
$alter[] = ($table != "" ? ($field[0] != "" ? "MODIFY (" : "ADD (") : " ") . implode($val) . ($table != "" ? ")" : ""); //! error with name change only
|
||||
} else {
|
||||
@@ -300,11 +385,62 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||
&& ($table == $name || queries("ALTER TABLE " . table($table) . " RENAME TO " . table($name)))
|
||||
;
|
||||
}
|
||||
|
||||
function foreign_keys($table) {
|
||||
return array(); //!
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
$drop = array();
|
||||
$queries = array();
|
||||
foreach ($alter as $val) {
|
||||
if ($val[0] != "INDEX") {
|
||||
//! descending UNIQUE indexes results in syntax error
|
||||
$val[2] = preg_replace('~ DESC$~', '', $val[2]);
|
||||
$create = ($val[2] == "DROP"
|
||||
? "\nDROP CONSTRAINT " . idf_escape($val[1])
|
||||
: "\nADD" . ($val[1] != "" ? " CONSTRAINT " . idf_escape($val[1]) : "") . " $val[0] " . ($val[0] == "PRIMARY" ? "KEY " : "") . "(" . implode(", ", $val[2]) . ")"
|
||||
);
|
||||
array_unshift($queries, "ALTER TABLE " . table($table) . $create);
|
||||
} elseif ($val[2] == "DROP") {
|
||||
$drop[] = idf_escape($val[1]);
|
||||
} else {
|
||||
$queries[] = "CREATE INDEX " . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " (" . implode(", ", $val[2]) . ")";
|
||||
}
|
||||
}
|
||||
if ($drop) {
|
||||
array_unshift($queries, "DROP INDEX " . implode(", ", $drop));
|
||||
}
|
||||
foreach ($queries as $query) {
|
||||
if (!queries($query)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function foreign_keys($table) {
|
||||
$return = array();
|
||||
$query = "SELECT c_list.CONSTRAINT_NAME as NAME,
|
||||
c_src.COLUMN_NAME as SRC_COLUMN,
|
||||
c_dest.OWNER as DEST_DB,
|
||||
c_dest.TABLE_NAME as DEST_TABLE,
|
||||
c_dest.COLUMN_NAME as DEST_COLUMN,
|
||||
c_list.DELETE_RULE as ON_DELETE
|
||||
FROM ALL_CONSTRAINTS c_list, ALL_CONS_COLUMNS c_src, ALL_CONS_COLUMNS c_dest
|
||||
WHERE c_list.CONSTRAINT_NAME = c_src.CONSTRAINT_NAME
|
||||
AND c_list.R_CONSTRAINT_NAME = c_dest.CONSTRAINT_NAME
|
||||
AND c_list.CONSTRAINT_TYPE = 'R'
|
||||
AND c_src.TABLE_NAME = " . q($table);
|
||||
foreach (get_rows($query) as $row) {
|
||||
$return[$row['NAME']] = array(
|
||||
"db" => $row['DEST_DB'],
|
||||
"table" => $row['DEST_TABLE'],
|
||||
"source" => array($row['SRC_COLUMN']),
|
||||
"target" => array($row['DEST_COLUMN']),
|
||||
"on_delete" => $row['ON_DELETE'],
|
||||
"on_update" => null,
|
||||
);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function truncate_tables($tables) {
|
||||
return apply_queries("TRUNCATE TABLE", $tables);
|
||||
}
|
||||
@@ -317,36 +453,32 @@ ORDER BY uc.constraint_type, uic.column_position", $connection2) as $row) {
|
||||
return apply_queries("DROP TABLE", $tables);
|
||||
}
|
||||
|
||||
function begin() {
|
||||
return true; // automatic start
|
||||
}
|
||||
|
||||
function insert_into($table, $set) {
|
||||
return queries("INSERT INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")"); //! no columns
|
||||
}
|
||||
|
||||
function last_id() {
|
||||
return 0; //!
|
||||
}
|
||||
|
||||
|
||||
function schemas() {
|
||||
return get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX'))");
|
||||
$return = get_vals("SELECT DISTINCT owner FROM dba_segments WHERE owner IN (SELECT username FROM dba_users WHERE default_tablespace NOT IN ('SYSTEM','SYSAUX')) ORDER BY 1");
|
||||
return ($return ? $return : get_vals("SELECT DISTINCT owner FROM all_tables WHERE tablespace_name = " . q(DB) . " ORDER BY 1"));
|
||||
}
|
||||
|
||||
|
||||
function get_schema() {
|
||||
global $connection;
|
||||
return $connection->result("SELECT sys_context('USERENV', 'SESSION_USER') FROM dual");
|
||||
}
|
||||
|
||||
function set_schema($scheme) {
|
||||
|
||||
function set_schema($scheme, $connection2 = null) {
|
||||
global $connection;
|
||||
return $connection->query("ALTER SESSION SET CURRENT_SCHEMA = " . idf_escape($scheme));
|
||||
if (!$connection2) {
|
||||
$connection2 = $connection;
|
||||
}
|
||||
return $connection2->query("ALTER SESSION SET CURRENT_SCHEMA = " . idf_escape($scheme));
|
||||
}
|
||||
|
||||
|
||||
function show_variables() {
|
||||
return get_key_vals('SELECT name, display_value FROM v$parameter');
|
||||
}
|
||||
|
||||
|
||||
function process_list() {
|
||||
return get_rows('SELECT sess.process AS "process", sess.username AS "user", sess.schemaname AS "schema", sess.status AS "status", sess.wait_class AS "wait_class", sess.seconds_in_wait AS "seconds_in_wait", sql.sql_text AS "sql_text", sess.machine AS "machine", sess.port AS "port"
|
||||
FROM v$session sess LEFT OUTER JOIN v$sql sql
|
||||
@@ -355,47 +487,54 @@ WHERE sess.type = \'USER\'
|
||||
ORDER BY PROCESS
|
||||
');
|
||||
}
|
||||
|
||||
|
||||
function show_status() {
|
||||
$rows = get_rows('SELECT * FROM v$instance');
|
||||
return reset($rows);
|
||||
}
|
||||
|
||||
|
||||
function convert_field($field) {
|
||||
}
|
||||
|
||||
|
||||
function unconvert_field($field, $return) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function support($feature) {
|
||||
return ereg("view|scheme|processlist|drop_col|variables|status", $feature); //!
|
||||
return preg_match('~^(columns|database|drop_col|indexes|descidx|processlist|scheme|sql|status|table|variables|view)$~', $feature); //!
|
||||
}
|
||||
|
||||
$jush = "oracle";
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array(
|
||||
lang('Numbers') => array("number" => 38, "binary_float" => 12, "binary_double" => 21),
|
||||
lang('Date and time') => array("date" => 10, "timestamp" => 29, "interval year" => 12, "interval day" => 28), //! year(), day() to second()
|
||||
lang('Strings') => array("char" => 2000, "varchar2" => 4000, "nchar" => 2000, "nvarchar2" => 4000, "clob" => 4294967295, "nclob" => 4294967295),
|
||||
lang('Binary') => array("raw" => 2000, "long raw" => 2147483648, "blob" => 4294967295, "bfile" => 4294967296),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
|
||||
function driver_config() {
|
||||
$types = array();
|
||||
$structured_types = array();
|
||||
foreach (array(
|
||||
lang('Numbers') => array("number" => 38, "binary_float" => 12, "binary_double" => 21),
|
||||
lang('Date and time') => array("date" => 10, "timestamp" => 29, "interval year" => 12, "interval day" => 28), //! year(), day() to second()
|
||||
lang('Strings') => array("char" => 2000, "varchar2" => 4000, "nchar" => 2000, "nvarchar2" => 4000, "clob" => 4294967295, "nclob" => 4294967295),
|
||||
lang('Binary') => array("raw" => 2000, "long raw" => 2147483648, "blob" => 4294967295, "bfile" => 4294967296),
|
||||
) as $key => $val) {
|
||||
$types += $val;
|
||||
$structured_types[$key] = array_keys($val);
|
||||
}
|
||||
return array(
|
||||
'possible_drivers' => array("OCI8", "PDO_OCI"),
|
||||
'jush' => "oracle",
|
||||
'types' => $types,
|
||||
'structured_types' => $structured_types,
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "SQL"),
|
||||
'functions' => array("length", "lower", "round", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array( //! no parentheses
|
||||
"date" => "current_date",
|
||||
"timestamp" => "current_timestamp",
|
||||
), array(
|
||||
"number|float|double" => "+/-",
|
||||
"date|timestamp" => "+ interval/- interval",
|
||||
"char|clob" => "||",
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT REGEXP", "NOT IN", "IS NOT NULL", "");
|
||||
$functions = array("length", "lower", "round", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array( //! no parentheses
|
||||
"date" => "current_date",
|
||||
"timestamp" => "current_timestamp",
|
||||
), array(
|
||||
"number|float|double" => "+/-",
|
||||
"date|timestamp" => "+ interval/- interval",
|
||||
"char|clob" => "||",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,24 +3,24 @@ $drivers["sqlite"] = "SQLite 3";
|
||||
$drivers["sqlite2"] = "SQLite 2";
|
||||
|
||||
if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
$possible_drivers = array((isset($_GET["sqlite"]) ? "SQLite3" : "SQLite"), "PDO_SQLite");
|
||||
define("DRIVER", (isset($_GET["sqlite"]) ? "sqlite" : "sqlite2"));
|
||||
if (extension_loaded(isset($_GET["sqlite"]) ? "sqlite3" : "sqlite")) {
|
||||
if (class_exists(isset($_GET["sqlite"]) ? "SQLite3" : "SQLiteDatabase")) {
|
||||
if (isset($_GET["sqlite"])) {
|
||||
|
||||
|
||||
class Min_SQLite {
|
||||
var $extension = "SQLite3", $server_info, $affected_rows, $error, $_link;
|
||||
|
||||
function Min_SQLite($filename) {
|
||||
var $extension = "SQLite3", $server_info, $affected_rows, $errno, $error, $_link;
|
||||
|
||||
function __construct($filename) {
|
||||
$this->_link = new SQLite3($filename);
|
||||
$version = $this->_link->version();
|
||||
$this->server_info = $version["versionString"];
|
||||
}
|
||||
|
||||
|
||||
function query($query) {
|
||||
$result = @$this->_link->query($query);
|
||||
$this->error = "";
|
||||
if (!$result) {
|
||||
$this->errno = $this->_link->lastErrorCode();
|
||||
$this->error = $this->_link->lastErrorMsg();
|
||||
return false;
|
||||
} elseif ($result->numColumns()) {
|
||||
@@ -29,18 +29,18 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
$this->affected_rows = $this->_link->changes();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function quote($string) {
|
||||
return (is_utf8($string)
|
||||
? "'" . $this->_link->escapeString($string) . "'"
|
||||
: "x'" . reset(unpack('H*', $string)) . "'"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function store_result() {
|
||||
return $this->_result;
|
||||
}
|
||||
|
||||
|
||||
function result($query, $field = 0) {
|
||||
$result = $this->query($query);
|
||||
if (!is_object($result)) {
|
||||
@@ -50,22 +50,22 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
return $row[$field];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Min_Result {
|
||||
var $_result, $_offset = 0, $num_rows;
|
||||
|
||||
function Min_Result($result) {
|
||||
|
||||
function __construct($result) {
|
||||
$this->_result = $result;
|
||||
}
|
||||
|
||||
|
||||
function fetch_assoc() {
|
||||
return $this->_result->fetchArray(SQLITE3_ASSOC);
|
||||
}
|
||||
|
||||
|
||||
function fetch_row() {
|
||||
return $this->_result->fetchArray(SQLITE3_NUM);
|
||||
}
|
||||
|
||||
|
||||
function fetch_field() {
|
||||
$column = $this->_offset++;
|
||||
$type = $this->_result->columnType($column);
|
||||
@@ -75,22 +75,22 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
"charsetnr" => ($type == SQLITE3_BLOB ? 63 : 0), // 63 - binary
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function __desctruct() {
|
||||
return $this->_result->finalize();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
class Min_SQLite {
|
||||
var $extension = "SQLite", $server_info, $affected_rows, $error, $_link;
|
||||
|
||||
function Min_SQLite($filename) {
|
||||
|
||||
function __construct($filename) {
|
||||
$this->server_info = sqlite_libversion();
|
||||
$this->_link = new SQLiteDatabase($filename);
|
||||
}
|
||||
|
||||
|
||||
function query($query, $unbuffered = false) {
|
||||
$method = ($unbuffered ? "unbufferedQuery" : "query");
|
||||
$result = @$this->_link->$method($query, SQLITE_BOTH, $error);
|
||||
@@ -104,15 +104,15 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
return new Min_Result($result);
|
||||
}
|
||||
|
||||
|
||||
function quote($string) {
|
||||
return "'" . sqlite_escape_string($string) . "'";
|
||||
}
|
||||
|
||||
|
||||
function store_result() {
|
||||
return $this->_result;
|
||||
}
|
||||
|
||||
|
||||
function result($query, $field = 0) {
|
||||
$result = $this->query($query);
|
||||
if (!is_object($result)) {
|
||||
@@ -122,17 +122,17 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
return $row[$field];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class Min_Result {
|
||||
var $_result, $_offset = 0, $num_rows;
|
||||
|
||||
function Min_Result($result) {
|
||||
|
||||
function __construct($result) {
|
||||
$this->_result = $result;
|
||||
if (method_exists($result, 'numRows')) { // not available in unbuffered query
|
||||
$this->num_rows = $result->numRows();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function fetch_assoc() {
|
||||
$row = $this->_result->fetch(SQLITE_ASSOC);
|
||||
if (!$row) {
|
||||
@@ -140,18 +140,18 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
$return = array();
|
||||
foreach ($row as $key => $val) {
|
||||
$return[($key[0] == '"' ? idf_unescape($key) : $key)] = $val;
|
||||
$return[idf_unescape($key)] = $val;
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function fetch_row() {
|
||||
return $this->_result->fetch(SQLITE_NUM);
|
||||
}
|
||||
|
||||
|
||||
function fetch_field() {
|
||||
$name = $this->_result->fieldName($this->_offset++);
|
||||
$pattern = '(\\[.*]|"(?:[^"]|"")*"|(.+))';
|
||||
$pattern = '(\[.*]|"(?:[^"]|"")*"|(.+))';
|
||||
if (preg_match("~^($pattern\\.)?$pattern\$~", $name, $match)) {
|
||||
$table = ($match[3] != "" ? $match[3] : idf_unescape($match[2]));
|
||||
$name = ($match[5] != "" ? $match[5] : idf_unescape($match[4]));
|
||||
@@ -162,47 +162,75 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
"orgtable" => $table,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
} elseif (extension_loaded("pdo_sqlite")) {
|
||||
class Min_SQLite extends Min_PDO {
|
||||
var $extension = "PDO_SQLite";
|
||||
|
||||
function Min_SQLite($filename) {
|
||||
|
||||
function __construct($filename) {
|
||||
$this->dsn(DRIVER . ":$filename", "", "");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (class_exists("Min_SQLite")) {
|
||||
class Min_DB extends Min_SQLite {
|
||||
|
||||
function Min_DB() {
|
||||
$this->Min_SQLite(":memory:");
|
||||
|
||||
function __construct() {
|
||||
parent::__construct(":memory:");
|
||||
$this->query("PRAGMA foreign_keys = 1");
|
||||
}
|
||||
|
||||
|
||||
function select_db($filename) {
|
||||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(ereg("(^[/\\\\]|:)", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||
$this->Min_SQLite($filename);
|
||||
if (is_readable($filename) && $this->query("ATTACH " . $this->quote(preg_match("~(^[/\\\\]|:)~", $filename) ? $filename : dirname($_SERVER["SCRIPT_FILENAME"]) . "/$filename") . " AS a")) { // is_readable - SQLite 3
|
||||
parent::__construct($filename);
|
||||
$this->query("PRAGMA foreign_keys = 1");
|
||||
$this->query("PRAGMA busy_timeout = 500");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function multi_query($query) {
|
||||
return $this->_result = $this->query($query);
|
||||
}
|
||||
|
||||
|
||||
function next_result() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
class Min_Driver extends Min_SQL {
|
||||
|
||||
function insertUpdate($table, $rows, $primary) {
|
||||
$values = array();
|
||||
foreach ($rows as $set) {
|
||||
$values[] = "(" . implode(", ", $set) . ")";
|
||||
}
|
||||
return queries("REPLACE INTO " . table($table) . " (" . implode(", ", array_keys(reset($rows))) . ") VALUES\n" . implode(",\n", $values));
|
||||
}
|
||||
|
||||
function tableHelp($name) {
|
||||
if ($name == "sqlite_sequence") {
|
||||
return "fileformat2.html#seqtab";
|
||||
}
|
||||
if ($name == "sqlite_master") {
|
||||
return "fileformat2.html#$name";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function idf_escape($idf) {
|
||||
return '"' . str_replace('"', '""', $idf) . '"';
|
||||
}
|
||||
@@ -212,6 +240,11 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
|
||||
function connect() {
|
||||
global $adminer;
|
||||
list(, , $password) = $adminer->credentials();
|
||||
if ($password != "") {
|
||||
return lang('Database does not support password.');
|
||||
}
|
||||
return new Min_DB;
|
||||
}
|
||||
|
||||
@@ -223,9 +256,12 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
return " $query$where" . ($limit !== null ? $separator . "LIMIT $limit" . ($offset ? " OFFSET $offset" : "") : "");
|
||||
}
|
||||
|
||||
function limit1($query, $where) {
|
||||
function limit1($table, $query, $where, $separator = "\n") {
|
||||
global $connection;
|
||||
return ($connection->result("SELECT sqlite_compileoption_used('ENABLE_UPDATE_DELETE_LIMIT')") ? limit($query, $where, 1) : " $query$where");
|
||||
return (preg_match('~^INTO~', $query) || $connection->result("SELECT sqlite_compileoption_used('ENABLE_UPDATE_DELETE_LIMIT')")
|
||||
? limit($query, $where, 1, 0, $separator)
|
||||
: " $query WHERE rowid = (SELECT rowid FROM " . table($table) . $where . $separator . "LIMIT 1)" //! use primary key in tables with WITHOUT rowid
|
||||
);
|
||||
}
|
||||
|
||||
function db_collation($db, $collations) {
|
||||
@@ -242,7 +278,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
|
||||
function tables_list() {
|
||||
return get_key_vals("SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') ORDER BY (name = 'sqlite_sequence'), name", 1);
|
||||
return get_key_vals("SELECT name, type FROM sqlite_master WHERE type IN ('table', 'view') ORDER BY (name = 'sqlite_sequence'), name");
|
||||
}
|
||||
|
||||
function count_tables($databases) {
|
||||
@@ -252,9 +288,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
function table_status($name = "") {
|
||||
global $connection;
|
||||
$return = array();
|
||||
foreach (get_rows("SELECT name AS Name, type AS Engine FROM sqlite_master WHERE type IN ('table', 'view')" . ($name != "" ? " AND name = " . q($name) : "")) as $row) {
|
||||
$row["Oid"] = "t";
|
||||
$row["Auto_increment"] = "";
|
||||
foreach (get_rows("SELECT name AS Name, type AS Engine, 'rowid' AS Oid, '' AS Auto_increment FROM sqlite_master WHERE type IN ('table', 'view') " . ($name != "" ? "AND name = " . q($name) : "ORDER BY name")) as $row) {
|
||||
$row["Rows"] = $connection->result("SELECT COUNT(*) FROM " . idf_escape($row["Name"]));
|
||||
$return[$row["Name"]] = $row;
|
||||
}
|
||||
@@ -267,51 +301,93 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
function is_view($table_status) {
|
||||
return $table_status["Engine"] == "view";
|
||||
}
|
||||
|
||||
|
||||
function fk_support($table_status) {
|
||||
global $connection;
|
||||
return !$connection->result("SELECT sqlite_compileoption_used('OMIT_FOREIGN_KEY')");
|
||||
}
|
||||
|
||||
function fields($table) {
|
||||
global $connection;
|
||||
$return = array();
|
||||
$primary = "";
|
||||
foreach (get_rows("PRAGMA table_info(" . table($table) . ")") as $row) {
|
||||
$name = $row["name"];
|
||||
$type = strtolower($row["type"]);
|
||||
$default = $row["dflt_value"];
|
||||
$return[$row["name"]] = array(
|
||||
"field" => $row["name"],
|
||||
"type" => (eregi("int", $type) ? "integer" : (eregi("char|clob|text", $type) ? "text" : (eregi("blob", $type) ? "blob" : (eregi("real|floa|doub", $type) ? "real" : "numeric")))),
|
||||
$return[$name] = array(
|
||||
"field" => $name,
|
||||
"type" => (preg_match('~int~i', $type) ? "integer" : (preg_match('~char|clob|text~i', $type) ? "text" : (preg_match('~blob~i', $type) ? "blob" : (preg_match('~real|floa|doub~i', $type) ? "real" : "numeric")))),
|
||||
"full_type" => $type,
|
||||
"default" => (ereg("'(.*)'", $default, $match) ? str_replace("''", "'", $match[1]) : ($default == "NULL" ? null : $default)),
|
||||
"default" => (preg_match("~'(.*)'~", $default, $match) ? str_replace("''", "'", $match[1]) : ($default == "NULL" ? null : $default)),
|
||||
"null" => !$row["notnull"],
|
||||
"auto_increment" => eregi('^integer$', $type) && $row["pk"], //! possible false positive
|
||||
"privileges" => array("select" => 1, "insert" => 1, "update" => 1),
|
||||
"primary" => $row["pk"],
|
||||
);
|
||||
if ($row["pk"]) {
|
||||
if ($primary != "") {
|
||||
$return[$primary]["auto_increment"] = false;
|
||||
} elseif (preg_match('~^integer$~i', $type)) {
|
||||
$return[$name]["auto_increment"] = true;
|
||||
}
|
||||
$primary = $name;
|
||||
}
|
||||
}
|
||||
$sql = $connection->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q($table));
|
||||
preg_match_all('~(("[^"]*+")+|[a-z0-9_]+)\s+text\s+COLLATE\s+(\'[^\']+\'|\S+)~i', $sql, $matches, PREG_SET_ORDER);
|
||||
foreach ($matches as $match) {
|
||||
$name = str_replace('""', '"', preg_replace('~^"|"$~', '', $match[1]));
|
||||
if ($return[$name]) {
|
||||
$return[$name]["collation"] = trim($match[3], "'");
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
function indexes($table, $connection2 = null) {
|
||||
global $connection;
|
||||
if (!is_object($connection2)) {
|
||||
$connection2 = $connection;
|
||||
}
|
||||
$return = array();
|
||||
$primary = array();
|
||||
foreach (fields($table) as $field) {
|
||||
if ($field["primary"]) {
|
||||
$primary[] = $field["field"];
|
||||
$sql = $connection2->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q($table));
|
||||
if (preg_match('~\bPRIMARY\s+KEY\s*\((([^)"]+|"[^"]*"|`[^`]*`)++)~i', $sql, $match)) {
|
||||
$return[""] = array("type" => "PRIMARY", "columns" => array(), "lengths" => array(), "descs" => array());
|
||||
preg_match_all('~((("[^"]*+")+|(?:`[^`]*+`)+)|(\S+))(\s+(ASC|DESC))?(,\s*|$)~i', $match[1], $matches, PREG_SET_ORDER);
|
||||
foreach ($matches as $match) {
|
||||
$return[""]["columns"][] = idf_unescape($match[2]) . $match[4];
|
||||
$return[""]["descs"][] = (preg_match('~DESC~i', $match[5]) ? '1' : null);
|
||||
}
|
||||
}
|
||||
if ($primary) {
|
||||
$return[""] = array("type" => "PRIMARY", "columns" => $primary, "lengths" => array());
|
||||
}
|
||||
foreach (get_rows("PRAGMA index_list(" . table($table) . ")") as $row) {
|
||||
if (!ereg("^sqlite_", $row["name"])) {
|
||||
$return[$row["name"]]["type"] = ($row["unique"] ? "UNIQUE" : "INDEX");
|
||||
$return[$row["name"]]["lengths"] = array();
|
||||
foreach (get_rows("PRAGMA index_info(" . idf_escape($row["name"]) . ")") as $row1) {
|
||||
$return[$row["name"]]["columns"][] = $row1["name"];
|
||||
if (!$return) {
|
||||
foreach (fields($table) as $name => $field) {
|
||||
if ($field["primary"]) {
|
||||
$return[""] = array("type" => "PRIMARY", "columns" => array($name), "lengths" => array(), "descs" => array(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
$sqls = get_key_vals("SELECT name, sql FROM sqlite_master WHERE type = 'index' AND tbl_name = " . q($table), $connection2);
|
||||
foreach (get_rows("PRAGMA index_list(" . table($table) . ")", $connection2) as $row) {
|
||||
$name = $row["name"];
|
||||
$index = array("type" => ($row["unique"] ? "UNIQUE" : "INDEX"));
|
||||
$index["lengths"] = array();
|
||||
$index["descs"] = array();
|
||||
foreach (get_rows("PRAGMA index_info(" . idf_escape($name) . ")", $connection2) as $row1) {
|
||||
$index["columns"][] = $row1["name"];
|
||||
$index["descs"][] = null;
|
||||
}
|
||||
if (preg_match('~^CREATE( UNIQUE)? INDEX ' . preg_quote(idf_escape($name) . ' ON ' . idf_escape($table), '~') . ' \((.*)\)$~i', $sqls[$name], $regs)) {
|
||||
preg_match_all('/("[^"]*+")+( DESC)?/', $regs[2], $matches);
|
||||
foreach ($matches[2] as $key => $val) {
|
||||
if ($val) {
|
||||
$index["descs"][$key] = '1';
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$return[""] || $index["type"] != "UNIQUE" || $index["columns"] != $return[""]["columns"] || $index["descs"] != $return[""]["descs"] || !preg_match("~^sqlite_~", $name)) {
|
||||
$return[$name] = $index;
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
@@ -331,7 +407,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
|
||||
function view($name) {
|
||||
global $connection;
|
||||
return array("select" => preg_replace('~^(?:[^`"[]+|`[^`]*`|"[^"]*")* AS\\s+~iU', '', $connection->result("SELECT sql FROM sqlite_master WHERE name = " . q($name)))); //! identifiers may be inside []
|
||||
return array("select" => preg_replace('~^(?:[^`"[]+|`[^`]*`|"[^"]*")* AS\s+~iU', '', $connection->result("SELECT sql FROM sqlite_master WHERE name = " . q($name)))); //! identifiers may be inside []
|
||||
}
|
||||
|
||||
function collations() {
|
||||
@@ -346,11 +422,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
global $connection;
|
||||
return h($connection->error);
|
||||
}
|
||||
|
||||
function exact_value($val) {
|
||||
return q($val);
|
||||
}
|
||||
|
||||
|
||||
function check_sqlite_name($name) {
|
||||
// avoid creating PHP files on unsecured servers
|
||||
global $connection;
|
||||
@@ -361,7 +433,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function create_database($db, $collation) {
|
||||
global $connection;
|
||||
if (file_exists($db)) {
|
||||
@@ -371,16 +443,21 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
if (!check_sqlite_name($db)) {
|
||||
return false;
|
||||
}
|
||||
$link = new Min_SQLite($db); //! exception handler
|
||||
try {
|
||||
$link = new Min_SQLite($db);
|
||||
} catch (Exception $ex) {
|
||||
$connection->error = $ex->getMessage();
|
||||
return false;
|
||||
}
|
||||
$link->query('PRAGMA encoding = "UTF-8"');
|
||||
$link->query('CREATE TABLE adminer (i)'); // otherwise creates empty file
|
||||
$link->query('DROP TABLE adminer');
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function drop_databases($databases) {
|
||||
global $connection;
|
||||
$connection->Min_SQLite(":memory:"); // to unlock file, doesn't work in PDO on Windows
|
||||
$connection->__construct(":memory:"); // to unlock file, doesn't work in PDO on Windows
|
||||
foreach ($databases as $db) {
|
||||
if (!@unlink($db)) {
|
||||
$connection->error = lang('File exists.');
|
||||
@@ -389,22 +466,23 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function rename_database($name, $collation) {
|
||||
global $connection;
|
||||
if (!check_sqlite_name($name)) {
|
||||
return false;
|
||||
}
|
||||
$connection->Min_SQLite(":memory:");
|
||||
$connection->__construct(":memory:");
|
||||
$connection->error = lang('File exists.');
|
||||
return @rename(DB, $name);
|
||||
}
|
||||
|
||||
|
||||
function auto_increment() {
|
||||
return " PRIMARY KEY" . (DRIVER == "sqlite" ? " AUTOINCREMENT" : "");
|
||||
}
|
||||
|
||||
|
||||
function alter_table($table, $name, $fields, $foreign, $comment, $engine, $collation, $auto_increment, $partitioning) {
|
||||
global $connection;
|
||||
$use_all_fields = ($table == "" || $foreign);
|
||||
foreach ($fields as $field) {
|
||||
if ($field[0] != "" || !$field[1] || $field[2]) {
|
||||
@@ -414,81 +492,15 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
$alter = array();
|
||||
$originals = array();
|
||||
$primary_key = false;
|
||||
foreach ($fields as $field) {
|
||||
if ($field[1]) {
|
||||
if ($field[1][6]) {
|
||||
$primary_key = true;
|
||||
}
|
||||
$alter[] = ($use_all_fields ? " " : "ADD ") . implode($field[1]);
|
||||
$alter[] = ($use_all_fields ? $field[1] : "ADD " . implode($field[1]));
|
||||
if ($field[0] != "") {
|
||||
$originals[$field[0]] = $field[1][0];
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($use_all_fields) {
|
||||
if ($table != "") {
|
||||
queries("BEGIN");
|
||||
foreach (foreign_keys($table) as $foreign_key) {
|
||||
$columns = array();
|
||||
foreach ($foreign_key["source"] as $column) {
|
||||
if (!$originals[$column]) {
|
||||
continue 2;
|
||||
}
|
||||
$columns[] = $originals[$column];
|
||||
}
|
||||
$foreign[] = " FOREIGN KEY (" . implode(", ", $columns) . ") REFERENCES "
|
||||
. table($foreign_key["table"])
|
||||
. " (" . implode(", ", array_map('idf_escape', $foreign_key["target"]))
|
||||
. ") ON DELETE $foreign_key[on_delete] ON UPDATE $foreign_key[on_update]"
|
||||
;
|
||||
}
|
||||
$indexes = array();
|
||||
foreach (indexes($table) as $key_name => $index) {
|
||||
$columns = array();
|
||||
foreach ($index["columns"] as $column) {
|
||||
if (!$originals[$column]) {
|
||||
continue 2;
|
||||
}
|
||||
$columns[] = $originals[$column];
|
||||
}
|
||||
$columns = "(" . implode(", ", $columns) . ")";
|
||||
if ($index["type"] != "PRIMARY") {
|
||||
$indexes[] = array($index["type"], $key_name, $columns);
|
||||
} elseif (!$primary_key) {
|
||||
$foreign[] = " PRIMARY KEY $columns";
|
||||
}
|
||||
}
|
||||
}
|
||||
$alter = array_merge($alter, $foreign);
|
||||
if (!queries("CREATE TABLE " . table($table != "" ? "adminer_$name" : $name) . " (\n" . implode(",\n", $alter) . "\n)")) {
|
||||
// implicit ROLLBACK to not overwrite $connection->error
|
||||
return false;
|
||||
}
|
||||
if ($table != "") {
|
||||
if ($originals && !queries("INSERT INTO " . table("adminer_$name") . " (" . implode(", ", $originals) . ") SELECT " . implode(", ", array_map('idf_escape', array_keys($originals))) . " FROM " . table($table))) {
|
||||
return false;
|
||||
}
|
||||
$triggers = array();
|
||||
foreach (triggers($table) as $trigger_name => $timing_event) {
|
||||
$trigger = trigger($trigger_name);
|
||||
$triggers[] = "CREATE TRIGGER " . idf_escape($trigger_name) . " " . implode(" ", $timing_event) . " ON " . table($name) . "\n$trigger[Statement]";
|
||||
}
|
||||
if (!queries("DROP TABLE " . table($table))) { // drop before creating indexes and triggers to allow using old names
|
||||
return false;
|
||||
}
|
||||
queries("ALTER TABLE " . table("adminer_$name") . " RENAME TO " . table($name));
|
||||
if (!alter_indexes($name, $indexes)) {
|
||||
return false;
|
||||
}
|
||||
foreach ($triggers as $trigger) {
|
||||
if (!queries($trigger)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
queries("COMMIT");
|
||||
}
|
||||
} else {
|
||||
if (!$use_all_fields) {
|
||||
foreach ($alter as $val) {
|
||||
if (!queries("ALTER TABLE " . table($table) . " $val")) {
|
||||
return false;
|
||||
@@ -497,134 +509,252 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
if ($table != $name && !queries("ALTER TABLE " . table($table) . " RENAME TO " . table($name))) {
|
||||
return false;
|
||||
}
|
||||
} elseif (!recreate_table($table, $name, $alter, $originals, $foreign, $auto_increment)) {
|
||||
return false;
|
||||
}
|
||||
if ($auto_increment) {
|
||||
queries("BEGIN");
|
||||
queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error
|
||||
if (!$connection->affected_rows) {
|
||||
queries("INSERT INTO sqlite_sequence (name, seq) VALUES (" . q($name) . ", $auto_increment)");
|
||||
}
|
||||
queries("COMMIT");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function recreate_table($table, $name, $fields, $originals, $foreign, $auto_increment, $indexes = array()) {
|
||||
global $connection;
|
||||
if ($table != "") {
|
||||
if (!$fields) {
|
||||
foreach (fields($table) as $key => $field) {
|
||||
if ($indexes) {
|
||||
$field["auto_increment"] = 0;
|
||||
}
|
||||
$fields[] = process_field($field, $field);
|
||||
$originals[$key] = idf_escape($key);
|
||||
}
|
||||
}
|
||||
$primary_key = false;
|
||||
foreach ($fields as $field) {
|
||||
if ($field[6]) {
|
||||
$primary_key = true;
|
||||
}
|
||||
}
|
||||
$drop_indexes = array();
|
||||
foreach ($indexes as $key => $val) {
|
||||
if ($val[2] == "DROP") {
|
||||
$drop_indexes[$val[1]] = true;
|
||||
unset($indexes[$key]);
|
||||
}
|
||||
}
|
||||
foreach (indexes($table) as $key_name => $index) {
|
||||
$columns = array();
|
||||
foreach ($index["columns"] as $key => $column) {
|
||||
if (!$originals[$column]) {
|
||||
continue 2;
|
||||
}
|
||||
$columns[] = $originals[$column] . ($index["descs"][$key] ? " DESC" : "");
|
||||
}
|
||||
if (!$drop_indexes[$key_name]) {
|
||||
if ($index["type"] != "PRIMARY" || !$primary_key) {
|
||||
$indexes[] = array($index["type"], $key_name, $columns);
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($indexes as $key => $val) {
|
||||
if ($val[0] == "PRIMARY") {
|
||||
unset($indexes[$key]);
|
||||
$foreign[] = " PRIMARY KEY (" . implode(", ", $val[2]) . ")";
|
||||
}
|
||||
}
|
||||
foreach (foreign_keys($table) as $key_name => $foreign_key) {
|
||||
foreach ($foreign_key["source"] as $key => $column) {
|
||||
if (!$originals[$column]) {
|
||||
continue 2;
|
||||
}
|
||||
$foreign_key["source"][$key] = idf_unescape($originals[$column]);
|
||||
}
|
||||
if (!isset($foreign[" $key_name"])) {
|
||||
$foreign[] = " " . format_foreign_key($foreign_key);
|
||||
}
|
||||
}
|
||||
queries("BEGIN");
|
||||
}
|
||||
foreach ($fields as $key => $field) {
|
||||
$fields[$key] = " " . implode($field);
|
||||
}
|
||||
$fields = array_merge($fields, array_filter($foreign));
|
||||
$temp_name = ($table == $name ? "adminer_$name" : $name);
|
||||
if (!queries("CREATE TABLE " . table($temp_name) . " (\n" . implode(",\n", $fields) . "\n)")) {
|
||||
// implicit ROLLBACK to not overwrite $connection->error
|
||||
return false;
|
||||
}
|
||||
if ($table != "") {
|
||||
if ($originals && !queries("INSERT INTO " . table($temp_name) . " (" . implode(", ", $originals) . ") SELECT " . implode(", ", array_map('idf_escape', array_keys($originals))) . " FROM " . table($table))) {
|
||||
return false;
|
||||
}
|
||||
$triggers = array();
|
||||
foreach (triggers($table) as $trigger_name => $timing_event) {
|
||||
$trigger = trigger($trigger_name);
|
||||
$triggers[] = "CREATE TRIGGER " . idf_escape($trigger_name) . " " . implode(" ", $timing_event) . " ON " . table($name) . "\n$trigger[Statement]";
|
||||
}
|
||||
$auto_increment = $auto_increment ? 0 : $connection->result("SELECT seq FROM sqlite_sequence WHERE name = " . q($table)); // if $auto_increment is set then it will be updated later
|
||||
if (!queries("DROP TABLE " . table($table)) // drop before creating indexes and triggers to allow using old names
|
||||
|| ($table == $name && !queries("ALTER TABLE " . table($temp_name) . " RENAME TO " . table($name)))
|
||||
|| !alter_indexes($name, $indexes)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if ($auto_increment) {
|
||||
queries("UPDATE sqlite_sequence SET seq = $auto_increment WHERE name = " . q($name)); // ignores error
|
||||
}
|
||||
foreach ($triggers as $trigger) {
|
||||
if (!queries($trigger)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
queries("COMMIT");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function index_sql($table, $type, $name, $columns) {
|
||||
return "CREATE $type " . ($type != "INDEX" ? "INDEX " : "")
|
||||
. idf_escape($name != "" ? $name : uniqid($table . "_"))
|
||||
. " ON " . table($table)
|
||||
. " $columns"
|
||||
;
|
||||
}
|
||||
|
||||
function alter_indexes($table, $alter) {
|
||||
foreach ($alter as $val) {
|
||||
foreach ($alter as $primary) {
|
||||
if ($primary[0] == "PRIMARY") {
|
||||
return recreate_table($table, $table, array(), array(), array(), 0, $alter);
|
||||
}
|
||||
}
|
||||
foreach (array_reverse($alter) as $val) {
|
||||
if (!queries($val[2] == "DROP"
|
||||
? "DROP INDEX " . idf_escape($val[1])
|
||||
: "CREATE $val[0] " . ($val[0] != "INDEX" ? "INDEX " : "") . idf_escape($val[1] != "" ? $val[1] : uniqid($table . "_")) . " ON " . table($table) . " $val[2]"
|
||||
: index_sql($table, $val[0], $val[1], "(" . implode(", ", $val[2]) . ")")
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
function truncate_tables($tables) {
|
||||
return apply_queries("DELETE FROM", $tables);
|
||||
}
|
||||
|
||||
|
||||
function drop_views($views) {
|
||||
return apply_queries("DROP VIEW", $views);
|
||||
}
|
||||
|
||||
|
||||
function drop_tables($tables) {
|
||||
return apply_queries("DROP TABLE", $tables);
|
||||
}
|
||||
|
||||
|
||||
function move_tables($tables, $views, $target) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
function trigger($name) {
|
||||
global $connection;
|
||||
if ($name == "") {
|
||||
return array("Statement" => "BEGIN\n\t;\nEND");
|
||||
}
|
||||
preg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*([a-z]+)\\s+([a-z]+)\\s+ON\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*(?:FOR\\s*EACH\\s*ROW\\s)?(.*)~is', $connection->result("SELECT sql FROM sqlite_master WHERE name = " . q($name)), $match);
|
||||
return array("Timing" => strtoupper($match[1]), "Event" => strtoupper($match[2]), "Trigger" => $name, "Statement" => $match[3]);
|
||||
$idf = '(?:[^`"\s]+|`[^`]*`|"[^"]*")+';
|
||||
$trigger_options = trigger_options();
|
||||
preg_match(
|
||||
"~^CREATE\\s+TRIGGER\\s*$idf\\s*(" . implode("|", $trigger_options["Timing"]) . ")\\s+([a-z]+)(?:\\s+OF\\s+($idf))?\\s+ON\\s*$idf\\s*(?:FOR\\s+EACH\\s+ROW\\s)?(.*)~is",
|
||||
$connection->result("SELECT sql FROM sqlite_master WHERE type = 'trigger' AND name = " . q($name)),
|
||||
$match
|
||||
);
|
||||
$of = $match[3];
|
||||
return array(
|
||||
"Timing" => strtoupper($match[1]),
|
||||
"Event" => strtoupper($match[2]) . ($of ? " OF" : ""),
|
||||
"Of" => idf_unescape($of),
|
||||
"Trigger" => $name,
|
||||
"Statement" => $match[4],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function triggers($table) {
|
||||
$return = array();
|
||||
$trigger_options = trigger_options();
|
||||
foreach (get_rows("SELECT * FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)) as $row) {
|
||||
preg_match('~^CREATE\\s+TRIGGER\\s*(?:[^`"\\s]+|`[^`]*`|"[^"]*")+\\s*([a-z]+)\\s*([a-z]+)~i', $row["sql"], $match);
|
||||
preg_match('~^CREATE\s+TRIGGER\s*(?:[^`"\s]+|`[^`]*`|"[^"]*")+\s*(' . implode("|", $trigger_options["Timing"]) . ')\s*(.*?)\s+ON\b~i', $row["sql"], $match);
|
||||
$return[$row["name"]] = array($match[1], $match[2]);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function trigger_options() {
|
||||
return array(
|
||||
"Timing" => array("BEFORE", "AFTER", "INSTEAD OF"),
|
||||
"Event" => array("INSERT", "UPDATE", "UPDATE OF", "DELETE"),
|
||||
"Type" => array("FOR EACH ROW"),
|
||||
);
|
||||
}
|
||||
|
||||
function routine($name, $type) {
|
||||
// not supported by SQLite
|
||||
}
|
||||
|
||||
function routines() {
|
||||
// not supported by SQLite
|
||||
}
|
||||
|
||||
function routine_languages() {
|
||||
// not supported by SQLite
|
||||
}
|
||||
|
||||
|
||||
function begin() {
|
||||
return queries("BEGIN");
|
||||
}
|
||||
|
||||
function insert_into($table, $set) {
|
||||
return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : "DEFAULT VALUES"));
|
||||
}
|
||||
|
||||
function insert_update($table, $set, $primary) {
|
||||
return queries("REPLACE INTO " . table($table) . " (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ")");
|
||||
}
|
||||
|
||||
|
||||
function last_id() {
|
||||
global $connection;
|
||||
return $connection->result("SELECT LAST_INSERT_ROWID()");
|
||||
}
|
||||
|
||||
|
||||
function explain($connection, $query) {
|
||||
return $connection->query("EXPLAIN $query");
|
||||
return $connection->query("EXPLAIN QUERY PLAN $query");
|
||||
}
|
||||
|
||||
|
||||
function found_rows($table_status, $where) {
|
||||
}
|
||||
|
||||
|
||||
function types() {
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
function schemas() {
|
||||
return array();
|
||||
}
|
||||
|
||||
|
||||
function get_schema() {
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
function set_schema($scheme) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function create_sql($table, $auto_increment) {
|
||||
|
||||
function create_sql($table, $auto_increment, $style) {
|
||||
global $connection;
|
||||
return $connection->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . q($table));
|
||||
$return = $connection->result("SELECT sql FROM sqlite_master WHERE type IN ('table', 'view') AND name = " . q($table));
|
||||
foreach (indexes($table) as $name => $index) {
|
||||
if ($name == '') {
|
||||
continue;
|
||||
}
|
||||
$return .= ";\n\n" . index_sql($table, $index['type'], $name, "(" . implode(", ", array_map('idf_escape', $index['columns'])) . ")");
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function truncate_sql($table) {
|
||||
return "DELETE FROM " . table($table);
|
||||
}
|
||||
|
||||
|
||||
function use_sql($database) {
|
||||
}
|
||||
|
||||
function trigger_sql($table, $style) {
|
||||
|
||||
function trigger_sql($table) {
|
||||
return implode(get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND tbl_name = " . q($table)));
|
||||
}
|
||||
|
||||
|
||||
function show_variables() {
|
||||
global $connection;
|
||||
$return = array();
|
||||
@@ -633,7 +763,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function show_status() {
|
||||
$return = array();
|
||||
foreach (get_vals("PRAGMA compile_options") as $option) {
|
||||
@@ -642,32 +772,38 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) {
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function convert_field($field) {
|
||||
}
|
||||
|
||||
|
||||
function unconvert_field($field, $return) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
|
||||
function support($feature) {
|
||||
return ereg('^(view|trigger|variables|status|dump|move_col|drop_col)$', $feature);
|
||||
return preg_match('~^(columns|database|drop_col|dump|indexes|descidx|move_col|sql|status|table|trigger|variables|view|view_trigger)$~', $feature);
|
||||
}
|
||||
|
||||
function driver_config() {
|
||||
$types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0);
|
||||
return array(
|
||||
'possible_drivers' => array((isset($_GET["sqlite"]) ? "SQLite3" : "SQLite"), "PDO_SQLite"),
|
||||
'jush' => "sqlite",
|
||||
'types' => $types,
|
||||
'structured_types' => array_keys($types),
|
||||
'unsigned' => array(),
|
||||
'operators' => array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", "SQL"), // REGEXP can be user defined function
|
||||
'functions' => array("hex", "length", "lower", "round", "unixepoch", "upper"),
|
||||
'grouping' => array("avg", "count", "count distinct", "group_concat", "max", "min", "sum"),
|
||||
'edit_functions' => array(
|
||||
array(
|
||||
// "text" => "date('now')/time('now')/datetime('now')",
|
||||
), array(
|
||||
"integer|real|numeric" => "+/-",
|
||||
// "text" => "date/time/datetime",
|
||||
"text" => "||",
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
$jush = "sqlite";
|
||||
$types = array("integer" => 0, "real" => 0, "numeric" => 0, "text" => 0, "blob" => 0);
|
||||
$structured_types = array_keys($types);
|
||||
$unsigned = array();
|
||||
$operators = array("=", "<", ">", "<=", ">=", "!=", "LIKE", "LIKE %%", "IN", "IS NULL", "NOT LIKE", "NOT IN", "IS NOT NULL", ""); // REGEXP can be user defined function
|
||||
$functions = array("hex", "length", "lower", "round", "unixepoch", "upper");
|
||||
$grouping = array("avg", "count", "count distinct", "group_concat", "max", "min", "sum");
|
||||
$edit_functions = array(
|
||||
array(
|
||||
// "text" => "date('now')/time('now')/datetime('now')",
|
||||
), array(
|
||||
"integer|real|numeric" => "+/-",
|
||||
// "text" => "date/time/datetime",
|
||||
"text" => "||",
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,25 +1,32 @@
|
||||
<?php
|
||||
$TABLE = $_GET["dump"];
|
||||
|
||||
if ($_POST) {
|
||||
if ($_POST && !$error) {
|
||||
$cookie = "";
|
||||
foreach (array("output", "format", "db_style", "routines", "events", "table_style", "auto_increment", "triggers", "data_style") as $key) {
|
||||
$cookie .= "&$key=" . urlencode($_POST[$key]);
|
||||
}
|
||||
cookie("adminer_export", substr($cookie, 1));
|
||||
$ext = dump_headers(($TABLE != "" ? $TABLE : DB), (DB == "" || count((array) $_POST["tables"] + (array) $_POST["data"]) > 1));
|
||||
$is_sql = ($_POST["format"] == "sql");
|
||||
if ($is_sql) {
|
||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " dump
|
||||
$tables = array_flip((array) $_POST["tables"]) + array_flip((array) $_POST["data"]);
|
||||
$ext = dump_headers(
|
||||
(count($tables) == 1 ? key($tables) : DB),
|
||||
(DB == "" || count($tables) > 1));
|
||||
$is_sql = preg_match('~sql~', $_POST["format"]);
|
||||
|
||||
" . ($jush != "sql" ? "" : "SET NAMES utf8;
|
||||
" . ($_POST["data_style"] ? "SET foreign_key_checks = 0;
|
||||
SET time_zone = " . q($connection->result("SELECT @@time_zone")) . ";
|
||||
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
if ($is_sql) {
|
||||
echo "-- Adminer $VERSION " . $drivers[DRIVER] . " " . str_replace("\n", " ", $connection->server_info) . " dump\n\n";
|
||||
if ($jush == "sql") {
|
||||
echo "SET NAMES utf8;
|
||||
SET time_zone = '+00:00';
|
||||
SET foreign_key_checks = 0;
|
||||
" . ($_POST["data_style"] ? "SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
" : "") . "
|
||||
");
|
||||
";
|
||||
$connection->query("SET time_zone = '+00:00'");
|
||||
$connection->query("SET sql_mode = ''");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$style = $_POST["db_style"];
|
||||
$databases = array(DB);
|
||||
if (DB == "") {
|
||||
@@ -28,135 +35,114 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
|
||||
$databases = explode("\n", rtrim(str_replace("\r", "", $databases), "\n"));
|
||||
}
|
||||
}
|
||||
|
||||
foreach ((array) $databases as $db) {
|
||||
$adminer->dumpDatabase($db);
|
||||
if ($connection->select_db($db)) {
|
||||
if ($is_sql && ereg('CREATE', $style) && ($create = $connection->result("SHOW CREATE DATABASE " . idf_escape($db), 1))) {
|
||||
if ($is_sql && preg_match('~CREATE~', $style) && ($create = $connection->result("SHOW CREATE DATABASE " . idf_escape($db), 1))) {
|
||||
set_utf8mb4($create);
|
||||
if ($style == "DROP+CREATE") {
|
||||
echo "DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n";
|
||||
}
|
||||
echo ($style == "CREATE+ALTER" ? preg_replace('~^CREATE DATABASE ~', '\\0IF NOT EXISTS ', $create) : $create) . ";\n";
|
||||
echo "$create;\n";
|
||||
}
|
||||
if ($is_sql) {
|
||||
if ($style) {
|
||||
echo use_sql($db) . ";\n\n";
|
||||
}
|
||||
if (in_array("CREATE+ALTER", array($style, $_POST["table_style"]))) {
|
||||
echo "SET @adminer_alter = '';\n\n";
|
||||
}
|
||||
$out = "";
|
||||
|
||||
if ($_POST["routines"]) {
|
||||
foreach (array("FUNCTION", "PROCEDURE") as $routine) {
|
||||
foreach (get_rows("SHOW $routine STATUS WHERE Db = " . q($db), null, "-- ") as $row) {
|
||||
$out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
|
||||
. remove_definer($connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2)) . ";;\n\n";
|
||||
$create = remove_definer($connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2));
|
||||
set_utf8mb4($create);
|
||||
$out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") . "$create;;\n\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($_POST["events"]) {
|
||||
foreach (get_rows("SHOW EVENTS", null, "-- ") as $row) {
|
||||
$out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "")
|
||||
. remove_definer($connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3)) . ";;\n\n";
|
||||
$create = remove_definer($connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3));
|
||||
set_utf8mb4($create);
|
||||
$out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") . "$create;;\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
if ($out) {
|
||||
echo "DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if ($_POST["table_style"] || $_POST["data_style"]) {
|
||||
$views = array();
|
||||
foreach (table_status() as $table_status) {
|
||||
$table = (DB == "" || in_array($table_status["Name"], (array) $_POST["tables"]));
|
||||
$data = (DB == "" || in_array($table_status["Name"], (array) $_POST["data"]));
|
||||
foreach (table_status('', true) as $name => $table_status) {
|
||||
$table = (DB == "" || in_array($name, (array) $_POST["tables"]));
|
||||
$data = (DB == "" || in_array($name, (array) $_POST["data"]));
|
||||
if ($table || $data) {
|
||||
if (!is_view($table_status)) {
|
||||
if ($ext == "tar") {
|
||||
ob_start();
|
||||
}
|
||||
$adminer->dumpTable($table_status["Name"], ($table ? $_POST["table_style"] : ""));
|
||||
if ($data) {
|
||||
$adminer->dumpData($table_status["Name"], $_POST["data_style"], "SELECT * FROM " . table($table_status["Name"]));
|
||||
}
|
||||
if ($is_sql && $_POST["triggers"] && $table && ($triggers = trigger_sql($table_status["Name"], $_POST["table_style"]))) {
|
||||
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
|
||||
}
|
||||
if ($ext == "tar") {
|
||||
echo tar_file((DB != "" ? "" : "$db/") . "$table_status[Name].csv", ob_get_clean());
|
||||
} elseif ($is_sql) {
|
||||
echo "\n";
|
||||
}
|
||||
if ($ext == "tar") {
|
||||
$tmp_file = new TmpFile;
|
||||
ob_start(array($tmp_file, 'write'), 1e5);
|
||||
}
|
||||
|
||||
$adminer->dumpTable($name, ($table ? $_POST["table_style"] : ""), (is_view($table_status) ? 2 : 0));
|
||||
if (is_view($table_status)) {
|
||||
$views[] = $name;
|
||||
} elseif ($data) {
|
||||
$fields = fields($name);
|
||||
$adminer->dumpData($name, $_POST["data_style"], "SELECT *" . convert_fields($fields, $fields) . " FROM " . table($name));
|
||||
}
|
||||
if ($is_sql && $_POST["triggers"] && $table && ($triggers = trigger_sql($name))) {
|
||||
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
|
||||
}
|
||||
|
||||
if ($ext == "tar") {
|
||||
ob_end_flush();
|
||||
tar_file((DB != "" ? "" : "$db/") . "$name.csv", $tmp_file);
|
||||
} elseif ($is_sql) {
|
||||
$views[] = $table_status["Name"];
|
||||
echo "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($views as $view) {
|
||||
$adminer->dumpTable($view, $_POST["table_style"], true);
|
||||
|
||||
// add FKs after creating tables (except in MySQL which uses SET FOREIGN_KEY_CHECKS=0)
|
||||
if (function_exists('foreign_keys_sql')) {
|
||||
foreach (table_status('', true) as $name => $table_status) {
|
||||
$table = (DB == "" || in_array($name, (array) $_POST["tables"]));
|
||||
if ($table && !is_view($table_status)) {
|
||||
echo foreign_keys_sql($name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($views as $view) {
|
||||
$adminer->dumpTable($view, $_POST["table_style"], 1);
|
||||
}
|
||||
|
||||
if ($ext == "tar") {
|
||||
echo pack("x512");
|
||||
}
|
||||
}
|
||||
|
||||
if ($style == "CREATE+ALTER" && $is_sql) {
|
||||
// drop old tables
|
||||
$query = "SELECT TABLE_NAME, ENGINE, TABLE_COLLATION, TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()";
|
||||
echo "DELIMITER ;;
|
||||
CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN
|
||||
DECLARE _table_name, _engine, _table_collation varchar(64);
|
||||
DECLARE _table_comment varchar(64);
|
||||
DECLARE done bool DEFAULT 0;
|
||||
DECLARE tables CURSOR FOR $query;
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
|
||||
OPEN tables;
|
||||
REPEAT
|
||||
FETCH tables INTO _table_name, _engine, _table_collation, _table_comment;
|
||||
IF NOT done THEN
|
||||
CASE _table_name";
|
||||
foreach (get_rows($query) as $row) {
|
||||
$comment = q($row["ENGINE"] == "InnoDB" ? preg_replace('~(?:(.+); )?InnoDB free: .*~', '\\1', $row["TABLE_COMMENT"]) : $row["TABLE_COMMENT"]);
|
||||
echo "
|
||||
WHEN " . q($row["TABLE_NAME"]) . " THEN
|
||||
" . (isset($row["ENGINE"]) ? "IF _engine != '$row[ENGINE]' OR _table_collation != '$row[TABLE_COLLATION]' OR _table_comment != $comment THEN
|
||||
ALTER TABLE " . idf_escape($row["TABLE_NAME"]) . " ENGINE=$row[ENGINE] COLLATE=$row[TABLE_COLLATION] COMMENT=$comment;
|
||||
END IF" : "BEGIN END") . ";";
|
||||
}
|
||||
echo "
|
||||
ELSE
|
||||
SET alter_command = CONCAT(alter_command, 'DROP TABLE `', REPLACE(_table_name, '`', '``'), '`;\\n');
|
||||
END CASE;
|
||||
END IF;
|
||||
UNTIL done END REPEAT;
|
||||
CLOSE tables;
|
||||
END;;
|
||||
DELIMITER ;
|
||||
CALL adminer_alter(@adminer_alter);
|
||||
DROP PROCEDURE adminer_alter;
|
||||
";
|
||||
}
|
||||
if (in_array("CREATE+ALTER", array($style, $_POST["table_style"])) && $is_sql) {
|
||||
echo "SELECT @adminer_alter;\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($is_sql) {
|
||||
echo "-- " . $connection->result("SELECT NOW()") . "\n";
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
page_header(lang('Export'), "", ($_GET["export"] != "" ? array("table" => $_GET["export"]) : array()), DB);
|
||||
page_header(lang('Export'), $error, ($_GET["export"] != "" ? array("table" => $_GET["export"]) : array()), h(DB));
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<table cellspacing="0">
|
||||
<table cellspacing="0" class="layout">
|
||||
<?php
|
||||
$db_style = array('', 'USE', 'DROP+CREATE', 'CREATE');
|
||||
$table_style = array('', 'DROP+CREATE', 'CREATE');
|
||||
$data_style = array('', 'TRUNCATE+INSERT', 'INSERT');
|
||||
if ($jush == "sql") {
|
||||
$db_style[] = 'CREATE+ALTER';
|
||||
$table_style[] = 'CREATE+ALTER';
|
||||
if ($jush == "sql") { //! use insertUpdate() in all drivers
|
||||
$data_style[] = 'INSERT+UPDATE';
|
||||
}
|
||||
parse_str($_COOKIE["adminer_export"], $row);
|
||||
@@ -167,53 +153,68 @@ if (!isset($row["events"])) { // backwards compatibility
|
||||
$row["routines"] = $row["events"] = ($_GET["dump"] == "");
|
||||
$row["triggers"] = $row["table_style"];
|
||||
}
|
||||
|
||||
echo "<tr><th>" . lang('Output') . "<td>" . html_select("output", $adminer->dumpOutput(), $row["output"], 0) . "\n"; // 0 - radio
|
||||
|
||||
echo "<tr><th>" . lang('Format') . "<td>" . html_select("format", $adminer->dumpFormat(), $row["format"], 0) . "\n"; // 0 - radio
|
||||
|
||||
echo ($jush == "sqlite" ? "" : "<tr><th>" . lang('Database') . "<td>" . html_select('db_style', $db_style, $row["db_style"])
|
||||
. (support("routine") ? checkbox("routines", 1, $row["routines"], lang('Routines')) : "")
|
||||
. (support("event") ? checkbox("events", 1, $row["events"], lang('Events')) : "")
|
||||
);
|
||||
|
||||
echo "<tr><th>" . lang('Tables') . "<td>" . html_select('table_style', $table_style, $row["table_style"])
|
||||
. checkbox("auto_increment", 1, $row["auto_increment"], lang('Auto Increment'))
|
||||
. (support("trigger") ? checkbox("triggers", 1, $row["triggers"], lang('Triggers')) : "")
|
||||
;
|
||||
|
||||
echo "<tr><th>" . lang('Data') . "<td>" . html_select('data_style', $data_style, $row["data_style"]);
|
||||
?>
|
||||
</table>
|
||||
<p><input type="submit" value="<?php echo lang('Export'); ?>">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
|
||||
<table cellspacing="0">
|
||||
<?php
|
||||
echo script("qsl('table').onclick = dumpClick;");
|
||||
$prefixes = array();
|
||||
if (DB != "") {
|
||||
$checked = ($TABLE != "" ? "" : " checked");
|
||||
echo "<thead><tr>";
|
||||
echo "<th style='text-align: left;'><label><input type='checkbox' id='check-tables'$checked onclick='formCheck(this, /^tables\\[/);'>" . lang('Tables') . "</label>";
|
||||
echo "<th style='text-align: right;'><label>" . lang('Data') . "<input type='checkbox' id='check-data'$checked onclick='formCheck(this, /^data\\[/);'></label>";
|
||||
echo "<th style='text-align: left;'><label class='block'><input type='checkbox' id='check-tables'$checked>" . lang('Tables') . "</label>" . script("qs('#check-tables').onclick = partial(formCheck, /^tables\\[/);", "");
|
||||
echo "<th style='text-align: right;'><label class='block'>" . lang('Data') . "<input type='checkbox' id='check-data'$checked></label>" . script("qs('#check-data').onclick = partial(formCheck, /^data\\[/);", "");
|
||||
echo "</thead>\n";
|
||||
|
||||
$views = "";
|
||||
//! defer number of rows to JavaScript
|
||||
foreach (table_status() as $table_status) {
|
||||
$name = $table_status["Name"];
|
||||
$prefix = ereg_replace("_.*", "", $name);
|
||||
$tables_list = tables_list();
|
||||
foreach ($tables_list as $name => $type) {
|
||||
$prefix = preg_replace('~_.*~', '', $name);
|
||||
$checked = ($TABLE == "" || $TABLE == (substr($TABLE, -1) == "%" ? "$prefix%" : $name)); //! % may be part of table name
|
||||
$print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "checkboxClick(event, this); formUncheck('check-tables');");
|
||||
if (is_view($table_status)) {
|
||||
$print = "<tr><td>" . checkbox("tables[]", $name, $checked, $name, "", "block");
|
||||
if ($type !== null && !preg_match('~table~i', $type)) {
|
||||
$views .= "$print\n";
|
||||
} else {
|
||||
echo "$print<td align='right'><label>" . ($table_status["Engine"] == "InnoDB" && $table_status["Rows"] ? "~ " : "") . $table_status["Rows"] . checkbox("data[]", $name, $checked, "", "checkboxClick(event, this); formUncheck('check-data');") . "</label>\n";
|
||||
echo "$print<td align='right'><label class='block'><span id='Rows-" . h($name) . "'></span>" . checkbox("data[]", $name, $checked) . "</label>\n";
|
||||
}
|
||||
$prefixes[$prefix]++;
|
||||
}
|
||||
echo $views;
|
||||
|
||||
if ($tables_list) {
|
||||
echo script("ajaxSetHtml('" . js_escape(ME) . "script=db');");
|
||||
}
|
||||
|
||||
} else {
|
||||
echo "<thead><tr><th style='text-align: left;'><label><input type='checkbox' id='check-databases'" . ($TABLE == "" ? " checked" : "") . " onclick='formCheck(this, /^databases\\[/);'>" . lang('Database') . "</label></thead>\n";
|
||||
echo "<thead><tr><th style='text-align: left;'>";
|
||||
echo "<label class='block'><input type='checkbox' id='check-databases'" . ($TABLE == "" ? " checked" : "") . ">" . lang('Database') . "</label>";
|
||||
echo script("qs('#check-databases').onclick = partial(formCheck, /^databases\\[/);", "");
|
||||
echo "</thead>\n";
|
||||
$databases = $adminer->databases();
|
||||
if ($databases) {
|
||||
foreach ($databases as $db) {
|
||||
if (!information_schema($db)) {
|
||||
$prefix = ereg_replace("_.*", "", $db);
|
||||
echo "<tr><td>" . checkbox("databases[]", $db, $TABLE == "" || $TABLE == "$prefix%", $db, "formUncheck('check-databases');") . "</label>\n";
|
||||
$prefix = preg_replace('~_.*~', '', $db);
|
||||
echo "<tr><td>" . checkbox("databases[]", $db, $TABLE == "" || $TABLE == "$prefix%", $db, "", "block") . "\n";
|
||||
$prefixes[$prefix]++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,51 +1,64 @@
|
||||
<?php
|
||||
$TABLE = $_GET["edit"];
|
||||
$fields = fields($TABLE);
|
||||
$where = (isset($_GET["select"]) ? (count($_POST["check"]) == 1 ? where_check($_POST["check"][0], $fields) : "") : where($_GET, $fields));
|
||||
$where = (isset($_GET["select"]) ? ($_POST["check"] && count($_POST["check"]) == 1 ? where_check($_POST["check"][0], $fields) : "") : where($_GET, $fields));
|
||||
$update = (isset($_GET["select"]) ? $_POST["edit"] : $where);
|
||||
foreach ($fields as $name => $field) {
|
||||
if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "") {
|
||||
if (!isset($field["privileges"][$update ? "update" : "insert"]) || $adminer->fieldName($field) == "" || $field["generated"]) {
|
||||
unset($fields[$name]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($_POST && !$error && !isset($_GET["select"])) {
|
||||
$location = $_POST["referer"];
|
||||
if ($_POST["insert"]) { // continue edit or insert
|
||||
$location = ($update ? null : $_SERVER["REQUEST_URI"]);
|
||||
} elseif (!ereg('^.+&select=.+$', $location)) {
|
||||
} elseif (!preg_match('~^.+&select=.+$~', $location)) {
|
||||
$location = ME . "select=" . urlencode($TABLE);
|
||||
}
|
||||
|
||||
$indexes = indexes($TABLE);
|
||||
$unique_array = unique_array($_GET["where"], $indexes);
|
||||
$query_where = "\nWHERE $where";
|
||||
|
||||
if (isset($_POST["delete"])) {
|
||||
query_redirect("DELETE" . limit1("FROM " . table($TABLE), " WHERE $where"), $location, lang('Item has been deleted.'));
|
||||
queries_redirect(
|
||||
$location,
|
||||
lang('Item has been deleted.'),
|
||||
$driver->delete($TABLE, $query_where, !$unique_array)
|
||||
);
|
||||
|
||||
} else {
|
||||
$set = array();
|
||||
foreach ($fields as $name => $field) {
|
||||
$val = process_input($field);
|
||||
if ($val !== false && $val !== null) {
|
||||
$set[idf_escape($name)] = ($update ? "\n" . idf_escape($name) . " = $val" : $val);
|
||||
$set[idf_escape($name)] = $val;
|
||||
}
|
||||
}
|
||||
|
||||
if ($update) {
|
||||
if (!$set) {
|
||||
redirect($location);
|
||||
}
|
||||
query_redirect("UPDATE" . limit1(table($TABLE) . " SET" . implode(",", $set), "\nWHERE $where"), $location, lang('Item has been updated.'));
|
||||
queries_redirect(
|
||||
$location,
|
||||
lang('Item has been updated.'),
|
||||
$driver->update($TABLE, $set, $query_where, !$unique_array)
|
||||
);
|
||||
if (is_ajax()) {
|
||||
page_headers();
|
||||
page_messages($error);
|
||||
exit;
|
||||
}
|
||||
} else {
|
||||
$result = insert_into($TABLE, $set);
|
||||
$result = $driver->insert($TABLE, $set);
|
||||
$last_id = ($result ? last_id() : 0);
|
||||
queries_redirect($location, lang('Item%s has been inserted.', ($last_id ? " $last_id" : "")), $result); //! link
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$table_name = $adminer->tableName(table_status($TABLE));
|
||||
page_header(
|
||||
($update ? lang('Edit') : lang('Insert')),
|
||||
$error,
|
||||
array("select" => array($TABLE, $table_name)),
|
||||
$table_name //! two calls of h()
|
||||
);
|
||||
|
||||
$row = null;
|
||||
if ($_POST["save"]) {
|
||||
$row = (array) $_POST["fields"];
|
||||
@@ -57,67 +70,48 @@ if ($_POST["save"]) {
|
||||
if ($_POST["clone"] && $field["auto_increment"]) {
|
||||
$as = "''";
|
||||
}
|
||||
if ($jush == "sql" && ereg("enum|set", $field["type"])) {
|
||||
if ($jush == "sql" && preg_match("~enum|set~", $field["type"])) {
|
||||
$as = "1*" . idf_escape($name);
|
||||
}
|
||||
$select[] = ($as ? "$as AS " : "") . idf_escape($name);
|
||||
}
|
||||
}
|
||||
$row = array();
|
||||
if (!support("table")) {
|
||||
$select = array("*");
|
||||
}
|
||||
if ($select) {
|
||||
$rows = get_rows("SELECT" . limit(implode(", ", $select) . " FROM " . table($TABLE), " WHERE $where", (isset($_GET["select"]) ? 2 : 1)));
|
||||
$row = (isset($_GET["select"]) && count($rows) != 1 ? null : reset($rows));
|
||||
$result = $driver->select($TABLE, $select, array($where), $select, array(), (isset($_GET["select"]) ? 2 : 1));
|
||||
if (!$result) {
|
||||
$error = error();
|
||||
} else {
|
||||
$row = $result->fetch_assoc();
|
||||
if (!$row) { // MySQLi returns null
|
||||
$row = false;
|
||||
}
|
||||
}
|
||||
if (isset($_GET["select"]) && (!$row || $result->fetch_assoc())) { // $result->num_rows != 1 isn't available in all drivers
|
||||
$row = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($row === false) {
|
||||
echo "<p class='error'>" . lang('No rows.') . "\n";
|
||||
if (!support("table") && !$fields) {
|
||||
if (!$where) { // insert
|
||||
$result = $driver->select($TABLE, array("*"), $where, array("*"));
|
||||
$row = ($result ? $result->fetch_assoc() : false);
|
||||
if (!$row) {
|
||||
$row = array($driver->primary => "");
|
||||
}
|
||||
}
|
||||
if ($row) {
|
||||
foreach ($row as $key => $val) {
|
||||
if (!$where) {
|
||||
$row[$key] = null;
|
||||
}
|
||||
$fields[$key] = array("field" => $key, "null" => ($key != $driver->primary), "auto_increment" => ($key == $driver->primary));
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||
<?php
|
||||
if (!$fields) {
|
||||
echo "<p class='error'>" . lang('You have no privileges to update this table.') . "\n";
|
||||
} else {
|
||||
echo "<table cellspacing='0' onkeydown='return editingKeydown(event);'>\n";
|
||||
foreach ($fields as $name => $field) {
|
||||
echo "<tr><th>" . $adminer->fieldName($field);
|
||||
$default = $_GET["set"][bracket_escape($name)];
|
||||
$value = ($row !== null
|
||||
? ($row[$name] != "" && $jush == "sql" && ereg("enum|set", $field["type"]) ? (is_array($row[$name]) ? array_sum($row[$name]) : +$row[$name]) : $row[$name])
|
||||
: (!$update && $field["auto_increment"] ? "" : (isset($_GET["select"]) ? false : ($default !== null ? $default : $field["default"])))
|
||||
);
|
||||
if (!$_POST["save"] && is_string($value)) {
|
||||
$value = $adminer->editVal($value, $field);
|
||||
}
|
||||
$function = ($_POST["save"] ? (string) $_POST["function"][$name] : ($update && $field["on_update"] == "CURRENT_TIMESTAMP" ? "now" : ($value === false ? null : ($value !== null ? '' : 'NULL'))));
|
||||
if ($field["type"] == "timestamp" && $value == "CURRENT_TIMESTAMP") {
|
||||
$value = "";
|
||||
$function = "now";
|
||||
}
|
||||
input($field, $value, $function);
|
||||
echo "\n";
|
||||
}
|
||||
echo "</table>\n";
|
||||
}
|
||||
?>
|
||||
<p>
|
||||
<?php
|
||||
if ($fields) {
|
||||
echo "<input type='submit' value='" . lang('Save') . "'>\n";
|
||||
if (!isset($_GET["select"])) {
|
||||
echo "<input type='submit' name='insert' value='" . ($update ? lang('Save and continue edit') : lang('Save and insert next')) . "' title='Ctrl+Shift+Enter'>\n";
|
||||
}
|
||||
}
|
||||
echo ($update ? "<input type='submit' name='delete' value='" . lang('Delete') . "' onclick=\"return confirm('" . lang('Are you sure?') . "');\">\n"
|
||||
: ($_POST || !$fields ? "" : "<script type='text/javascript'>document.getElementById('form').getElementsByTagName('td')[1].firstChild.focus();</script>\n")
|
||||
);
|
||||
if (isset($_GET["select"])) {
|
||||
hidden_fields(array("check" => (array) $_POST["check"], "clone" => $_POST["clone"], "all" => $_POST["all"]));
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="referer" value="<?php echo h(isset($_POST["referer"]) ? $_POST["referer"] : $_SERVER["HTTP_REFERER"]); ?>">
|
||||
<input type="hidden" name="save" value="1">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
edit_form($TABLE, $fields, $row, $update);
|
||||
|
||||
@@ -2,31 +2,32 @@
|
||||
$EVENT = $_GET["event"];
|
||||
$intervals = array("YEAR", "QUARTER", "MONTH", "DAY", "HOUR", "MINUTE", "WEEK", "SECOND", "YEAR_MONTH", "DAY_HOUR", "DAY_MINUTE", "DAY_SECOND", "HOUR_MINUTE", "HOUR_SECOND", "MINUTE_SECOND");
|
||||
$statuses = array("ENABLED" => "ENABLE", "DISABLED" => "DISABLE", "SLAVESIDE_DISABLED" => "DISABLE ON SLAVE");
|
||||
$row = $_POST;
|
||||
|
||||
if ($_POST && !$error) {
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP EVENT " . idf_escape($EVENT), substr(ME, 0, -1), lang('Event has been dropped.'));
|
||||
} elseif (in_array($_POST["INTERVAL_FIELD"], $intervals) && isset($statuses[$_POST["STATUS"]])) {
|
||||
$schedule = "\nON SCHEDULE " . ($_POST["INTERVAL_VALUE"]
|
||||
? "EVERY " . q($_POST["INTERVAL_VALUE"]) . " $_POST[INTERVAL_FIELD]"
|
||||
. ($_POST["STARTS"] ? " STARTS " . q($_POST["STARTS"]) : "")
|
||||
. ($_POST["ENDS"] ? " ENDS " . q($_POST["ENDS"]) : "") //! ALTER EVENT doesn't drop ENDS - MySQL bug #39173
|
||||
: "AT " . q($_POST["STARTS"])
|
||||
) . " ON COMPLETION" . ($_POST["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE"
|
||||
} elseif (in_array($row["INTERVAL_FIELD"], $intervals) && isset($statuses[$row["STATUS"]])) {
|
||||
$schedule = "\nON SCHEDULE " . ($row["INTERVAL_VALUE"]
|
||||
? "EVERY " . q($row["INTERVAL_VALUE"]) . " $row[INTERVAL_FIELD]"
|
||||
. ($row["STARTS"] ? " STARTS " . q($row["STARTS"]) : "")
|
||||
. ($row["ENDS"] ? " ENDS " . q($row["ENDS"]) : "") //! ALTER EVENT doesn't drop ENDS - MySQL bug #39173
|
||||
: "AT " . q($row["STARTS"])
|
||||
) . " ON COMPLETION" . ($row["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE"
|
||||
;
|
||||
|
||||
queries_redirect(substr(ME, 0, -1), ($EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.')), queries(($EVENT != ""
|
||||
? "ALTER EVENT " . idf_escape($EVENT) . $schedule
|
||||
. ($EVENT != $_POST["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($_POST["EVENT_NAME"]) : "")
|
||||
: "CREATE EVENT " . idf_escape($_POST["EVENT_NAME"]) . $schedule
|
||||
) . "\n" . $statuses[$_POST["STATUS"]] . " COMMENT " . q($_POST["EVENT_COMMENT"])
|
||||
. rtrim(" DO\n$_POST[EVENT_DEFINITION]", ";") . ";"
|
||||
. ($EVENT != $row["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($row["EVENT_NAME"]) : "")
|
||||
: "CREATE EVENT " . idf_escape($row["EVENT_NAME"]) . $schedule
|
||||
) . "\n" . $statuses[$row["STATUS"]] . " COMMENT " . q($row["EVENT_COMMENT"])
|
||||
. rtrim(" DO\n$row[EVENT_DEFINITION]", ";") . ";"
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
page_header(($EVENT != "" ? lang('Alter event') . ": " . h($EVENT) : lang('Create event')), $error);
|
||||
|
||||
$row = $_POST;
|
||||
if (!$row && $EVENT != "") {
|
||||
$rows = get_rows("SELECT * FROM information_schema.EVENTS WHERE EVENT_SCHEMA = " . q(DB) . " AND EVENT_NAME = " . q($EVENT));
|
||||
$row = reset($rows);
|
||||
@@ -34,18 +35,18 @@ if (!$row && $EVENT != "") {
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<table cellspacing="0">
|
||||
<tr><th><?php echo lang('Name'); ?><td><input name="EVENT_NAME" value="<?php echo h($row["EVENT_NAME"]); ?>" maxlength="64">
|
||||
<tr><th><?php echo lang('Start'); ?><td><input name="STARTS" value="<?php echo h("$row[EXECUTE_AT]$row[STARTS]"); ?>">
|
||||
<tr><th><?php echo lang('End'); ?><td><input name="ENDS" value="<?php echo h($row["ENDS"]); ?>">
|
||||
<table cellspacing="0" class="layout">
|
||||
<tr><th><?php echo lang('Name'); ?><td><input name="EVENT_NAME" value="<?php echo h($row["EVENT_NAME"]); ?>" data-maxlength="64" autocapitalize="off">
|
||||
<tr><th title="datetime"><?php echo lang('Start'); ?><td><input name="STARTS" value="<?php echo h("$row[EXECUTE_AT]$row[STARTS]"); ?>">
|
||||
<tr><th title="datetime"><?php echo lang('End'); ?><td><input name="ENDS" value="<?php echo h($row["ENDS"]); ?>">
|
||||
<tr><th><?php echo lang('Every'); ?><td><input type="number" name="INTERVAL_VALUE" value="<?php echo h($row["INTERVAL_VALUE"]); ?>" class="size"> <?php echo html_select("INTERVAL_FIELD", $intervals, $row["INTERVAL_FIELD"]); ?>
|
||||
<tr><th><?php echo lang('Status'); ?><td><?php echo html_select("STATUS", $statuses, $row["STATUS"]); ?>
|
||||
<tr><th><?php echo lang('Comment'); ?><td><input name="EVENT_COMMENT" value="<?php echo h($row["EVENT_COMMENT"]); ?>" maxlength="64">
|
||||
<tr><th> <td><?php echo checkbox("ON_COMPLETION", "PRESERVE", $row["ON_COMPLETION"] == "PRESERVE", lang('On completion preserve')); ?>
|
||||
<tr><th><?php echo lang('Comment'); ?><td><input name="EVENT_COMMENT" value="<?php echo h($row["EVENT_COMMENT"]); ?>" data-maxlength="64">
|
||||
<tr><th><td><?php echo checkbox("ON_COMPLETION", "PRESERVE", $row["ON_COMPLETION"] == "PRESERVE", lang('On completion preserve')); ?>
|
||||
</table>
|
||||
<p><?php textarea("EVENT_DEFINITION", $row["EVENT_DEFINITION"]); ?>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php if ($EVENT != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
||||
<?php if ($EVENT != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $EVENT)); ?><?php } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
||||
@@ -1,21 +1,18 @@
|
||||
<?php
|
||||
if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
|
||||
header("HTTP/1.1 304 Not Modified");
|
||||
exit;
|
||||
}
|
||||
|
||||
header("Expires: " . gmdate("D, d M Y H:i:s", time() + 365*24*60*60) . " GMT");
|
||||
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
|
||||
// caching headers added in compile.php
|
||||
|
||||
if ($_GET["file"] == "favicon.ico") {
|
||||
header("Content-Type: image/x-icon");
|
||||
echo lzw_decompress(compile_file('../adminer/static/favicon.ico', 'lzw_compress'));
|
||||
} elseif ($_GET["file"] == "default.css") {
|
||||
header("Content-Type: text/css; charset=utf-8");
|
||||
echo lzw_decompress(compile_file('../adminer/static/default.css', 'minify_css'));
|
||||
echo lzw_decompress(compile_file('../adminer/static/default.css;../externals/jush/jush.css', 'minify_css'));
|
||||
} elseif ($_GET["file"] == "functions.js") {
|
||||
header("Content-Type: text/javascript; charset=utf-8");
|
||||
echo lzw_decompress(compile_file('../adminer/static/functions.js;static/editing.js', 'minify_js'));
|
||||
} elseif ($_GET["file"] == "jush.js") {
|
||||
header("Content-Type: text/javascript; charset=utf-8");
|
||||
echo lzw_decompress(compile_file('../externals/jush/modules/jush.js;../externals/jush/modules/jush-textarea.js;../externals/jush/modules/jush-txt.js;../externals/jush/modules/jush-js.js;../externals/jush/modules/jush-sql.js;../externals/jush/modules/jush-pgsql.js;../externals/jush/modules/jush-sqlite.js;../externals/jush/modules/jush-mssql.js;../externals/jush/modules/jush-oracle.js;../externals/jush/modules/jush-simpledb.js', 'minify_js'));
|
||||
} else {
|
||||
header("Content-Type: image/gif");
|
||||
switch ($_GET["file"]) {
|
||||
|
||||
@@ -1,67 +1,90 @@
|
||||
<?php
|
||||
$TABLE = $_GET["foreign"];
|
||||
$name = $_GET["name"];
|
||||
$row = $_POST;
|
||||
|
||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["change"] && !$_POST["change-js"]) {
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("ALTER TABLE " . table($TABLE) . "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($_GET["name"]), ME . "table=" . urlencode($TABLE), lang('Foreign key has been dropped.'));
|
||||
} else {
|
||||
$source = array_filter($_POST["source"], 'strlen');
|
||||
ksort($source); // enforce input order
|
||||
$message = ($_POST["drop"] ? lang('Foreign key has been dropped.') : ($name != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.')));
|
||||
$location = ME . "table=" . urlencode($TABLE);
|
||||
|
||||
if (!$_POST["drop"]) {
|
||||
$row["source"] = array_filter($row["source"], 'strlen');
|
||||
ksort($row["source"]); // enforce input order
|
||||
$target = array();
|
||||
foreach ($source as $key => $val) {
|
||||
$target[$key] = $_POST["target"][$key];
|
||||
foreach ($row["source"] as $key => $val) {
|
||||
$target[$key] = $row["target"][$key];
|
||||
}
|
||||
$row["target"] = $target;
|
||||
}
|
||||
|
||||
if ($jush == "sqlite") {
|
||||
queries_redirect($location, $message, recreate_table($TABLE, $TABLE, array(), array(), array(" $name" => ($_POST["drop"] ? "" : " " . format_foreign_key($row)))));
|
||||
} else {
|
||||
$alter = "ALTER TABLE " . table($TABLE);
|
||||
$drop = "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($name);
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect($alter . $drop, $location, $message);
|
||||
} else {
|
||||
query_redirect($alter . ($name != "" ? "$drop," : "") . "\nADD" . format_foreign_key($row), $location, $message);
|
||||
$error = lang('Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.') . "<br>$error"; //! no partitioning
|
||||
}
|
||||
query_redirect("ALTER TABLE " . table($TABLE)
|
||||
. ($_GET["name"] != "" ? "\nDROP " . ($jush == "sql" ? "FOREIGN KEY " : "CONSTRAINT ") . idf_escape($_GET["name"]) . "," : "")
|
||||
. "\nADD FOREIGN KEY (" . implode(", ", array_map('idf_escape', $source)) . ") REFERENCES " . table($_POST["table"]) . " (" . implode(", ", array_map('idf_escape', $target)) . ")" //! reuse $_GET["name"] - check in older MySQL versions
|
||||
. (ereg("^($on_actions)\$", $_POST["on_delete"]) ? " ON DELETE $_POST[on_delete]" : "")
|
||||
. (ereg("^($on_actions)\$", $_POST["on_update"]) ? " ON UPDATE $_POST[on_update]" : "")
|
||||
, ME . "table=" . urlencode($TABLE), ($_GET["name"] != "" ? lang('Foreign key has been altered.') : lang('Foreign key has been created.')));
|
||||
$error = lang('Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.') . "<br>$error"; //! no partitioning
|
||||
}
|
||||
}
|
||||
|
||||
page_header(lang('Foreign key'), $error, array("table" => $TABLE), $TABLE);
|
||||
page_header(lang('Foreign key'), $error, array("table" => $TABLE), h($TABLE));
|
||||
|
||||
$row = array("table" => $TABLE, "source" => array(""));
|
||||
if ($_POST) {
|
||||
$row = $_POST;
|
||||
ksort($row["source"]);
|
||||
if ($_POST["add"]) {
|
||||
$row["source"][] = "";
|
||||
} elseif ($_POST["change"] || $_POST["change-js"]) {
|
||||
$row["target"] = array();
|
||||
}
|
||||
} elseif ($_GET["name"] != "") {
|
||||
} elseif ($name != "") {
|
||||
$foreign_keys = foreign_keys($TABLE);
|
||||
$row = $foreign_keys[$_GET["name"]];
|
||||
$row = $foreign_keys[$name];
|
||||
$row["source"][] = "";
|
||||
}
|
||||
|
||||
$source = array_keys(fields($TABLE)); //! no text and blob
|
||||
$target = ($TABLE === $row["table"] ? $source : array_keys(fields($row["table"])));
|
||||
$referencable = array();
|
||||
foreach (table_status() as $name => $table_status) {
|
||||
if (fk_support($table_status)) {
|
||||
$referencable[] = $name;
|
||||
}
|
||||
} else {
|
||||
$row["table"] = $TABLE;
|
||||
$row["source"] = array("");
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<p>
|
||||
<?php if ($row["db"] == "" && $row["ns"] == "") { ?>
|
||||
<?php echo lang('Target table'); ?>:
|
||||
<?php echo html_select("table", $referencable, $row["table"], "this.form['change-js'].value = '1'; this.form.submit();"); ?>
|
||||
<?php
|
||||
$source = array_keys(fields($TABLE)); //! no text and blob
|
||||
if ($row["db"] != "") {
|
||||
$connection->select_db($row["db"]);
|
||||
}
|
||||
if ($row["ns"] != "") {
|
||||
set_schema($row["ns"]);
|
||||
}
|
||||
$referencable = array_keys(array_filter(table_status('', true), 'fk_support'));
|
||||
$target = array_keys(fields(in_array($row["table"], $referencable) ? $row["table"] : reset($referencable)));
|
||||
$onchange = "this.form['change-js'].value = '1'; this.form.submit();";
|
||||
echo "<p>" . lang('Target table') . ": " . html_select("table", $referencable, $row["table"], $onchange) . "\n";
|
||||
if ($jush == "pgsql") {
|
||||
echo lang('Schema') . ": " . html_select("ns", $adminer->schemas(), $row["ns"] != "" ? $row["ns"] : $_GET["ns"], $onchange);
|
||||
} elseif ($jush != "sqlite") {
|
||||
$dbs = array();
|
||||
foreach ($adminer->databases() as $db) {
|
||||
if (!information_schema($db)) {
|
||||
$dbs[] = $db;
|
||||
}
|
||||
}
|
||||
echo lang('DB') . ": " . html_select("db", $dbs, $row["db"] != "" ? $row["db"] : $_GET["db"], $onchange);
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="change-js" value="">
|
||||
<noscript><p><input type="submit" name="change" value="<?php echo lang('Change'); ?>"></noscript>
|
||||
<table cellspacing="0">
|
||||
<thead><tr><th><?php echo lang('Source'); ?><th><?php echo lang('Target'); ?></thead>
|
||||
<thead><tr><th id="label-source"><?php echo lang('Source'); ?><th id="label-target"><?php echo lang('Target'); ?></thead>
|
||||
<?php
|
||||
$j = 0;
|
||||
foreach ($row["source"] as $key => $val) {
|
||||
echo "<tr>";
|
||||
echo "<td>" . html_select("source[" . (+$key) . "]", array(-1 => "") + $source, $val, ($j == count($row["source"]) - 1 ? "foreignAddRow(this);" : 1));
|
||||
echo "<td>" . html_select("target[" . (+$key) . "]", $target, $row["target"][$key]);
|
||||
echo "<td>" . html_select("source[" . (+$key) . "]", array(-1 => "") + $source, $val, ($j == count($row["source"]) - 1 ? "foreignAddRow.call(this);" : 1), "label-source");
|
||||
echo "<td>" . html_select("target[" . (+$key) . "]", $target, $row["target"][$key], 1, "label-target");
|
||||
$j++;
|
||||
}
|
||||
?>
|
||||
@@ -69,10 +92,16 @@ foreach ($row["source"] as $key => $val) {
|
||||
<p>
|
||||
<?php echo lang('ON DELETE'); ?>: <?php echo html_select("on_delete", array(-1 => "") + explode("|", $on_actions), $row["on_delete"]); ?>
|
||||
<?php echo lang('ON UPDATE'); ?>: <?php echo html_select("on_update", array(-1 => "") + explode("|", $on_actions), $row["on_update"]); ?>
|
||||
<?php echo doc_link(array(
|
||||
'sql' => "innodb-foreign-key-constraints.html",
|
||||
'mariadb' => "foreign-keys/",
|
||||
'pgsql' => "sql-createtable.html#SQL-CREATETABLE-REFERENCES",
|
||||
'mssql' => "ms174979.aspx",
|
||||
'oracle' => "https://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm#sthref2903",
|
||||
)); ?>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add column'); ?>"></noscript>
|
||||
<?php } ?>
|
||||
<?php if ($_GET["name"] != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
||||
<?php if ($name != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $name)); ?><?php } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,10 +1,11 @@
|
||||
<?php
|
||||
$connection = '';
|
||||
|
||||
$token = $_SESSION["token"];
|
||||
if (!$_SESSION["token"]) {
|
||||
$has_token = $_SESSION["token"];
|
||||
if (!$has_token) {
|
||||
$_SESSION["token"] = rand(1, 1e6); // defense against cross-site request forgery
|
||||
}
|
||||
$token = get_token(); ///< @var string CSRF protection
|
||||
|
||||
$permanent = array();
|
||||
if ($_COOKIE["adminer_permanent"]) {
|
||||
@@ -14,107 +15,195 @@ if ($_COOKIE["adminer_permanent"]) {
|
||||
}
|
||||
}
|
||||
|
||||
function add_invalid_login() {
|
||||
global $adminer;
|
||||
$fp = file_open_lock(get_temp_dir() . "/adminer.invalid");
|
||||
if (!$fp) {
|
||||
return;
|
||||
}
|
||||
$invalids = unserialize(stream_get_contents($fp));
|
||||
$time = time();
|
||||
if ($invalids) {
|
||||
foreach ($invalids as $ip => $val) {
|
||||
if ($val[0] < $time) {
|
||||
unset($invalids[$ip]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$invalid = &$invalids[$adminer->bruteForceKey()];
|
||||
if (!$invalid) {
|
||||
$invalid = array($time + 30*60, 0); // active for 30 minutes
|
||||
}
|
||||
$invalid[1]++;
|
||||
file_write_unlock($fp, serialize($invalids));
|
||||
}
|
||||
|
||||
function check_invalid_login() {
|
||||
global $adminer;
|
||||
$invalids = unserialize(@file_get_contents(get_temp_dir() . "/adminer.invalid")); // @ - may not exist
|
||||
$invalid = ($invalids ? $invalids[$adminer->bruteForceKey()] : array());
|
||||
$next_attempt = ($invalid[1] > 29 ? $invalid[0] - time() : 0); // allow 30 invalid attempts
|
||||
if ($next_attempt > 0) { //! do the same with permanent login
|
||||
auth_error(lang('Too many unsuccessful logins, try again in %d minute(s).', ceil($next_attempt / 60)));
|
||||
}
|
||||
}
|
||||
|
||||
$auth = $_POST["auth"];
|
||||
if ($auth) {
|
||||
session_regenerate_id(); // defense against session fixation
|
||||
$_SESSION["pwds"][$auth["driver"]][$auth["server"]][$auth["username"]] = $auth["password"];
|
||||
$_SESSION["db"][$auth["driver"]][$auth["server"]][$auth["username"]][$auth["db"]] = true;
|
||||
$vendor = $auth["driver"];
|
||||
$server = $auth["server"];
|
||||
$username = $auth["username"];
|
||||
$password = (string) $auth["password"];
|
||||
$db = $auth["db"];
|
||||
set_password($vendor, $server, $username, $password);
|
||||
$_SESSION["db"][$vendor][$server][$username][$db] = true;
|
||||
if ($auth["permanent"]) {
|
||||
$key = base64_encode($auth["driver"]) . "-" . base64_encode($auth["server"]) . "-" . base64_encode($auth["username"]) . "-" . base64_encode($auth["db"]);
|
||||
$private = $adminer->permanentLogin();
|
||||
$permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($auth["password"], $private) : "");
|
||||
$key = base64_encode($vendor) . "-" . base64_encode($server) . "-" . base64_encode($username) . "-" . base64_encode($db);
|
||||
$private = $adminer->permanentLogin(true);
|
||||
$permanent[$key] = "$key:" . base64_encode($private ? encrypt_string($password, $private) : "");
|
||||
cookie("adminer_permanent", implode(" ", $permanent));
|
||||
}
|
||||
if (count($_POST) == 1 // 1 - auth
|
||||
|| DRIVER != $auth["driver"]
|
||||
|| SERVER != $auth["server"]
|
||||
|| $_GET["username"] !== $auth["username"] // "0" == "00"
|
||||
|| DB != $auth["db"]
|
||||
|| DRIVER != $vendor
|
||||
|| SERVER != $server
|
||||
|| $_GET["username"] !== $username // "0" == "00"
|
||||
|| DB != $db
|
||||
) {
|
||||
redirect(auth_url($auth["driver"], $auth["server"], $auth["username"], $auth["db"]));
|
||||
redirect(auth_url($vendor, $server, $username, $db));
|
||||
}
|
||||
} elseif ($_POST["logout"]) {
|
||||
if ($token && $_POST["token"] != $token) {
|
||||
page_header(lang('Logout'), lang('Invalid CSRF token. Send the form again.'));
|
||||
page_footer("db");
|
||||
exit;
|
||||
} else {
|
||||
foreach (array("pwds", "db", "dbs", "queries") as $key) {
|
||||
set_session($key, null);
|
||||
}
|
||||
unset_permanent();
|
||||
redirect(substr(preg_replace('~(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.'));
|
||||
|
||||
} elseif ($_POST["logout"] && (!$has_token || verify_token())) {
|
||||
foreach (array("pwds", "db", "dbs", "queries") as $key) {
|
||||
set_session($key, null);
|
||||
}
|
||||
unset_permanent();
|
||||
redirect(substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1), lang('Logout successful.') . ' ' . lang('Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.'));
|
||||
|
||||
} elseif ($permanent && !$_SESSION["pwds"]) {
|
||||
session_regenerate_id();
|
||||
$private = $adminer->permanentLogin(); // try to decode even if not set
|
||||
$private = $adminer->permanentLogin();
|
||||
foreach ($permanent as $key => $val) {
|
||||
list(, $cipher) = explode(":", $val);
|
||||
list($driver, $server, $username, $db) = array_map('base64_decode', explode("-", $key));
|
||||
$_SESSION["pwds"][$driver][$server][$username] = decrypt_string(base64_decode($cipher), $private);
|
||||
$_SESSION["db"][$driver][$server][$username][$db] = true;
|
||||
list($vendor, $server, $username, $db) = array_map('base64_decode', explode("-", $key));
|
||||
set_password($vendor, $server, $username, decrypt_string(base64_decode($cipher), $private));
|
||||
$_SESSION["db"][$vendor][$server][$username][$db] = true;
|
||||
}
|
||||
}
|
||||
|
||||
function unset_permanent() {
|
||||
global $permanent;
|
||||
foreach ($permanent as $key => $val) {
|
||||
list($driver, $server, $username) = array_map('base64_decode', explode("-", $key));
|
||||
if ($driver == DRIVER && $server == SERVER && $db == $_GET["username"]) {
|
||||
list($vendor, $server, $username, $db) = array_map('base64_decode', explode("-", $key));
|
||||
if ($vendor == DRIVER && $server == SERVER && $username == $_GET["username"] && $db == DB) {
|
||||
unset($permanent[$key]);
|
||||
}
|
||||
}
|
||||
cookie("adminer_permanent", implode(" ", $permanent));
|
||||
}
|
||||
|
||||
function auth_error($exception = null) {
|
||||
global $connection, $adminer, $token;
|
||||
/** Renders an error message and a login form
|
||||
* @param string plain text
|
||||
* @return null exits
|
||||
*/
|
||||
function auth_error($error) {
|
||||
global $adminer, $has_token;
|
||||
$session_name = session_name();
|
||||
$error = "";
|
||||
if (!$_COOKIE[$session_name] && $_GET[$session_name] && ini_bool("session.use_only_cookies")) {
|
||||
$error = lang('Session support must be enabled.');
|
||||
} elseif (isset($_GET["username"])) {
|
||||
if (($_COOKIE[$session_name] || $_GET[$session_name]) && !$token) {
|
||||
if (isset($_GET["username"])) {
|
||||
header("HTTP/1.1 403 Forbidden"); // 401 requires sending WWW-Authenticate header
|
||||
if (($_COOKIE[$session_name] || $_GET[$session_name]) && !$has_token) {
|
||||
$error = lang('Session expired, please login again.');
|
||||
} else {
|
||||
$password = &get_session("pwds");
|
||||
restart_session();
|
||||
add_invalid_login();
|
||||
$password = get_password();
|
||||
if ($password !== null) {
|
||||
$error = h($exception ? $exception->getMessage() : (is_string($connection) ? $connection : lang('Invalid credentials.')));
|
||||
$password = null;
|
||||
if ($password === false) {
|
||||
$error .= ($error ? '<br>' : '') . lang('Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.', target_blank(), '<code>permanentLogin()</code>');
|
||||
}
|
||||
set_password(DRIVER, SERVER, $_GET["username"], null);
|
||||
}
|
||||
unset_permanent();
|
||||
}
|
||||
}
|
||||
if (!$_COOKIE[$session_name] && $_GET[$session_name] && ini_bool("session.use_only_cookies")) {
|
||||
$error = lang('Session support must be enabled.');
|
||||
}
|
||||
$params = session_get_cookie_params();
|
||||
cookie("adminer_key", ($_COOKIE["adminer_key"] ? $_COOKIE["adminer_key"] : rand_string()), $params["lifetime"]);
|
||||
page_header(lang('Login'), $error, null);
|
||||
echo "<form action='' method='post'>\n";
|
||||
$adminer->loginForm();
|
||||
echo "<div>";
|
||||
hidden_fields($_POST, array("auth")); // expired session
|
||||
if (hidden_fields($_POST, array("auth"))) { // expired session
|
||||
echo "<p class='message'>" . lang('The action will be performed after successful login with the same credentials.') . "\n";
|
||||
}
|
||||
echo "</div>\n";
|
||||
$adminer->loginForm();
|
||||
echo "</form>\n";
|
||||
page_footer("auth");
|
||||
}
|
||||
|
||||
if (isset($_GET["username"])) {
|
||||
if (!class_exists("Min_DB")) {
|
||||
unset($_SESSION["pwds"][DRIVER]);
|
||||
unset_permanent();
|
||||
page_header(lang('No extension'), lang('None of the supported PHP extensions (%s) are available.', implode(", ", $possible_drivers)), false);
|
||||
page_footer("auth");
|
||||
exit;
|
||||
}
|
||||
$connection = connect();
|
||||
}
|
||||
if (is_string($connection) || !$adminer->login($_GET["username"], get_session("pwds"))) {
|
||||
auth_error();
|
||||
exit;
|
||||
}
|
||||
|
||||
$token = $_SESSION["token"]; ///< @var string CSRF protection
|
||||
if (isset($_GET["username"]) && !class_exists("Min_DB")) {
|
||||
unset($_SESSION["pwds"][DRIVER]);
|
||||
unset_permanent();
|
||||
page_header(lang('No extension'), lang('None of the supported PHP extensions (%s) are available.', implode(", ", $possible_drivers)), false);
|
||||
page_footer("auth");
|
||||
exit;
|
||||
}
|
||||
|
||||
stop_session(true);
|
||||
|
||||
if (isset($_GET["username"]) && is_string(get_password())) {
|
||||
list($host, $port) = explode(":", SERVER, 2);
|
||||
if (preg_match('~^\s*([-+]?\d+)~', $port, $match) && ($match[1] < 1024 || $match[1] > 65535)) { // is_numeric('80#') would still connect to port 80
|
||||
auth_error(lang('Connecting to privileged ports is not allowed.'));
|
||||
}
|
||||
check_invalid_login();
|
||||
$connection = connect();
|
||||
$driver = new Min_Driver($connection);
|
||||
}
|
||||
|
||||
$login = null;
|
||||
if (!is_object($connection) || ($login = $adminer->login($_GET["username"], get_password())) !== true) {
|
||||
$error = (is_string($connection) ? h($connection) : (is_string($login) ? $login : lang('Invalid credentials.')));
|
||||
auth_error($error . (preg_match('~^ | $~', get_password()) ? '<br>' . lang('There is a space in the input password which might be the cause.') : ''));
|
||||
}
|
||||
|
||||
if ($_POST["logout"] && $has_token && !verify_token()) {
|
||||
page_header(lang('Logout'), lang('Invalid CSRF token. Send the form again.'));
|
||||
page_footer("db");
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($auth && $_POST["token"]) {
|
||||
$_POST["token"] = $token; // reset token after explicit login
|
||||
}
|
||||
$error = ($_POST ///< @var string
|
||||
? ($_POST["token"] == $token ? "" : lang('Invalid CSRF token. Send the form again.'))
|
||||
: ($_SERVER["REQUEST_METHOD"] != "POST" ? "" : lang('Too big POST data. Reduce the data or increase the %s configuration directive.', '"post_max_size"')) // posted form with no data means that post_max_size exceeded because Adminer always sends token at least
|
||||
);
|
||||
|
||||
$error = ''; ///< @var string
|
||||
if ($_POST) {
|
||||
if (!verify_token()) {
|
||||
$ini = "max_input_vars";
|
||||
$max_vars = ini_get($ini);
|
||||
if (extension_loaded("suhosin")) {
|
||||
foreach (array("suhosin.request.max_vars", "suhosin.post.max_vars") as $key) {
|
||||
$val = ini_get($key);
|
||||
if ($val && (!$max_vars || $val < $max_vars)) {
|
||||
$ini = $key;
|
||||
$max_vars = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
$error = (!$_POST["token"] && $max_vars
|
||||
? lang('Maximum number of allowed fields exceeded. Please increase %s.', "'$ini'")
|
||||
: lang('Invalid CSRF token. Send the form again.') . ' ' . lang('If you did not send this request from Adminer then close this page.')
|
||||
);
|
||||
}
|
||||
|
||||
} elseif ($_SERVER["REQUEST_METHOD"] == "POST") {
|
||||
// posted form with no data means that post_max_size exceeded because Adminer always sends token at least
|
||||
$error = lang('Too big POST data. Reduce the data or increase the %s configuration directive.', "'post_max_size'");
|
||||
if (isset($_GET["sql"])) {
|
||||
$error .= ' ' . lang('You can upload a big SQL file via FTP and import it from server.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
<?php
|
||||
function adminer_errors($errno, $errstr) {
|
||||
return !!preg_match('~^(Trying to access array offset on value of type null|Undefined array key)~', $errstr);
|
||||
}
|
||||
|
||||
error_reporting(6135); // errors and warnings
|
||||
set_error_handler('adminer_errors', E_WARNING);
|
||||
|
||||
include "../adminer/include/coverage.inc.php";
|
||||
|
||||
// disable filter.default
|
||||
$filter = !ereg('^(unsafe_raw)?$', ini_get("filter.default"));
|
||||
$filter = !preg_match('~^(unsafe_raw)?$~', ini_get("filter.default"));
|
||||
if ($filter || ini_get("filter.default_flags")) {
|
||||
foreach (array('_GET', '_POST', '_COOKIE', '_SERVER') as $val) {
|
||||
$unsafe = filter_input_array(constant("INPUT$val"), FILTER_UNSAFE_RAW);
|
||||
@@ -14,29 +19,43 @@ if ($filter || ini_get("filter.default_flags")) {
|
||||
}
|
||||
}
|
||||
|
||||
@ini_set("mbstring.internal_encoding", "8bit"); // @ - can be disabled
|
||||
if (function_exists("mb_internal_encoding")) {
|
||||
mb_internal_encoding("8bit");
|
||||
}
|
||||
|
||||
include "../adminer/include/functions.inc.php";
|
||||
|
||||
// used only in compiled file
|
||||
if (isset($_GET["file"])) {
|
||||
include "../adminer/file.inc.php";
|
||||
}
|
||||
|
||||
include "../adminer/include/functions.inc.php";
|
||||
if ($_GET["script"] == "version") {
|
||||
$fp = file_open_lock(get_temp_dir() . "/adminer.version");
|
||||
if ($fp) {
|
||||
file_write_unlock($fp, serialize(array("signature" => $_POST["signature"], "version" => $_POST["version"])));
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
global $adminer, $connection, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $permanent, $structured_types, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
|
||||
global $adminer, $connection, $driver, $drivers, $edit_functions, $enum_length, $error, $functions, $grouping, $HTTPS, $inout, $jush, $LANG, $langs, $on_actions, $permanent, $structured_types, $has_token, $token, $translations, $types, $unsigned, $VERSION; // allows including Adminer inside a function
|
||||
|
||||
if (!$_SERVER["REQUEST_URI"]) { // IIS 5 compatibility
|
||||
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
|
||||
$_SERVER["REQUEST_URI"] = $_SERVER["ORIG_PATH_INFO"];
|
||||
}
|
||||
if (!strpos($_SERVER["REQUEST_URI"], '?') && $_SERVER["QUERY_STRING"] != "") { // IIS 7 compatibility
|
||||
$_SERVER["REQUEST_URI"] .= "?$_SERVER[QUERY_STRING]";
|
||||
}
|
||||
$HTTPS = $_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off");
|
||||
if ($_SERVER["HTTP_X_FORWARDED_PREFIX"]) {
|
||||
$_SERVER["REQUEST_URI"] = $_SERVER["HTTP_X_FORWARDED_PREFIX"] . $_SERVER["REQUEST_URI"];
|
||||
}
|
||||
$HTTPS = ($_SERVER["HTTPS"] && strcasecmp($_SERVER["HTTPS"], "off")) || ini_bool("session.cookie_secure"); // session.cookie_secure could be set on HTTP if we are behind a reverse proxy
|
||||
|
||||
@ini_set("session.use_trans_sid", false); // protect links in export, @ - may be disabled
|
||||
if (!defined("SID")) {
|
||||
session_cache_limiter(""); // to allow restarting session
|
||||
session_name("adminer_sid"); // use specific session name to get own namespace
|
||||
$params = array(0, preg_replace('~\\?.*~', '', $_SERVER["REQUEST_URI"]), "", $HTTPS);
|
||||
$params = array(0, preg_replace('~\?.*~', '', $_SERVER["REQUEST_URI"]), "", $HTTPS);
|
||||
if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
|
||||
$params[] = true; // HttpOnly
|
||||
}
|
||||
@@ -46,25 +65,44 @@ if (!defined("SID")) {
|
||||
|
||||
// disable magic quotes to be able to use database escaping function
|
||||
remove_slashes(array(&$_GET, &$_POST, &$_COOKIE), $filter);
|
||||
if (function_exists("set_magic_quotes_runtime")) { // removed in PHP 6
|
||||
if (function_exists("get_magic_quotes_runtime") && get_magic_quotes_runtime()) {
|
||||
set_magic_quotes_runtime(false);
|
||||
}
|
||||
@set_time_limit(0); // @ - can be disabled
|
||||
@ini_set("zend.ze1_compatibility_mode", false); // @ - deprecated
|
||||
@ini_set("precision", 20); // @ - can be disabled
|
||||
@ini_set("precision", 15); // @ - can be disabled, 15 - internal PHP precision
|
||||
|
||||
include "../adminer/include/lang.inc.php";
|
||||
include "../adminer/lang/$LANG.inc.php";
|
||||
include "../adminer/include/pdo.inc.php";
|
||||
include "../adminer/include/driver.inc.php";
|
||||
include "../adminer/drivers/sqlite.inc.php";
|
||||
include "../adminer/drivers/pgsql.inc.php";
|
||||
include "../adminer/drivers/oracle.inc.php";
|
||||
include "../adminer/drivers/mssql.inc.php";
|
||||
include "../adminer/drivers/mongo.inc.php";
|
||||
include "../adminer/drivers/elastic.inc.php";
|
||||
include "./include/adminer.inc.php";
|
||||
$adminer = (function_exists('adminer_object') ? adminer_object() : new Adminer);
|
||||
include "../adminer/drivers/mysql.inc.php"; // must be included as last driver
|
||||
|
||||
$config = driver_config();
|
||||
$possible_drivers = $config['possible_drivers'];
|
||||
$jush = $config['jush'];
|
||||
$types = $config['types'];
|
||||
$structured_types = $config['structured_types'];
|
||||
$unsigned = $config['unsigned'];
|
||||
$operators = $config['operators'];
|
||||
$functions = $config['functions'];
|
||||
$grouping = $config['grouping'];
|
||||
$edit_functions = $config['edit_functions'];
|
||||
if ($adminer->operators === null) {
|
||||
$adminer->operators = $operators;
|
||||
}
|
||||
|
||||
define("SERVER", $_GET[DRIVER]); // read from pgsql=localhost
|
||||
define("DB", $_GET["db"]); // for the sake of speed and size
|
||||
define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"]) . '?'
|
||||
define("ME", preg_replace('~\?.*~', '', relative_uri()) . '?'
|
||||
. (sid() ? SID . '&' : '')
|
||||
. (SERVER !== null ? DRIVER . "=" . urlencode(SERVER) . '&' : '')
|
||||
. (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '')
|
||||
@@ -72,17 +110,10 @@ define("ME", preg_replace('~^[^?]*/([^?]*).*~', '\\1', $_SERVER["REQUEST_URI"])
|
||||
);
|
||||
|
||||
include "../adminer/include/version.inc.php";
|
||||
include "./include/adminer.inc.php";
|
||||
include "../adminer/include/design.inc.php";
|
||||
include "../adminer/include/xxtea.inc.php";
|
||||
include "../adminer/include/auth.inc.php";
|
||||
|
||||
if (!ini_bool("session.use_cookies") || @ini_set("session.use_cookies", false) !== false) { // @ - may be disabled
|
||||
session_cache_limiter(""); // to allow restarting session
|
||||
session_write_close(); // improves concurrency if a user opens several pages at once, may be restarted later
|
||||
}
|
||||
|
||||
include "./include/connect.inc.php";
|
||||
include "./include/editing.inc.php";
|
||||
include "./include/connect.inc.php";
|
||||
|
||||
$on_actions = "RESTRICT|NO ACTION|CASCADE|SET NULL|SET DEFAULT"; ///< @var string used in foreign_keys()
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<?php
|
||||
function connect_error() {
|
||||
global $adminer, $connection, $token, $error, $drivers;
|
||||
$databases = array();
|
||||
if (DB != "") {
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
page_header(lang('Database') . ": " . h(DB), lang('Invalid database.'), true);
|
||||
} else {
|
||||
if ($_POST["db"] && !$error) {
|
||||
@@ -10,8 +10,9 @@ function connect_error() {
|
||||
}
|
||||
|
||||
page_header(lang('Select database'), $error, false);
|
||||
echo "<p><a href='" . h(ME) . "database='>" . lang('Create new database') . "</a>\n";
|
||||
echo "<p class='links'>\n";
|
||||
foreach (array(
|
||||
'database' => lang('Create database'),
|
||||
'privileges' => lang('Privileges'),
|
||||
'processlist' => lang('Process list'),
|
||||
'variables' => lang('Variables'),
|
||||
@@ -21,43 +22,64 @@ function connect_error() {
|
||||
echo "<a href='" . h(ME) . "$key='>$val</a>\n";
|
||||
}
|
||||
}
|
||||
echo "<p>" . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>$connection->server_info</b>", "<b>$connection->extension</b>") . "\n";
|
||||
echo "<p>" . lang('%s version: %s through PHP extension %s', $drivers[DRIVER], "<b>" . h($connection->server_info) . "</b>", "<b>$connection->extension</b>") . "\n";
|
||||
echo "<p>" . lang('Logged as: %s', "<b>" . h(logged_user()) . "</b>") . "\n";
|
||||
$refresh = "<a href='" . h(ME) . "refresh=1'>" . lang('Refresh') . "</a>\n";
|
||||
$databases = $adminer->databases();
|
||||
if ($databases) {
|
||||
$scheme = support("scheme");
|
||||
$collations = collations();
|
||||
echo "<form action='' method='post'>\n";
|
||||
echo "<table cellspacing='0' class='checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);'>\n";
|
||||
echo "<thead><tr><td> <th>" . lang('Database') . "<td>" . lang('Collation') . "<td>" . lang('Tables') . "</thead>\n";
|
||||
foreach ($databases as $db) {
|
||||
echo "<table cellspacing='0' class='checkable'>\n";
|
||||
echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
|
||||
echo "<thead><tr>"
|
||||
. (support("database") ? "<td>" : "")
|
||||
. "<th>" . lang('Database') . " - <a href='" . h(ME) . "refresh=1'>" . lang('Refresh') . "</a>"
|
||||
. "<td>" . lang('Collation')
|
||||
. "<td>" . lang('Tables')
|
||||
. "<td>" . lang('Size') . " - <a href='" . h(ME) . "dbsize=1'>" . lang('Compute') . "</a>" . script("qsl('a').onclick = partial(ajaxSetHtml, '" . js_escape(ME) . "script=connect');", "")
|
||||
. "</thead>\n"
|
||||
;
|
||||
|
||||
$databases = ($_GET["dbsize"] ? count_tables($databases) : array_flip($databases));
|
||||
|
||||
foreach ($databases as $db => $tables) {
|
||||
$root = h(ME) . "db=" . urlencode($db);
|
||||
echo "<tr" . odd() . "><td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"]));
|
||||
echo "<th><a href='$root'>" . h($db) . "</a>";
|
||||
echo "<td><a href='$root" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>" . nbsp(db_collation($db, $collations)) . "</a>";
|
||||
echo "<td align='right'><a href='$root&schema=' id='tables-" . h($db) . "' title='" . lang('Database schema') . "'>?</a>";
|
||||
$id = h("Db-" . $db);
|
||||
echo "<tr" . odd() . ">" . (support("database") ? "<td>" . checkbox("db[]", $db, in_array($db, (array) $_POST["db"]), "", "", "", $id) : "");
|
||||
echo "<th><a href='$root' id='$id'>" . h($db) . "</a>";
|
||||
$collation = h(db_collation($db, $collations));
|
||||
echo "<td>" . (support("database") ? "<a href='$root" . ($scheme ? "&ns=" : "") . "&database=' title='" . lang('Alter database') . "'>$collation</a>" : $collation);
|
||||
echo "<td align='right'><a href='$root&schema=' id='tables-" . h($db) . "' title='" . lang('Database schema') . "'>" . ($_GET["dbsize"] ? $tables : "?") . "</a>";
|
||||
echo "<td align='right' id='size-" . h($db) . "'>" . ($_GET["dbsize"] ? db_size($db) : "?");
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
echo "</table>\n";
|
||||
echo "<script type='text/javascript'>tableCheck();</script>\n";
|
||||
echo "<p><input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm("formChecked(this, /db/)") . ">\n";
|
||||
echo (support("database")
|
||||
? "<div class='footer'><div>\n"
|
||||
. "<fieldset><legend>" . lang('Selected') . " <span id='selected'></span></legend><div>\n"
|
||||
. "<input type='hidden' name='all' value=''>" . script("qsl('input').onclick = function () { selectCount('selected', formChecked(this, /^db/)); };") // used by trCheck()
|
||||
. "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm() . "\n"
|
||||
. "</div></fieldset>\n"
|
||||
. "</div></div>\n"
|
||||
: ""
|
||||
);
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
echo $refresh;
|
||||
echo "</form>\n";
|
||||
} else {
|
||||
echo "<p>$refresh";
|
||||
echo script("tableCheck();");
|
||||
}
|
||||
}
|
||||
|
||||
page_footer("db");
|
||||
if ($databases) {
|
||||
echo "<script type='text/javascript'>ajaxSetHtml('" . js_escape(ME) . "script=connect');</script>\n";
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_GET["status"])) {
|
||||
$_GET["variables"] = $_GET["status"];
|
||||
}
|
||||
if (isset($_GET["import"])) {
|
||||
$_GET["sql"] = $_GET["import"];
|
||||
}
|
||||
|
||||
if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET["dump"]) || isset($_GET["database"]) || isset($_GET["processlist"]) || isset($_GET["privileges"]) || isset($_GET["user"]) || isset($_GET["variables"]) || $_GET["script"] == "connect" || $_GET["script"] == "kill")) {
|
||||
if (DB != "" || $_GET["refresh"]) {
|
||||
restart_session();
|
||||
@@ -67,13 +89,16 @@ if (!(DB != "" ? $connection->select_db(DB) : isset($_GET["sql"]) || isset($_GET
|
||||
exit;
|
||||
}
|
||||
|
||||
if (support("scheme") && DB != "" && $_GET["ns"] !== "") {
|
||||
if (!isset($_GET["ns"])) {
|
||||
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
||||
}
|
||||
if (!set_schema($_GET["ns"])) {
|
||||
page_header(lang('Schema') . ": " . h($_GET["ns"]), lang('Invalid schema.'), true);
|
||||
page_footer("ns");
|
||||
exit;
|
||||
if (support("scheme")) {
|
||||
if (DB != "" && $_GET["ns"] !== "") {
|
||||
if (!isset($_GET["ns"])) {
|
||||
redirect(preg_replace('~ns=[^&]*&~', '', ME) . "ns=" . get_schema());
|
||||
}
|
||||
if (!set_schema($_GET["ns"])) {
|
||||
header("HTTP/1.1 404 Not Found");
|
||||
page_header(lang('Schema') . ": " . h($_GET["ns"]), lang('Invalid schema.'), true);
|
||||
page_footer("ns");
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,52 +2,80 @@
|
||||
/** Print HTML header
|
||||
* @param string used in title, breadcrumb and heading, should be HTML escaped
|
||||
* @param string
|
||||
* @param mixed array("key" => "link=desc", "key2" => array("link", "desc")), null for nothing, false for driver only, true for driver and server
|
||||
* @param string used after colon in title and heading, will be HTML escaped
|
||||
* @param mixed array("key" => "link", "key2" => array("link", "desc")), null for nothing, false for driver only, true for driver and server
|
||||
* @param string used after colon in title and heading, should be HTML escaped
|
||||
* @return null
|
||||
*/
|
||||
function page_header($title, $error = "", $breadcrumb = array(), $title2 = "") {
|
||||
global $LANG, $adminer, $connection, $drivers;
|
||||
header("Content-Type: text/html; charset=utf-8");
|
||||
if ($adminer->headers()) {
|
||||
header("X-Frame-Options: deny"); // ClickJacking protection in IE8, Safari 4, Chrome 2, Firefox 3.6.9
|
||||
header("X-XSS-Protection: 0"); // prevents introducing XSS in IE8 by removing safe parts of the page
|
||||
global $LANG, $VERSION, $adminer, $drivers, $jush;
|
||||
page_headers();
|
||||
if (is_ajax() && $error) {
|
||||
page_messages($error);
|
||||
exit;
|
||||
}
|
||||
$title_all = $title . ($title2 != "" ? ": " . h($title2) : "");
|
||||
$title_all = $title . ($title2 != "" ? ": $title2" : "");
|
||||
$title_page = strip_tags($title_all . (SERVER != "" && SERVER != "localhost" ? h(" - " . SERVER) : "") . " - " . $adminer->name());
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="<?php echo $LANG; ?>" dir="<?php echo lang('ltr'); ?>">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Script-Type" content="text/javascript">
|
||||
<meta name="robots" content="noindex">
|
||||
<title><?php echo $title_page; ?></title>
|
||||
<link rel="stylesheet" type="text/css" href="../adminer/static/default.css">
|
||||
<script type="text/javascript" src="../adminer/static/functions.js"></script>
|
||||
<script type="text/javascript" src="static/editing.js"></script>
|
||||
<?php echo script_src("../adminer/static/functions.js"); ?>
|
||||
<?php echo script_src("static/editing.js"); ?>
|
||||
<?php if ($adminer->head()) { ?>
|
||||
<link rel="shortcut icon" type="image/x-icon" href="../adminer/static/favicon.ico" id="favicon">
|
||||
<?php if (file_exists("adminer.css")) { ?>
|
||||
<link rel="stylesheet" type="text/css" href="adminer.css">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="../adminer/static/favicon.ico">
|
||||
<link rel="apple-touch-icon" href="../adminer/static/favicon.ico">
|
||||
<?php foreach ($adminer->css() as $css) { ?>
|
||||
<link rel="stylesheet" type="text/css" href="<?php echo h($css); ?>">
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
||||
<body class="<?php echo lang('ltr'); ?> nojs" onkeydown="bodyKeydown(event);" onclick="bodyClick(event);" onload="bodyLoad('<?php echo (is_object($connection) ? substr($connection->server_info, 0, 3) : ""); ?>');<?php echo (isset($_COOKIE["adminer_version"]) ? "" : " verifyVersion();"); ?>">
|
||||
<script type="text/javascript">
|
||||
<body class="<?php echo lang('ltr'); ?> nojs">
|
||||
<?php
|
||||
$filename = get_temp_dir() . "/adminer.version";
|
||||
if (!$_COOKIE["adminer_version"] && function_exists('openssl_verify') && file_exists($filename) && filemtime($filename) + 86400 > time()) { // 86400 - 1 day in seconds
|
||||
$version = unserialize(file_get_contents($filename));
|
||||
$public = "-----BEGIN PUBLIC KEY-----
|
||||
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqWOVuF5uw7/+Z70djoK
|
||||
RlHIZFZPO0uYRezq90+7Amk+FDNd7KkL5eDve+vHRJBLAszF/7XKXe11xwliIsFs
|
||||
DFWQlsABVZB3oisKCBEuI71J4kPH8dKGEWR9jDHFw3cWmoH3PmqImX6FISWbG3B8
|
||||
h7FIx3jEaw5ckVPVTeo5JRm/1DZzJxjyDenXvBQ/6o9DgZKeNDgxwKzH+sw9/YCO
|
||||
jHnq1cFpOIISzARlrHMa/43YfeNRAm/tsBXjSxembBPo7aQZLAWHmaj5+K19H10B
|
||||
nCpz9Y++cipkVEiKRGih4ZEvjoFysEOdRLj6WiD/uUNky4xGeA6LaJqh5XpkFkcQ
|
||||
fQIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
";
|
||||
if (openssl_verify($version["version"], base64_decode($version["signature"]), $public) == 1) {
|
||||
$_COOKIE["adminer_version"] = $version["version"]; // doesn't need to send to the browser
|
||||
}
|
||||
}
|
||||
?>
|
||||
<script<?php echo nonce(); ?>>
|
||||
mixin(document.body, {onkeydown: bodyKeydown, onclick: bodyClick<?php
|
||||
echo (isset($_COOKIE["adminer_version"]) ? "" : ", onload: partial(verifyVersion, '$VERSION', '" . js_escape(ME) . "', '" . get_token() . "')"); // $token may be empty in auth.inc.php
|
||||
?>});
|
||||
document.body.className = document.body.className.replace(/ nojs/, ' js');
|
||||
var offlineMessage = '<?php echo js_escape(lang('You are offline.')); ?>';
|
||||
var thousandsSeparator = '<?php echo js_escape(lang(',')); ?>';
|
||||
</script>
|
||||
|
||||
<div id="help" class="jush-<?php echo $jush; ?> jsonly hidden"></div>
|
||||
<?php echo script("mixin(qs('#help'), {onmouseover: function () { helpOpen = 1; }, onmouseout: helpMouseout});"); ?>
|
||||
|
||||
<div id="content">
|
||||
<?php
|
||||
if ($breadcrumb !== null) {
|
||||
$link = substr(preg_replace('~(username|db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
$link = substr(preg_replace('~\b(username|db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
echo '<p id="breadcrumb"><a href="' . h($link ? $link : ".") . '">' . $drivers[DRIVER] . '</a> » ';
|
||||
$link = substr(preg_replace('~(db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
$server = (SERVER != "" ? h(SERVER) : lang('Server'));
|
||||
$link = substr(preg_replace('~\b(db|ns)=[^&]*&~', '', ME), 0, -1);
|
||||
$server = $adminer->serverName(SERVER);
|
||||
$server = ($server != "" ? $server : lang('Server'));
|
||||
if ($breadcrumb === false) {
|
||||
echo "$server\n";
|
||||
} else {
|
||||
echo "<a href='" . ($link ? h($link) : ".") . "' accesskey='1' title='Alt+Shift+1'>$server</a> » ";
|
||||
echo "<a href='" . h($link) . "' accesskey='1' title='Alt+Shift+1'>$server</a> » ";
|
||||
if ($_GET["ns"] != "" || (DB != "" && is_array($breadcrumb))) {
|
||||
echo '<a href="' . h($link . "&db=" . urlencode(DB) . (support("scheme") ? "&ns=" : "")) . '">' . h(DB) . '</a> » ';
|
||||
}
|
||||
@@ -56,9 +84,9 @@ document.body.className = document.body.className.replace(/ nojs/, ' js');
|
||||
echo '<a href="' . h(substr(ME, 0, -1)) . '">' . h($_GET["ns"]) . '</a> » ';
|
||||
}
|
||||
foreach ($breadcrumb as $key => $val) {
|
||||
$desc = (is_array($val) ? $val[1] : $val);
|
||||
$desc = (is_array($val) ? $val[1] : h($val));
|
||||
if ($desc != "") {
|
||||
echo '<a href="' . h(ME . "$key=") . urlencode(is_array($val) ? $val[0] : $val) . '">' . h($desc) . '</a> » ';
|
||||
echo "<a href='" . h(ME . "$key=") . urlencode(is_array($val) ? $val[0] : $val) . "'>$desc</a> » ";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -66,22 +94,79 @@ document.body.className = document.body.className.replace(/ nojs/, ' js');
|
||||
}
|
||||
}
|
||||
echo "<h2>$title_all</h2>\n";
|
||||
echo "<div id='ajaxstatus' class='jsonly hidden'></div>\n";
|
||||
restart_session();
|
||||
$uri = preg_replace('~^[^?]*~', '', $_SERVER["REQUEST_URI"]);
|
||||
$messages = $_SESSION["messages"][$uri];
|
||||
if ($messages) {
|
||||
echo "<div class='message'>" . implode("</div>\n<div class='message'>", $messages) . "</div>\n";
|
||||
unset($_SESSION["messages"][$uri]);
|
||||
}
|
||||
page_messages($error);
|
||||
$databases = &get_session("dbs");
|
||||
if (DB != "" && $databases && !in_array(DB, $databases, true)) {
|
||||
$databases = null;
|
||||
}
|
||||
stop_session();
|
||||
define("PAGE_HEADER", 1);
|
||||
}
|
||||
|
||||
/** Send HTTP headers
|
||||
* @return null
|
||||
*/
|
||||
function page_headers() {
|
||||
global $adminer;
|
||||
header("Content-Type: text/html; charset=utf-8");
|
||||
header("Cache-Control: no-cache");
|
||||
header("X-Frame-Options: deny"); // ClickJacking protection in IE8, Safari 4, Chrome 2, Firefox 3.6.9
|
||||
header("X-XSS-Protection: 0"); // prevents introducing XSS in IE8 by removing safe parts of the page
|
||||
header("X-Content-Type-Options: nosniff");
|
||||
header("Referrer-Policy: origin-when-cross-origin");
|
||||
foreach ($adminer->csp() as $csp) {
|
||||
$header = array();
|
||||
foreach ($csp as $key => $val) {
|
||||
$header[] = "$key $val";
|
||||
}
|
||||
header("Content-Security-Policy: " . implode("; ", $header));
|
||||
}
|
||||
$adminer->headers();
|
||||
}
|
||||
|
||||
/** Get Content Security Policy headers
|
||||
* @return array of arrays with directive name in key, allowed sources in value
|
||||
*/
|
||||
function csp() {
|
||||
return array(
|
||||
array(
|
||||
"script-src" => "'self' 'unsafe-inline' 'nonce-" . get_nonce() . "' 'strict-dynamic'", // 'self' is a fallback for browsers not supporting 'strict-dynamic', 'unsafe-inline' is a fallback for browsers not supporting 'nonce-'
|
||||
"connect-src" => "'self'",
|
||||
"frame-src" => "https://www.adminer.org",
|
||||
"object-src" => "'none'",
|
||||
"base-uri" => "'none'",
|
||||
"form-action" => "'self'",
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/** Get a CSP nonce
|
||||
* @return string Base64 value
|
||||
*/
|
||||
function get_nonce() {
|
||||
static $nonce;
|
||||
if (!$nonce) {
|
||||
$nonce = base64_encode(rand_string());
|
||||
}
|
||||
return $nonce;
|
||||
}
|
||||
|
||||
/** Print flash and error messages
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function page_messages($error) {
|
||||
$uri = preg_replace('~^[^?]*~', '', $_SERVER["REQUEST_URI"]);
|
||||
$messages = $_SESSION["messages"][$uri];
|
||||
if ($messages) {
|
||||
echo "<div class='message'>" . implode("</div>\n<div class='message'>", $messages) . "</div>" . script("messagesPrint();");
|
||||
unset($_SESSION["messages"][$uri]);
|
||||
}
|
||||
if ($error) {
|
||||
echo "<div class='error'>$error</div>\n";
|
||||
}
|
||||
define("PAGE_HEADER", 1);
|
||||
}
|
||||
|
||||
/** Print HTML footer
|
||||
@@ -89,13 +174,22 @@ document.body.className = document.body.className.replace(/ nojs/, ' js');
|
||||
* @return null
|
||||
*/
|
||||
function page_footer($missing = "") {
|
||||
global $adminer;
|
||||
global $adminer, $token;
|
||||
?>
|
||||
</div>
|
||||
|
||||
<?php switch_lang(); ?>
|
||||
<?php if ($missing != "auth") { ?>
|
||||
<form action="" method="post">
|
||||
<p class="logout">
|
||||
<input type="submit" name="logout" value="<?php echo lang('Logout'); ?>" id="logout">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</p>
|
||||
</form>
|
||||
<?php } ?>
|
||||
<div id="menu">
|
||||
<?php $adminer->navigation($missing); ?>
|
||||
</div>
|
||||
<?php
|
||||
echo script("setupSubmitHighlight(document);");
|
||||
}
|
||||
|
||||
179
adminer/include/driver.inc.php
Normal file
179
adminer/include/driver.inc.php
Normal file
@@ -0,0 +1,179 @@
|
||||
<?php
|
||||
$drivers = array();
|
||||
|
||||
/** Add a driver
|
||||
* @param string
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function add_driver($id, $name) {
|
||||
global $drivers;
|
||||
$drivers[$id] = $name;
|
||||
}
|
||||
|
||||
/*abstract*/ class Min_SQL {
|
||||
var $_conn;
|
||||
|
||||
/** Create object for performing database operations
|
||||
* @param Min_DB
|
||||
*/
|
||||
function __construct($connection) {
|
||||
$this->_conn = $connection;
|
||||
}
|
||||
|
||||
/** Select data from table
|
||||
* @param string
|
||||
* @param array result of $adminer->selectColumnsProcess()[0]
|
||||
* @param array result of $adminer->selectSearchProcess()
|
||||
* @param array result of $adminer->selectColumnsProcess()[1]
|
||||
* @param array result of $adminer->selectOrderProcess()
|
||||
* @param int result of $adminer->selectLimitProcess()
|
||||
* @param int index of page starting at zero
|
||||
* @param bool whether to print the query
|
||||
* @return Min_Result
|
||||
*/
|
||||
function select($table, $select, $where, $group, $order = array(), $limit = 1, $page = 0, $print = false) {
|
||||
global $adminer, $jush;
|
||||
$is_group = (count($group) < count($select));
|
||||
$query = $adminer->selectQueryBuild($select, $where, $group, $order, $limit, $page);
|
||||
if (!$query) {
|
||||
$query = "SELECT" . limit(
|
||||
($_GET["page"] != "last" && $limit != "" && $group && $is_group && $jush == "sql" ? "SQL_CALC_FOUND_ROWS " : "") . implode(", ", $select) . "\nFROM " . table($table),
|
||||
($where ? "\nWHERE " . implode(" AND ", $where) : "") . ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : ""),
|
||||
($limit != "" ? +$limit : null),
|
||||
($page ? $limit * $page : 0),
|
||||
"\n"
|
||||
);
|
||||
}
|
||||
$start = microtime(true);
|
||||
$return = $this->_conn->query($query);
|
||||
if ($print) {
|
||||
echo $adminer->selectQuery($query, $start, !$return);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Delete data from table
|
||||
* @param string
|
||||
* @param string " WHERE ..."
|
||||
* @param int 0 or 1
|
||||
* @return bool
|
||||
*/
|
||||
function delete($table, $queryWhere, $limit = 0) {
|
||||
$query = "FROM " . table($table);
|
||||
return queries("DELETE" . ($limit ? limit1($table, $query, $queryWhere) : " $query$queryWhere"));
|
||||
}
|
||||
|
||||
/** Update data in table
|
||||
* @param string
|
||||
* @param array escaped columns in keys, quoted data in values
|
||||
* @param string " WHERE ..."
|
||||
* @param int 0 or 1
|
||||
* @param string
|
||||
* @return bool
|
||||
*/
|
||||
function update($table, $set, $queryWhere, $limit = 0, $separator = "\n") {
|
||||
$values = array();
|
||||
foreach ($set as $key => $val) {
|
||||
$values[] = "$key = $val";
|
||||
}
|
||||
$query = table($table) . " SET$separator" . implode(",$separator", $values);
|
||||
return queries("UPDATE" . ($limit ? limit1($table, $query, $queryWhere, $separator) : " $query$queryWhere"));
|
||||
}
|
||||
|
||||
/** Insert data into table
|
||||
* @param string
|
||||
* @param array escaped columns in keys, quoted data in values
|
||||
* @return bool
|
||||
*/
|
||||
function insert($table, $set) {
|
||||
return queries("INSERT INTO " . table($table) . ($set
|
||||
? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")"
|
||||
: " DEFAULT VALUES"
|
||||
));
|
||||
}
|
||||
|
||||
/** Insert or update data in table
|
||||
* @param string
|
||||
* @param array
|
||||
* @param array of arrays with escaped columns in keys and quoted data in values
|
||||
* @return bool
|
||||
*/
|
||||
/*abstract*/ function insertUpdate($table, $rows, $primary) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Begin transaction
|
||||
* @return bool
|
||||
*/
|
||||
function begin() {
|
||||
return queries("BEGIN");
|
||||
}
|
||||
|
||||
/** Commit transaction
|
||||
* @return bool
|
||||
*/
|
||||
function commit() {
|
||||
return queries("COMMIT");
|
||||
}
|
||||
|
||||
/** Rollback transaction
|
||||
* @return bool
|
||||
*/
|
||||
function rollback() {
|
||||
return queries("ROLLBACK");
|
||||
}
|
||||
|
||||
/** Return query with a timeout
|
||||
* @param string
|
||||
* @param int seconds
|
||||
* @return string or null if the driver doesn't support query timeouts
|
||||
*/
|
||||
function slowQuery($query, $timeout) {
|
||||
}
|
||||
|
||||
/** Convert column to be searchable
|
||||
* @param string escaped column name
|
||||
* @param array array("op" => , "val" => )
|
||||
* @param array
|
||||
* @return string
|
||||
*/
|
||||
function convertSearch($idf, $val, $field) {
|
||||
return $idf;
|
||||
}
|
||||
|
||||
/** Convert value returned by database to actual value
|
||||
* @param string
|
||||
* @param array
|
||||
* @return string
|
||||
*/
|
||||
function value($val, $field) {
|
||||
return (method_exists($this->_conn, 'value')
|
||||
? $this->_conn->value($val, $field)
|
||||
: (is_resource($val) ? stream_get_contents($val) : $val)
|
||||
);
|
||||
}
|
||||
|
||||
/** Quote binary string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function quoteBinary($s) {
|
||||
return q($s);
|
||||
}
|
||||
|
||||
/** Get warnings about the last command
|
||||
* @return string HTML
|
||||
*/
|
||||
function warnings() {
|
||||
return '';
|
||||
}
|
||||
|
||||
/** Get help link for table
|
||||
* @param string
|
||||
* @return string relative URL or null
|
||||
*/
|
||||
function tableHelp($name) {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,11 +2,12 @@
|
||||
/** Print select result
|
||||
* @param Min_Result
|
||||
* @param Min_DB connection to examine indexes
|
||||
* @param string base link for <th> fields
|
||||
* @param array
|
||||
* @return null
|
||||
* @param array
|
||||
* @param int
|
||||
* @return array $orgtables
|
||||
*/
|
||||
function select($result, $connection2 = null, $href = "", $orgtables = array()) {
|
||||
function select($result, $connection2 = null, $orgtables = array(), $limit = 0) {
|
||||
global $jush;
|
||||
$links = array(); // colno => orgtable - create links from these columns
|
||||
$indexes = array(); // orgtable => array(column => colno) - primary keys
|
||||
$columns = array(); // orgtable => array(column => ) - not selected columns in primary key
|
||||
@@ -14,8 +15,9 @@ function select($result, $connection2 = null, $href = "", $orgtables = array())
|
||||
$types = array(); // colno => type - display char in <code>
|
||||
$return = array(); // table => orgtable - mapping to use in EXPLAIN
|
||||
odd(''); // reset odd for each result
|
||||
for ($i=0; $row = $result->fetch_row(); $i++) {
|
||||
for ($i=0; (!$limit || $i < $limit) && ($row = $result->fetch_row()); $i++) {
|
||||
if (!$i) {
|
||||
echo "<div class='scrollable'>\n";
|
||||
echo "<table cellspacing='0' class='nowrap'>\n";
|
||||
echo "<thead><tr>";
|
||||
for ($j=0; $j < count($row); $j++) {
|
||||
@@ -24,7 +26,7 @@ function select($result, $connection2 = null, $href = "", $orgtables = array())
|
||||
$orgtable = $field->orgtable;
|
||||
$orgname = $field->orgname;
|
||||
$return[$field->table] = $orgtable;
|
||||
if ($href) { // MySQL EXPLAIN
|
||||
if ($orgtables && $jush == "sql") { // MySQL EXPLAIN
|
||||
$links[$j] = ($name == "table" ? "table=" : ($name == "possible_keys" ? "indexes=" : null));
|
||||
} elseif ($orgtable != "") {
|
||||
if (!isset($indexes[$orgtable])) {
|
||||
@@ -48,41 +50,48 @@ function select($result, $connection2 = null, $href = "", $orgtables = array())
|
||||
$blobs[$j] = true;
|
||||
}
|
||||
$types[$j] = $field->type;
|
||||
$name = h($name);
|
||||
echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . ($href ? "<a href='$href" . strtolower($name) . "' target='_blank' rel='noreferrer'>$name</a>" : $name);
|
||||
echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . h($name)
|
||||
. ($orgtables ? doc_link(array(
|
||||
'sql' => "explain-output.html#explain_" . strtolower($name),
|
||||
'mariadb' => "explain/#the-columns-in-explain-select",
|
||||
)) : "")
|
||||
;
|
||||
}
|
||||
echo "</thead>\n";
|
||||
}
|
||||
echo "<tr" . odd() . ">";
|
||||
foreach ($row as $key => $val) {
|
||||
$link = "";
|
||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||
if ($orgtables && $jush == "sql") { // MySQL EXPLAIN
|
||||
$table = $row[array_search("table=", $links)];
|
||||
$link = ME . $links[$key] . urlencode($orgtables[$table] != "" ? $orgtables[$table] : $table);
|
||||
} else {
|
||||
$link = ME . "edit=" . urlencode($links[$key]);
|
||||
foreach ($indexes[$links[$key]] as $col => $j) {
|
||||
$link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]);
|
||||
}
|
||||
}
|
||||
} elseif (is_url($val)) {
|
||||
$link = $val;
|
||||
}
|
||||
if ($val === null) {
|
||||
$val = "<i>NULL</i>";
|
||||
} elseif ($blobs[$key] && !is_utf8($val)) {
|
||||
$val = "<i>" . lang('%d byte(s)', strlen($val)) . "</i>"; //! link to download
|
||||
} elseif (!strlen($val)) { // strlen - SQLite can return int
|
||||
$val = " "; // some content to print a border
|
||||
} else {
|
||||
$val = h($val);
|
||||
if ($types[$key] == 254) { // 254 - char
|
||||
$val = "<code>$val</code>";
|
||||
}
|
||||
}
|
||||
if (isset($links[$key]) && !$columns[$links[$key]]) {
|
||||
if ($href) { // MySQL EXPLAIN
|
||||
$table = $row[array_search("table=", $links)];
|
||||
$link = $links[$key] . urlencode($orgtables[$table] != "" ? $orgtables[$table] : $table);
|
||||
} else {
|
||||
$link = "edit=" . urlencode($links[$key]);
|
||||
foreach ($indexes[$links[$key]] as $col => $j) {
|
||||
$link .= "&where" . urlencode("[" . bracket_escape($col) . "]") . "=" . urlencode($row[$j]);
|
||||
}
|
||||
}
|
||||
$val = "<a href='" . h(ME . $link) . "'>$val</a>";
|
||||
if ($link) {
|
||||
$val = "<a href='" . h($link) . "'" . (is_url($link) ? target_blank() : '') . ">$val</a>";
|
||||
}
|
||||
echo "<td>$val";
|
||||
}
|
||||
}
|
||||
echo ($i ? "</table>" : "<p class='message'>" . lang('No rows.')) . "\n";
|
||||
echo ($i ? "</table>\n</div>" : "<p class='message'>" . lang('No rows.')) . "\n";
|
||||
return $return;
|
||||
}
|
||||
|
||||
@@ -92,7 +101,7 @@ function select($result, $connection2 = null, $href = "", $orgtables = array())
|
||||
*/
|
||||
function referencable_primary($self) {
|
||||
$return = array(); // table_name => field
|
||||
foreach (table_status() as $table_name => $table) {
|
||||
foreach (table_status('', true) as $table_name => $table) {
|
||||
if ($table_name != $self && fk_support($table)) {
|
||||
foreach (fields($table_name) as $field) {
|
||||
if ($field["primary"]) {
|
||||
@@ -108,18 +117,44 @@ function referencable_primary($self) {
|
||||
return $return;
|
||||
}
|
||||
|
||||
/** Get settings stored in a cookie
|
||||
* @return array
|
||||
*/
|
||||
function adminer_settings() {
|
||||
parse_str($_COOKIE["adminer_settings"], $settings);
|
||||
return $settings;
|
||||
}
|
||||
|
||||
/** Get setting stored in a cookie
|
||||
* @param string
|
||||
* @return array
|
||||
*/
|
||||
function adminer_setting($key) {
|
||||
$settings = adminer_settings();
|
||||
return $settings[$key];
|
||||
}
|
||||
|
||||
/** Store settings to a cookie
|
||||
* @param array
|
||||
* @return bool
|
||||
*/
|
||||
function set_adminer_settings($settings) {
|
||||
return cookie("adminer_settings", http_build_query($settings + adminer_settings()));
|
||||
}
|
||||
|
||||
/** Print SQL <textarea> tag
|
||||
* @param string
|
||||
* @param string or array in which case [0] of every element is used
|
||||
* @param int
|
||||
* @param int
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
echo "<textarea name='$name' rows='$rows' cols='$cols' class='sqlarea' spellcheck='false' wrap='off' onkeydown='return textareaKeydown(this, event);'>"; // spellcheck, wrap - not valid before HTML5
|
||||
global $jush;
|
||||
echo "<textarea name='" . h($name) . "' rows='$rows' cols='$cols' class='sqlarea jush-$jush' spellcheck='false' wrap='off'>";
|
||||
if (is_array($value)) {
|
||||
foreach ($value as $val) { // not implode() to save memory
|
||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time)
|
||||
echo h($val[0]) . "\n\n\n"; // $val == array($query, $time, $elapsed)
|
||||
}
|
||||
} else {
|
||||
echo h($value);
|
||||
@@ -127,30 +162,31 @@ function textarea($name, $value, $rows = 10, $cols = 80) {
|
||||
echo "</textarea>";
|
||||
}
|
||||
|
||||
/** Format time difference
|
||||
* @param string output of microtime()
|
||||
* @param string output of microtime()
|
||||
* @return string HTML code
|
||||
*/
|
||||
function format_time($start, $end) {
|
||||
return " <span class='time'>(" . lang('%.3f s', max(0, array_sum(explode(" ", $end)) - array_sum(explode(" ", $start)))) . ")</span>";
|
||||
}
|
||||
|
||||
/** Print table columns for type edit
|
||||
* @param string
|
||||
* @param array
|
||||
* @param array
|
||||
* @param array returned by referencable_primary()
|
||||
* @param array extra types to prepend
|
||||
* @return null
|
||||
*/
|
||||
function edit_type($key, $field, $collations, $foreign_keys = array()) {
|
||||
function edit_type($key, $field, $collations, $foreign_keys = array(), $extra_types = array()) {
|
||||
global $structured_types, $types, $unsigned, $on_actions;
|
||||
$type = $field["type"];
|
||||
?>
|
||||
<td><select name="<?php echo $key; ?>[type]" class="type" onfocus="lastType = selectValue(this);" onchange="editingTypeChange(this);"><?php echo optionlist((!$field["type"] || isset($types[$field["type"]]) ? array() : array($field["type"])) + $structured_types + ($foreign_keys ? array(lang('Foreign keys') => $foreign_keys) : array()), $field["type"]); ?></select>
|
||||
<td><input name="<?php echo $key; ?>[length]" value="<?php echo h($field["length"]); ?>" size="3" onfocus="editingLengthFocus(this);"><td class="options"><?php //! type="number" with enabled JavaScript
|
||||
echo "<select name='$key" . "[collation]'" . (ereg('(char|text|enum|set)$', $field["type"]) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
|
||||
echo ($unsigned ? "<select name='$key" . "[unsigned]'" . (!$field["type"] || ereg('(int|float|double|decimal)$', $field["type"]) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
|
||||
echo ($foreign_keys ? "<select name='$key" . "[on_delete]'" . (ereg("`", $field["type"]) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist(explode("|", $on_actions), $field["on_delete"]) . "</select> " : " "); // space for IE
|
||||
<td><select name="<?php echo h($key); ?>[type]" class="type" aria-labelledby="label-type"><?php
|
||||
if ($type && !isset($types[$type]) && !isset($foreign_keys[$type]) && !in_array($type, $extra_types)) {
|
||||
$extra_types[] = $type;
|
||||
}
|
||||
if ($foreign_keys) {
|
||||
$structured_types[lang('Foreign keys')] = $foreign_keys;
|
||||
}
|
||||
echo optionlist(array_merge($extra_types, $structured_types), $type);
|
||||
?></select><td><input name="<?php echo h($key); ?>[length]" value="<?php echo h($field["length"]); ?>" size="3"<?php echo (!$field["length"] && preg_match('~var(char|binary)$~', $type) ? " class='required'" : ""); //! type="number" with enabled JavaScript ?> aria-labelledby="label-length"><td class="options"><?php
|
||||
echo "<select name='" . h($key) . "[collation]'" . (preg_match('~(char|text|enum|set)$~', $type) ? "" : " class='hidden'") . '><option value="">(' . lang('collation') . ')' . optionlist($collations, $field["collation"]) . '</select>';
|
||||
echo ($unsigned ? "<select name='" . h($key) . "[unsigned]'" . (!$type || preg_match(number_type(), $type) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : '');
|
||||
echo (isset($field['on_update']) ? "<select name='" . h($key) . "[on_update]'" . (preg_match('~timestamp|datetime~', $type) ? "" : " class='hidden'") . '>' . optionlist(array("" => "(" . lang('ON UPDATE') . ")", "CURRENT_TIMESTAMP"), (preg_match('~^CURRENT_TIMESTAMP~i', $field["on_update"]) ? "CURRENT_TIMESTAMP" : $field["on_update"])) . '</select>' : '');
|
||||
echo ($foreign_keys ? "<select name='" . h($key) . "[on_delete]'" . (preg_match("~`~", $type) ? "" : " class='hidden'") . "><option value=''>(" . lang('ON DELETE') . ")" . optionlist(explode("|", $on_actions), $field["on_delete"]) . "</select> " : " "); // space for IE
|
||||
}
|
||||
|
||||
/** Filter length value including enums
|
||||
@@ -159,7 +195,10 @@ function edit_type($key, $field, $collations, $foreign_keys = array()) {
|
||||
*/
|
||||
function process_length($length) {
|
||||
global $enum_length;
|
||||
return (preg_match("~^\\s*(?:$enum_length)(?:\\s*,\\s*(?:$enum_length))*\\s*\$~", $length) && preg_match_all("~$enum_length~", $length, $matches) ? implode(",", $matches[0]) : preg_replace('~[^0-9,+-]~', '', $length));
|
||||
return (preg_match("~^\\s*\\(?\\s*$enum_length(?:\\s*,\\s*$enum_length)*+\\s*\\)?\\s*\$~", $length) && preg_match_all("~$enum_length~", $length, $matches)
|
||||
? "(" . implode(",", $matches[0]) . ")"
|
||||
: preg_replace('~^[0-9].*~', '(\0)', preg_replace('~[^-0-9,+()[\]]~', '', $length))
|
||||
);
|
||||
}
|
||||
|
||||
/** Create SQL string from field type
|
||||
@@ -170,9 +209,9 @@ function process_length($length) {
|
||||
function process_type($field, $collate = "COLLATE") {
|
||||
global $unsigned;
|
||||
return " $field[type]"
|
||||
. ($field["length"] != "" ? "(" . process_length($field["length"]) . ")" : "")
|
||||
. (ereg('int|float|double|decimal', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
|
||||
. (ereg('char|text|enum|set', $field["type"]) && $field["collation"] ? " $collate " . q($field["collation"]) : "")
|
||||
. process_length($field["length"])
|
||||
. (preg_match(number_type(), $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
|
||||
. (preg_match('~char|text|enum|set~', $field["type"]) && $field["collation"] ? " $collate " . q($field["collation"]) : "")
|
||||
;
|
||||
}
|
||||
|
||||
@@ -186,13 +225,22 @@ function process_field($field, $type_field) {
|
||||
idf_escape(trim($field["field"])),
|
||||
process_type($type_field),
|
||||
($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp
|
||||
(isset($field["default"]) ? " DEFAULT " . (($field["type"] == "timestamp" && eregi('^CURRENT_TIMESTAMP$', $field["default"])) || ($field["type"] == "bit" && ereg("^([0-9]+|b'[0-1]+')\$", $field["default"])) ? $field["default"] : q($field["default"])) : ""),
|
||||
($field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
||||
default_value($field),
|
||||
(preg_match('~timestamp|datetime~', $field["type"]) && $field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
|
||||
(support("comment") && $field["comment"] != "" ? " COMMENT " . q($field["comment"]) : ""),
|
||||
($field["auto_increment"] ? auto_increment() : null),
|
||||
);
|
||||
}
|
||||
|
||||
/** Get default value clause
|
||||
* @param array
|
||||
* @return string
|
||||
*/
|
||||
function default_value($field) {
|
||||
$default = $field["default"];
|
||||
return ($default === null ? "" : " DEFAULT " . (preg_match('~char|binary|text|enum|set~', $field["type"]) || preg_match('~^(?![a-z])~i', $default) ? q($default) : $default));
|
||||
}
|
||||
|
||||
/** Get type class to use in CSS
|
||||
* @param string
|
||||
* @return string class=''
|
||||
@@ -204,7 +252,7 @@ function type_class($type) {
|
||||
'binary' => 'blob',
|
||||
'enum' => 'set',
|
||||
) as $key => $val) {
|
||||
if (ereg("$key|$val", $type)) {
|
||||
if (preg_match("~$key|$val~", $type)) {
|
||||
return " class='$key'";
|
||||
}
|
||||
}
|
||||
@@ -214,30 +262,38 @@ function type_class($type) {
|
||||
* @param array
|
||||
* @param array
|
||||
* @param string TABLE or PROCEDURE
|
||||
* @param int number of fields allowed by Suhosin
|
||||
* @param array returned by referencable_primary()
|
||||
* @param bool display comments column
|
||||
* @return null
|
||||
*/
|
||||
function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $foreign_keys = array(), $comments = false) {
|
||||
global $connection, $inout;
|
||||
function edit_fields($fields, $collations, $type = "TABLE", $foreign_keys = array()) {
|
||||
global $inout;
|
||||
$fields = array_values($fields);
|
||||
$default_class = (($_POST ? $_POST["defaults"] : adminer_setting("defaults")) ? "" : " class='hidden'");
|
||||
$comment_class = (($_POST ? $_POST["comments"] : adminer_setting("comments")) ? "" : " class='hidden'");
|
||||
?>
|
||||
<thead><tr class="wrap">
|
||||
<?php if ($type == "PROCEDURE") { ?><td> <?php } ?>
|
||||
<th><?php echo ($type == "TABLE" ? lang('Column name') : lang('Parameter name')); ?>
|
||||
<td><?php echo lang('Type'); ?><textarea id="enum-edit" rows="4" cols="12" wrap="off" style="display: none;" onblur="editingLengthBlur(this);"></textarea>
|
||||
<td><?php echo lang('Length'); ?>
|
||||
<td><?php echo lang('Options'); ?>
|
||||
<thead><tr>
|
||||
<?php if ($type == "PROCEDURE") { ?><td><?php } ?>
|
||||
<th id="label-name"><?php echo ($type == "TABLE" ? lang('Column name') : lang('Parameter name')); ?>
|
||||
<td id="label-type"><?php echo lang('Type'); ?><textarea id="enum-edit" rows="4" cols="12" wrap="off" style="display: none;"></textarea><?php echo script("qs('#enum-edit').onblur = editingLengthBlur;"); ?>
|
||||
<td id="label-length"><?php echo lang('Length'); ?>
|
||||
<td><?php echo lang('Options'); /* no label required, options have their own label */ ?>
|
||||
<?php if ($type == "TABLE") { ?>
|
||||
<td>NULL
|
||||
<td><input type="radio" name="auto_increment_col" value=""><acronym title="<?php echo lang('Auto Increment'); ?>">AI</acronym>
|
||||
<td><?php echo lang('Default values'); ?>
|
||||
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . ">" . lang('Comment') : ""); ?>
|
||||
<td id="label-null">NULL
|
||||
<td><input type="radio" name="auto_increment_col" value=""><acronym id="label-ai" title="<?php echo lang('Auto Increment'); ?>">AI</acronym><?php echo doc_link(array(
|
||||
'sql' => "example-auto-increment.html",
|
||||
'mariadb' => "auto_increment/",
|
||||
'sqlite' => "autoinc.html",
|
||||
'pgsql' => "datatype.html#DATATYPE-SERIAL",
|
||||
'mssql' => "ms186775.aspx",
|
||||
)); ?>
|
||||
<td id="label-default"<?php echo $default_class; ?>><?php echo lang('Default value'); ?>
|
||||
<?php echo (support("comment") ? "<td id='label-comment'$comment_class>" . lang('Comment') : ""); ?>
|
||||
<?php } ?>
|
||||
<td><?php echo "<input type='image' class='icon' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?><script type="text/javascript">row_count = <?php echo count($fields); ?>;</script>
|
||||
<td><?php echo "<input type='image' class='icon' name='add[" . (support("move_col") ? 0 : count($fields)) . "]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>" . script("row_count = " . count($fields) . ";"); ?>
|
||||
</thead>
|
||||
<tbody onkeydown="return editingKeydown(event);">
|
||||
<tbody>
|
||||
<?php
|
||||
echo script("mixin(qsl('tbody'), {onclick: editingClick, onkeydown: editingKeydown, oninput: editingInput});");
|
||||
foreach ($fields as $i => $field) {
|
||||
$i++;
|
||||
$orig = $field[($_POST ? "orig" : "field")];
|
||||
@@ -245,32 +301,29 @@ function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $forei
|
||||
?>
|
||||
<tr<?php echo ($display ? "" : " style='display: none;'"); ?>>
|
||||
<?php echo ($type == "PROCEDURE" ? "<td>" . html_select("fields[$i][inout]", explode("|", $inout), $field["inout"]) : ""); ?>
|
||||
<th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" onchange="<?php echo ($field["field"] != "" || count($fields) > 1 ? "" : "editingAddRow(this, $allowed); "); ?>editingNameChange(this);" maxlength="64"><?php } ?><input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($orig); ?>">
|
||||
<?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?>
|
||||
<th><?php if ($display) { ?><input name="fields[<?php echo $i; ?>][field]" value="<?php echo h($field["field"]); ?>" data-maxlength="64" autocapitalize="off" aria-labelledby="label-name"><?php } ?>
|
||||
<input type="hidden" name="fields[<?php echo $i; ?>][orig]" value="<?php echo h($orig); ?>"><?php edit_type("fields[$i]", $field, $collations, $foreign_keys); ?>
|
||||
<?php if ($type == "TABLE") { ?>
|
||||
<td><?php echo checkbox("fields[$i][null]", 1, $field["null"]); ?>
|
||||
<td><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> onclick="var field = this.form['fields[' + this.value + '][field]']; if (!field.value) { field.value = 'id'; field.onchange(); }">
|
||||
<td><?php echo checkbox("fields[$i][has_default]", 1, $field["has_default"]); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" onchange="this.previousSibling.checked = true;">
|
||||
<?php echo (support("comment") ? "<td" . ($comments ? "" : " class='hidden'") . "><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' maxlength='" . ($connection->server_info >= 5.5 ? 1024 : 255) . "'>" : ""); ?>
|
||||
<?php } ?>
|
||||
<?php
|
||||
<td><?php echo checkbox("fields[$i][null]", 1, $field["null"], "", "", "block", "label-null"); ?>
|
||||
<td><label class="block"><input type="radio" name="auto_increment_col" value="<?php echo $i; ?>"<?php if ($field["auto_increment"]) { ?> checked<?php } ?> aria-labelledby="label-ai"></label><td<?php echo $default_class; ?>><?php
|
||||
echo checkbox("fields[$i][has_default]", 1, $field["has_default"], "", "", "", "label-default"); ?><input name="fields[<?php echo $i; ?>][default]" value="<?php echo h($field["default"]); ?>" aria-labelledby="label-default"><?php
|
||||
echo (support("comment") ? "<td$comment_class><input name='fields[$i][comment]' value='" . h($field["comment"]) . "' data-maxlength='" . (min_version(5.5) ? 1024 : 255) . "' aria-labelledby='label-comment'>" : "");
|
||||
}
|
||||
echo "<td>";
|
||||
echo (support("move_col") ?
|
||||
"<input type='image' class='icon' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "' onclick='return !editingAddRow(this, $allowed, 1);'> "
|
||||
. "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='^' title='" . lang('Move up') . "'> "
|
||||
. "<input type='image' class='icon' name='down[$i]' src='../adminer/static/down.gif' alt='v' title='" . lang('Move down') . "'> "
|
||||
"<input type='image' class='icon' name='add[$i]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'> "
|
||||
. "<input type='image' class='icon' name='up[$i]' src='../adminer/static/up.gif' alt='↑' title='" . lang('Move up') . "'> "
|
||||
. "<input type='image' class='icon' name='down[$i]' src='../adminer/static/down.gif' alt='↓' title='" . lang('Move down') . "'> "
|
||||
: "");
|
||||
echo ($orig == "" || support("drop_col") ? "<input type='image' class='icon' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "' onclick='return !editingRemoveRow(this);'>" : "");
|
||||
echo "\n";
|
||||
echo ($orig == "" || support("drop_col") ? "<input type='image' class='icon' name='drop_col[$i]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "'>" : "");
|
||||
}
|
||||
}
|
||||
|
||||
/** Move fields up and down or add field
|
||||
* @param array
|
||||
* @return null
|
||||
* @return bool
|
||||
*/
|
||||
function process_fields(&$fields) {
|
||||
ksort($fields);
|
||||
$offset = 0;
|
||||
if ($_POST["up"]) {
|
||||
$last = 0;
|
||||
@@ -285,8 +338,7 @@ function process_fields(&$fields) {
|
||||
}
|
||||
$offset++;
|
||||
}
|
||||
}
|
||||
if ($_POST["down"]) {
|
||||
} elseif ($_POST["down"]) {
|
||||
$found = false;
|
||||
foreach ($fields as $key => $field) {
|
||||
if (isset($field["field"]) && $found) {
|
||||
@@ -299,11 +351,13 @@ function process_fields(&$fields) {
|
||||
}
|
||||
$offset++;
|
||||
}
|
||||
}
|
||||
$fields = array_values($fields);
|
||||
if ($_POST["add"]) {
|
||||
} elseif ($_POST["add"]) {
|
||||
$fields = array_values($fields);
|
||||
array_splice($fields, key($_POST["add"]), 0, array(array()));
|
||||
} elseif (!$_POST["drop_col"]) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Callback used in routine()
|
||||
@@ -332,52 +386,126 @@ function grant($grant, $privileges, $columns, $on) {
|
||||
: queries("$grant ALL PRIVILEGES$on") && queries("$grant GRANT OPTION$on")
|
||||
);
|
||||
}
|
||||
return queries("$grant " . preg_replace('~(GRANT OPTION)\\([^)]*\\)~', '\\1', implode("$columns, ", $privileges) . $columns) . $on);
|
||||
return queries("$grant " . preg_replace('~(GRANT OPTION)\([^)]*\)~', '\1', implode("$columns, ", $privileges) . $columns) . $on);
|
||||
}
|
||||
|
||||
/** Drop old object and create a new one
|
||||
* @param string drop query
|
||||
* @param string create query
|
||||
* @param string drop old object query
|
||||
* @param string create new object query
|
||||
* @param string drop new object query
|
||||
* @param string create test object query
|
||||
* @param string drop test object query
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @param string
|
||||
* @return bool dropped
|
||||
* @param string
|
||||
* @return null redirect in success
|
||||
*/
|
||||
function drop_create($drop, $create, $location, $message_drop, $message_alter, $message_create, $name) {
|
||||
function drop_create($drop, $create, $drop_created, $test, $drop_test, $location, $message_drop, $message_alter, $message_create, $old_name, $new_name) {
|
||||
if ($_POST["drop"]) {
|
||||
return query_redirect($drop, $location, $message_drop, true, !$_POST["dropped"]);
|
||||
query_redirect($drop, $location, $message_drop);
|
||||
} elseif ($old_name == "") {
|
||||
query_redirect($create, $location, $message_create);
|
||||
} elseif ($old_name != $new_name) {
|
||||
$created = queries($create);
|
||||
queries_redirect($location, $message_alter, $created && queries($drop));
|
||||
if ($created) {
|
||||
queries($drop_created);
|
||||
}
|
||||
} else {
|
||||
queries_redirect(
|
||||
$location,
|
||||
$message_alter,
|
||||
queries($test) && queries($drop_test) && queries($drop) && queries($create)
|
||||
);
|
||||
}
|
||||
$dropped = $name != "" && ($_POST["dropped"] || queries($drop));
|
||||
$created = queries($create);
|
||||
if (!queries_redirect($location, ($name != "" ? $message_alter : $message_create), $created) && $dropped) {
|
||||
redirect(null, $message_drop);
|
||||
}
|
||||
|
||||
/** Generate SQL query for creating trigger
|
||||
* @param string
|
||||
* @param array result of trigger()
|
||||
* @return string
|
||||
*/
|
||||
function create_trigger($on, $row) {
|
||||
global $jush;
|
||||
$timing_event = " $row[Timing] $row[Event]" . (preg_match('~ OF~', $row["Event"]) ? " $row[Of]" : ""); // SQL injection
|
||||
return "CREATE TRIGGER "
|
||||
. idf_escape($row["Trigger"])
|
||||
. ($jush == "mssql" ? $on . $timing_event : $timing_event . $on)
|
||||
. rtrim(" $row[Type]\n$row[Statement]", ";")
|
||||
. ";"
|
||||
;
|
||||
}
|
||||
|
||||
/** Generate SQL query for creating routine
|
||||
* @param string "PROCEDURE" or "FUNCTION"
|
||||
* @param array result of routine()
|
||||
* @return string
|
||||
*/
|
||||
function create_routine($routine, $row) {
|
||||
global $inout, $jush;
|
||||
$set = array();
|
||||
$fields = (array) $row["fields"];
|
||||
ksort($fields); // enforce fields order
|
||||
foreach ($fields as $field) {
|
||||
if ($field["field"] != "") {
|
||||
$set[] = (preg_match("~^($inout)\$~", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
||||
}
|
||||
}
|
||||
return $dropped;
|
||||
$definition = rtrim("\n$row[definition]", ";");
|
||||
return "CREATE $routine "
|
||||
. idf_escape(trim($row["name"]))
|
||||
. " (" . implode(", ", $set) . ")"
|
||||
. (isset($_GET["function"]) ? " RETURNS" . process_type($row["returns"], "CHARACTER SET") : "")
|
||||
. ($row["language"] ? " LANGUAGE $row[language]" : "")
|
||||
. ($jush == "pgsql" ? " AS " . q($definition) : "$definition;")
|
||||
;
|
||||
}
|
||||
|
||||
/** Remove current user definer from SQL command
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function remove_definer($query) {
|
||||
return preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $query); //! proper escaping of user
|
||||
}
|
||||
|
||||
/** Get string to add a file in TAR
|
||||
* @param string
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function tar_file($filename, $contents) {
|
||||
$return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time()));
|
||||
function remove_definer($query) {
|
||||
return preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\1)', logged_user()) . '`~', '\1', $query); //! proper escaping of user
|
||||
}
|
||||
|
||||
/** Format foreign key to use in SQL query
|
||||
* @param array ("db" => string, "ns" => string, "table" => string, "source" => array, "target" => array, "on_delete" => one of $on_actions, "on_update" => one of $on_actions)
|
||||
* @return string
|
||||
*/
|
||||
function format_foreign_key($foreign_key) {
|
||||
global $on_actions;
|
||||
$db = $foreign_key["db"];
|
||||
$ns = $foreign_key["ns"];
|
||||
return " FOREIGN KEY (" . implode(", ", array_map('idf_escape', $foreign_key["source"])) . ") REFERENCES "
|
||||
. ($db != "" && $db != $_GET["db"] ? idf_escape($db) . "." : "")
|
||||
. ($ns != "" && $ns != $_GET["ns"] ? idf_escape($ns) . "." : "")
|
||||
. table($foreign_key["table"])
|
||||
. " (" . implode(", ", array_map('idf_escape', $foreign_key["target"])) . ")" //! reuse $name - check in older MySQL versions
|
||||
. (preg_match("~^($on_actions)\$~", $foreign_key["on_delete"]) ? " ON DELETE $foreign_key[on_delete]" : "")
|
||||
. (preg_match("~^($on_actions)\$~", $foreign_key["on_update"]) ? " ON UPDATE $foreign_key[on_update]" : "")
|
||||
;
|
||||
}
|
||||
|
||||
/** Add a file to TAR
|
||||
* @param string
|
||||
* @param TmpFile
|
||||
* @return null prints the output
|
||||
*/
|
||||
function tar_file($filename, $tmp_file) {
|
||||
$return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct($tmp_file->size), decoct(time()));
|
||||
$checksum = 8*32; // space for checksum itself
|
||||
for ($i=0; $i < strlen($return); $i++) {
|
||||
$checksum += ord($return[$i]);
|
||||
}
|
||||
$return .= sprintf("%06o", $checksum) . "\0 ";
|
||||
return $return . str_repeat("\0", 512 - strlen($return)) . $contents . str_repeat("\0", 511 - (strlen($contents) + 511) % 512);
|
||||
echo $return;
|
||||
echo str_repeat("\0", 512 - strlen($return));
|
||||
$tmp_file->send();
|
||||
echo str_repeat("\0", 511 - ($tmp_file->size + 511) % 512);
|
||||
}
|
||||
|
||||
/** Get INI bytes value
|
||||
@@ -393,3 +521,64 @@ function ini_bytes($ini) {
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
|
||||
/** Create link to database documentation
|
||||
* @param array $jush => $path
|
||||
* @param string HTML code
|
||||
* @return string HTML code
|
||||
*/
|
||||
function doc_link($paths, $text = "<sup>?</sup>") {
|
||||
global $jush, $connection;
|
||||
$server_info = $connection->server_info;
|
||||
$version = preg_replace('~^(\d\.?\d).*~s', '\1', $server_info); // two most significant digits
|
||||
$urls = array(
|
||||
'sql' => "https://dev.mysql.com/doc/refman/$version/en/",
|
||||
'sqlite' => "https://www.sqlite.org/",
|
||||
'pgsql' => "https://www.postgresql.org/docs/$version/",
|
||||
'mssql' => "https://msdn.microsoft.com/library/",
|
||||
'oracle' => "https://www.oracle.com/pls/topic/lookup?ctx=db" . preg_replace('~^.* (\d+)\.(\d+)\.\d+\.\d+\.\d+.*~s', '\1\2', $server_info) . "&id=",
|
||||
);
|
||||
if (preg_match('~MariaDB~', $server_info)) {
|
||||
$urls['sql'] = "https://mariadb.com/kb/en/library/";
|
||||
$paths['sql'] = (isset($paths['mariadb']) ? $paths['mariadb'] : str_replace(".html", "/", $paths['sql']));
|
||||
}
|
||||
return ($paths[$jush] ? "<a href='" . h($urls[$jush] . $paths[$jush]) . "'" . target_blank() . ">$text</a>" : "");
|
||||
}
|
||||
|
||||
/** Wrap gzencode() for usage in ob_start()
|
||||
* @param string
|
||||
* @return string
|
||||
*/
|
||||
function ob_gzencode($string) {
|
||||
// ob_start() callback recieves an optional parameter $phase but gzencode() accepts optional parameter $level
|
||||
return gzencode($string);
|
||||
}
|
||||
|
||||
/** Compute size of database
|
||||
* @param string
|
||||
* @return string formatted
|
||||
*/
|
||||
function db_size($db) {
|
||||
global $connection;
|
||||
if (!$connection->select_db($db)) {
|
||||
return "?";
|
||||
}
|
||||
$return = 0;
|
||||
foreach (table_status() as $table_status) {
|
||||
$return += $table_status["Data_length"] + $table_status["Index_length"];
|
||||
}
|
||||
return format_number($return);
|
||||
}
|
||||
|
||||
/** Print SET NAMES if utf8mb4 might be needed
|
||||
* @param string
|
||||
* @return null
|
||||
*/
|
||||
function set_utf8mb4($create) {
|
||||
global $connection;
|
||||
static $set = false;
|
||||
if (!$set && preg_match('~\butf8mb4~i', $create)) { // possible false positive
|
||||
$set = true;
|
||||
echo "SET NAMES " . charset($connection) . ";\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,34 +2,49 @@
|
||||
// not used in a single language version
|
||||
|
||||
$langs = array(
|
||||
'en' => 'English', // Jakub Vrána - http://www.vrana.cz
|
||||
'cs' => 'Čeština', // Jakub Vrána - http://www.vrana.cz
|
||||
'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz
|
||||
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
||||
'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
|
||||
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
|
||||
'fr' => 'Français', // Francis Gagné, Aurélien Royer
|
||||
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
|
||||
'et' => 'Eesti', // Priit Kallas
|
||||
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
|
||||
'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
|
||||
'ca' => 'Català', // Joan Llosas
|
||||
'pt' => 'Português', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br
|
||||
'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
|
||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
|
||||
'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
|
||||
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
|
||||
'ru' => 'Русский язык', // Maksim Izmaylov
|
||||
'uk' => 'Українська', // Valerii Kryzhov
|
||||
'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
|
||||
'zh' => '简体中文', // Mr. Lodar
|
||||
'zh-tw' => '繁體中文', // http://tzangms.com
|
||||
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
||||
'ta' => 'தமிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
|
||||
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
|
||||
'en' => 'English', // Jakub Vrána - https://www.vrana.cz
|
||||
'ar' => 'العربية', // Y.M Amine - Algeria - nbr7@live.fr
|
||||
'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com
|
||||
'bg' => 'Български', // Deyan Delchev
|
||||
'bn' => 'বাংলা', // Dipak Kumar - dipak.ndc@gmail.com
|
||||
'bs' => 'Bosanski', // Emir Kurtovic
|
||||
'ca' => 'Català', // Joan Llosas
|
||||
'cs' => 'Čeština', // Jakub Vrána - https://www.vrana.cz
|
||||
'da' => 'Dansk', // Jarne W. Beutnagel - jarne@beutnagel.dk
|
||||
'de' => 'Deutsch', // Klemens Häckel - http://clickdimension.wordpress.com
|
||||
'el' => 'Ελληνικά', // Dimitrios T. Tanis - jtanis@tanisfood.gr
|
||||
'es' => 'Español', // Klemens Häckel - http://clickdimension.wordpress.com
|
||||
'et' => 'Eesti', // Priit Kallas
|
||||
'fa' => 'فارسی', // mojtaba barghbani - Iran - mbarghbani@gmail.com, Nima Amini - http://nimlog.com
|
||||
'fi' => 'Suomi', // Finnish - Kari Eveli - http://www.lexitec.fi/
|
||||
'fr' => 'Français', // Francis Gagné, Aurélien Royer
|
||||
'gl' => 'Galego', // Eduardo Penabad Ramos
|
||||
'he' => 'עברית', // Binyamin Yawitz - https://stuff-group.com/
|
||||
'hu' => 'Magyar', // Borsos Szilárd (Borsosfi) - http://www.borsosfi.hu, info@borsosfi.hu
|
||||
'id' => 'Bahasa Indonesia', // Ivan Lanin - http://ivan.lanin.org
|
||||
'it' => 'Italiano', // Alessandro Fiorotto, Paolo Asperti
|
||||
'ja' => '日本語', // Hitoshi Ozawa - http://sourceforge.jp/projects/oss-ja-jpn/releases/
|
||||
'ka' => 'ქართული', // Saba Khmaladze skhmaladze@uglt.org
|
||||
'ko' => '한국어', // dalli - skcha67@gmail.com
|
||||
'lt' => 'Lietuvių', // Paulius Leščinskas - http://www.lescinskas.lt
|
||||
'ms' => 'Bahasa Melayu', // Pisyek
|
||||
'nl' => 'Nederlands', // Maarten Balliauw - http://blog.maartenballiauw.be
|
||||
'no' => 'Norsk', // Iver Odin Kvello, mupublishing.com
|
||||
'pl' => 'Polski', // Radosław Kowalewski - http://srsbiz.pl/
|
||||
'pt' => 'Português', // André Dias
|
||||
'pt-br' => 'Português (Brazil)', // Gian Live - gian@live.com, Davi Alexandre davi@davialexandre.com.br, RobertoPC - http://www.robertopc.com.br
|
||||
'ro' => 'Limba Română', // .nick .messing - dot.nick.dot.messing@gmail.com
|
||||
'ru' => 'Русский', // Maksim Izmaylov; Andre Polykanine - https://github.com/Oire/
|
||||
'sk' => 'Slovenčina', // Ivan Suchy - http://www.ivansuchy.com, Juraj Krivda - http://www.jstudio.cz
|
||||
'sl' => 'Slovenski', // Matej Ferlan - www.itdinamik.com, matej.ferlan@itdinamik.com
|
||||
'sr' => 'Српски', // Nikola Radovanović - cobisimo@gmail.com
|
||||
'sv' => 'Svenska', // rasmusolle - https://github.com/rasmusolle
|
||||
'ta' => 'தமிழ்', // G. Sampath Kumar, Chennai, India, sampathkumar11@gmail.com
|
||||
'th' => 'ภาษาไทย', // Panya Saraphi, elect.tu@gmail.com - http://www.opencart2u.com/
|
||||
'tr' => 'Türkçe', // Bilgehan Korkmaz - turktron.com
|
||||
'uk' => 'Українська', // Valerii Kryzhov
|
||||
'vi' => 'Tiếng Việt', // Giang Manh @ manhgd google mail
|
||||
'zh' => '简体中文', // Mr. Lodar, vea - urn2.net - vea.urn2@gmail.com
|
||||
'zh-tw' => '繁體中文', // http://tzangms.com
|
||||
);
|
||||
|
||||
/** Get current language
|
||||
@@ -52,11 +67,11 @@ function lang($idf, $number = null) {
|
||||
$pos = ($number == 1 ? 0
|
||||
: ($LANG == 'cs' || $LANG == 'sk' ? ($number && $number < 5 ? 1 : 2) // different forms for 1, 2-4, other
|
||||
: ($LANG == 'fr' ? (!$number ? 0 : 1) // different forms for 0-1, other
|
||||
: ($LANG == 'pl' ? ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2) // different forms for 1, 2-4, other
|
||||
: ($LANG == 'pl' ? ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2) // different forms for 1, 2-4 except 12-14, other
|
||||
: ($LANG == 'sl' ? ($number % 100 == 1 ? 0 : ($number % 100 == 2 ? 1 : ($number % 100 == 3 || $number % 100 == 4 ? 2 : 3))) // different forms for 1, 2, 3-4, other
|
||||
: ($LANG == 'lt' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 12-19, other
|
||||
: ($LANG == 'ru' || $LANG == 'sr' || $LANG == 'uk' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1, 2-4, other
|
||||
: 1
|
||||
: ($LANG == 'bs' || $LANG == 'ru' || $LANG == 'sr' || $LANG == 'uk' ? ($number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 > 1 && $number % 10 < 5 && $number / 10 % 10 != 1 ? 1 : 2)) // different forms for 1 except 11, 2-4 except 12-14, other
|
||||
: 1 // different forms for 1, other
|
||||
))))))); // http://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
|
||||
$translation = $translation[$pos];
|
||||
}
|
||||
@@ -64,7 +79,7 @@ function lang($idf, $number = null) {
|
||||
array_shift($args);
|
||||
$format = str_replace("%d", "%s", $translation);
|
||||
if ($format != $translation) {
|
||||
$args[0] = number_format($number, 0, ".", lang(','));
|
||||
$args[0] = format_number($number);
|
||||
}
|
||||
return vsprintf($format, $args);
|
||||
}
|
||||
@@ -74,11 +89,11 @@ function switch_lang() {
|
||||
echo "<form action='' method='post'>\n<div id='lang'>";
|
||||
echo lang('Language') . ": " . html_select("lang", $langs, $LANG, "this.form.submit();");
|
||||
echo " <input type='submit' value='" . lang('Use') . "' class='hidden'>\n";
|
||||
echo "<input type='hidden' name='token' value='$_SESSION[token]'>\n"; // $token may be empty in auth.inc.php
|
||||
echo "<input type='hidden' name='token' value='" . get_token() . "'>\n"; // $token may be empty in auth.inc.php
|
||||
echo "</div>\n</form>\n";
|
||||
}
|
||||
|
||||
if (isset($_POST["lang"]) && $_SESSION["token"] == $_POST["token"]) { // $token and $error not yet available
|
||||
if (isset($_POST["lang"]) && verify_token()) { // $error not yet available
|
||||
cookie("adminer_lang", $_POST["lang"]);
|
||||
$_SESSION["lang"] = $_POST["lang"]; // cookies may be disabled
|
||||
$_SESSION["translations"] = array(); // used in compiled version
|
||||
|
||||
@@ -1,33 +1,42 @@
|
||||
<?php
|
||||
// PDO can be used in several database drivers
|
||||
if (extension_loaded('pdo')) {
|
||||
/*abstract*/ class Min_PDO extends PDO {
|
||||
var $_result, $server_info, $affected_rows, $error;
|
||||
/*abstract*/ class Min_PDO {
|
||||
var $_result, $server_info, $affected_rows, $errno, $error, $pdo;
|
||||
|
||||
function __construct() {
|
||||
global $adminer;
|
||||
$pos = array_search("", $adminer->operators);
|
||||
$pos = array_search("SQL", $adminer->operators);
|
||||
if ($pos !== false) {
|
||||
unset($adminer->operators[$pos]);
|
||||
}
|
||||
}
|
||||
|
||||
function dsn($dsn, $username, $password, $exception_handler = 'auth_error') {
|
||||
set_exception_handler($exception_handler); // try/catch is not compatible with PHP 4
|
||||
parent::__construct($dsn, $username, $password);
|
||||
restore_exception_handler();
|
||||
$this->setAttribute(13, array('Min_PDOStatement')); // 13 - PDO::ATTR_STATEMENT_CLASS
|
||||
$this->server_info = $this->getAttribute(4); // 4 - PDO::ATTR_SERVER_VERSION
|
||||
function dsn($dsn, $username, $password, $options = array()) {
|
||||
$options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_SILENT;
|
||||
$options[PDO::ATTR_STATEMENT_CLASS] = array('Min_PDOStatement');
|
||||
try {
|
||||
$this->pdo = new PDO($dsn, $username, $password, $options);
|
||||
} catch (Exception $ex) {
|
||||
auth_error(h($ex->getMessage()));
|
||||
}
|
||||
$this->server_info = @$this->pdo->getAttribute(PDO::ATTR_SERVER_VERSION);
|
||||
}
|
||||
|
||||
/*abstract function select_db($database);*/
|
||||
|
||||
function quote($string) {
|
||||
return $this->pdo->quote($string);
|
||||
}
|
||||
|
||||
function query($query, $unbuffered = false) {
|
||||
$result = parent::query($query);
|
||||
$result = $this->pdo->query($query);
|
||||
$this->error = "";
|
||||
if (!$result) {
|
||||
$errorInfo = $this->errorInfo();
|
||||
$this->error = $errorInfo[2];
|
||||
list(, $this->errno, $this->error) = $this->pdo->errorInfo();
|
||||
if (!$this->error) {
|
||||
$this->error = lang('Unknown error.');
|
||||
}
|
||||
return false;
|
||||
}
|
||||
$this->store_result($result);
|
||||
@@ -41,6 +50,9 @@ if (extension_loaded('pdo')) {
|
||||
function store_result($result = null) {
|
||||
if (!$result) {
|
||||
$result = $this->_result;
|
||||
if (!$result) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ($result->columnCount()) {
|
||||
$result->num_rows = $result->rowCount(); // is not guaranteed to work with all drivers
|
||||
@@ -51,6 +63,9 @@ if (extension_loaded('pdo')) {
|
||||
}
|
||||
|
||||
function next_result() {
|
||||
if (!$this->_result) {
|
||||
return false;
|
||||
}
|
||||
$this->_result->_offset = 0;
|
||||
return @$this->_result->nextRowset(); // @ - PDO_PgSQL doesn't support it
|
||||
}
|
||||
@@ -69,11 +84,11 @@ if (extension_loaded('pdo')) {
|
||||
var $_offset = 0, $num_rows;
|
||||
|
||||
function fetch_assoc() {
|
||||
return $this->fetch(2); // PDO::FETCH_ASSOC
|
||||
return $this->fetch(PDO::FETCH_ASSOC);
|
||||
}
|
||||
|
||||
function fetch_row() {
|
||||
return $this->fetch(3); // PDO::FETCH_NUM
|
||||
return $this->fetch(PDO::FETCH_NUM);
|
||||
}
|
||||
|
||||
function fetch_field() {
|
||||
@@ -85,5 +100,3 @@ if (extension_loaded('pdo')) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$drivers = array();
|
||||
|
||||
22
adminer/include/tmpfile.inc.php
Normal file
22
adminer/include/tmpfile.inc.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
class TmpFile {
|
||||
var $handler;
|
||||
var $size;
|
||||
|
||||
function __construct() {
|
||||
$this->handler = tmpfile();
|
||||
}
|
||||
|
||||
function write($contents) {
|
||||
$this->size += strlen($contents);
|
||||
fwrite($this->handler, $contents);
|
||||
}
|
||||
|
||||
function send() {
|
||||
fseek($this->handler, 0);
|
||||
fpassthru($this->handler);
|
||||
fclose($this->handler);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,2 +1,2 @@
|
||||
<?php
|
||||
$VERSION = "3.6.2";
|
||||
$VERSION = "4.8.2-dev";
|
||||
|
||||
@@ -79,6 +79,9 @@ function decrypt_string($str, $key) {
|
||||
if ($str == "") {
|
||||
return "";
|
||||
}
|
||||
if (!$key) {
|
||||
return false;
|
||||
}
|
||||
$key = array_values(unpack("V*", pack("H*", md5($key))));
|
||||
$v = str2long($str, false);
|
||||
$n = count($v) - 1;
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
<?php
|
||||
/** Adminer - Compact database management
|
||||
* @link http://www.adminer.org/
|
||||
* @author Jakub Vrana, http://www.vrana.cz/
|
||||
* @link https://www.adminer.org/
|
||||
* @author Jakub Vrana, https://www.vrana.cz/
|
||||
* @copyright 2007 Jakub Vrana
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
|
||||
* @license https://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
|
||||
*/
|
||||
|
||||
include "./include/bootstrap.inc.php";
|
||||
include "./include/tmpfile.inc.php";
|
||||
|
||||
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*+'";
|
||||
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*'";
|
||||
$inout = "IN|OUT|INOUT";
|
||||
|
||||
if (isset($_GET["select"]) && ($_POST["edit"] || $_POST["clone"]) && !$_POST["save"]) {
|
||||
@@ -21,6 +22,7 @@ if (isset($_GET["callf"])) {
|
||||
if (isset($_GET["function"])) {
|
||||
$_GET["procedure"] = $_GET["function"];
|
||||
}
|
||||
|
||||
if (isset($_GET["download"])) {
|
||||
include "./download.inc.php";
|
||||
} elseif (isset($_GET["table"])) {
|
||||
|
||||
@@ -1,47 +1,64 @@
|
||||
<?php
|
||||
$TABLE = $_GET["indexes"];
|
||||
$index_types = array("PRIMARY", "UNIQUE", "INDEX");
|
||||
$table_status = table_status($TABLE);
|
||||
if (eregi("MyISAM|M?aria", $table_status["Engine"])) {
|
||||
$table_status = table_status($TABLE, true);
|
||||
if (preg_match('~MyISAM|M?aria' . (min_version(5.6, '10.0.5') ? '|InnoDB' : '') . '~i', $table_status["Engine"])) {
|
||||
$index_types[] = "FULLTEXT";
|
||||
}
|
||||
$indexes = indexes($TABLE);
|
||||
if ($jush == "sqlite") { // doesn't support primary key
|
||||
unset($index_types[0]);
|
||||
unset($indexes[""]);
|
||||
if (preg_match('~MyISAM|M?aria' . (min_version(5.7, '10.2.2') ? '|InnoDB' : '') . '~i', $table_status["Engine"])) {
|
||||
$index_types[] = "SPATIAL";
|
||||
}
|
||||
if ($_POST && !$error && !$_POST["add"]) {
|
||||
$indexes = indexes($TABLE);
|
||||
$primary = array();
|
||||
if ($jush == "mongo") { // doesn't support primary key
|
||||
$primary = $indexes["_id_"];
|
||||
unset($index_types[0]);
|
||||
unset($indexes["_id_"]);
|
||||
}
|
||||
$row = $_POST;
|
||||
|
||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) {
|
||||
$alter = array();
|
||||
foreach ($_POST["indexes"] as $index) {
|
||||
foreach ($row["indexes"] as $index) {
|
||||
$name = $index["name"];
|
||||
if (in_array($index["type"], $index_types)) {
|
||||
$columns = array();
|
||||
$lengths = array();
|
||||
$descs = array();
|
||||
$set = array();
|
||||
ksort($index["columns"]);
|
||||
foreach ($index["columns"] as $key => $column) {
|
||||
if ($column != "") {
|
||||
$length = $index["lengths"][$key];
|
||||
$set[] = idf_escape($column) . ($length ? "(" . (+$length) . ")" : "");
|
||||
$desc = $index["descs"][$key];
|
||||
$set[] = idf_escape($column) . ($length ? "(" . (+$length) . ")" : "") . ($desc ? " DESC" : "");
|
||||
$columns[] = $column;
|
||||
$lengths[] = ($length ? $length : null);
|
||||
$descs[] = $desc;
|
||||
}
|
||||
}
|
||||
|
||||
if ($columns) {
|
||||
$existing = $indexes[$name];
|
||||
if ($existing) {
|
||||
ksort($existing["columns"]);
|
||||
ksort($existing["lengths"]);
|
||||
if ($index["type"] == $existing["type"] && array_values($existing["columns"]) === $columns && (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths)) {
|
||||
ksort($existing["descs"]);
|
||||
if ($index["type"] == $existing["type"]
|
||||
&& array_values($existing["columns"]) === $columns
|
||||
&& (!$existing["lengths"] || array_values($existing["lengths"]) === $lengths)
|
||||
&& array_values($existing["descs"]) === $descs
|
||||
) {
|
||||
// skip existing index
|
||||
unset($indexes[$name]);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
$alter[] = array($index["type"], $name, "(" . implode(", ", $set) . ")");
|
||||
$alter[] = array($index["type"], $name, $set);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// drop removed indexes
|
||||
foreach ($indexes as $name => $existing) {
|
||||
$alter[] = array($existing["type"], $name, "DROP");
|
||||
@@ -52,53 +69,78 @@ if ($_POST && !$error && !$_POST["add"]) {
|
||||
queries_redirect(ME . "table=" . urlencode($TABLE), lang('Indexes have been altered.'), alter_indexes($TABLE, $alter));
|
||||
}
|
||||
|
||||
page_header(lang('Indexes'), $error, array("table" => $TABLE), $TABLE);
|
||||
page_header(lang('Indexes'), $error, array("table" => $TABLE), h($TABLE));
|
||||
|
||||
$fields = array_keys(fields($TABLE));
|
||||
$row = array("indexes" => $indexes);
|
||||
if ($_POST) {
|
||||
$row = $_POST;
|
||||
if ($_POST["add"]) {
|
||||
foreach ($row["indexes"] as $key => $index) {
|
||||
if ($index["columns"][count($index["columns"])] != "") {
|
||||
$row["indexes"][$key]["columns"][] = "";
|
||||
}
|
||||
}
|
||||
$index = end($row["indexes"]);
|
||||
if ($index["type"] || array_filter($index["columns"], 'strlen') || array_filter($index["lengths"], 'strlen')) {
|
||||
$row["indexes"][] = array("columns" => array(1 => ""));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if ($_POST["add"]) {
|
||||
foreach ($row["indexes"] as $key => $index) {
|
||||
$row["indexes"][$key]["name"] = $key;
|
||||
$row["indexes"][$key]["columns"][] = "";
|
||||
if ($index["columns"][count($index["columns"])] != "") {
|
||||
$row["indexes"][$key]["columns"][] = "";
|
||||
}
|
||||
}
|
||||
$row["indexes"][] = array("columns" => array(1 => ""));
|
||||
$index = end($row["indexes"]);
|
||||
if ($index["type"] || array_filter($index["columns"], 'strlen')) {
|
||||
$row["indexes"][] = array("columns" => array(1 => ""));
|
||||
}
|
||||
}
|
||||
if (!$row) {
|
||||
foreach ($indexes as $key => $index) {
|
||||
$indexes[$key]["name"] = $key;
|
||||
$indexes[$key]["columns"][] = "";
|
||||
}
|
||||
$indexes[] = array("columns" => array(1 => ""));
|
||||
$row["indexes"] = $indexes;
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<div class="scrollable">
|
||||
<table cellspacing="0" class="nowrap">
|
||||
<thead><tr><th><?php echo lang('Index Type'); ?><th><?php echo lang('Column (length)'); ?><th><?php echo lang('Name'); ?></thead>
|
||||
<thead><tr>
|
||||
<th id="label-type"><?php echo lang('Index Type'); ?>
|
||||
<th><input type="submit" class="wayoff"><?php echo lang('Column (length)'); ?>
|
||||
<th id="label-name"><?php echo lang('Name'); ?>
|
||||
<th><noscript><?php echo "<input type='image' class='icon' name='add[0]' src='../adminer/static/plus.gif' alt='+' title='" . lang('Add next') . "'>"; ?></noscript>
|
||||
</thead>
|
||||
<?php
|
||||
if ($primary) {
|
||||
echo "<tr><td>PRIMARY<td>";
|
||||
foreach ($primary["columns"] as $key => $column) {
|
||||
echo select_input(" disabled", $fields, $column);
|
||||
echo "<label><input disabled type='checkbox'>" . lang('descending') . "</label> ";
|
||||
}
|
||||
echo "<td><td>\n";
|
||||
}
|
||||
$j = 1;
|
||||
foreach ($row["indexes"] as $index) {
|
||||
echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) ? "indexesAddRow(this);" : 1)) . "<td>";
|
||||
ksort($index["columns"]);
|
||||
$i = 1;
|
||||
foreach ($index["columns"] as $key => $column) {
|
||||
echo "<span>" . html_select("indexes[$j][columns][$i]", array(-1 => "") + $fields, $column, ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . "(this, '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "');");
|
||||
echo "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "'> </span>"; //! hide for non-MySQL drivers, add ASC|DESC
|
||||
$i++;
|
||||
if (!$_POST["drop_col"] || $j != key($_POST["drop_col"])) {
|
||||
echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) ? "indexesAddRow.call(this);" : 1), "label-type");
|
||||
|
||||
echo "<td>";
|
||||
ksort($index["columns"]);
|
||||
$i = 1;
|
||||
foreach ($index["columns"] as $key => $column) {
|
||||
echo "<span>" . select_input(
|
||||
" name='indexes[$j][columns][$i]' title='" . lang('Column') . "'",
|
||||
($fields ? array_combine($fields, $fields) : $fields),
|
||||
$column,
|
||||
"partial(" . ($i == count($index["columns"]) ? "indexesAddColumn" : "indexesChangeColumn") . ", '" . js_escape($jush == "sql" ? "" : $_GET["indexes"] . "_") . "')"
|
||||
);
|
||||
echo ($jush == "sql" || $jush == "mssql" ? "<input type='number' name='indexes[$j][lengths][$i]' class='size' value='" . h($index["lengths"][$key]) . "' title='" . lang('Length') . "'>" : "");
|
||||
echo (support("descidx") ? checkbox("indexes[$j][descs][$i]", 1, $index["descs"][$key], lang('descending')) : "");
|
||||
echo " </span>";
|
||||
$i++;
|
||||
}
|
||||
|
||||
echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "' autocapitalize='off' aria-labelledby='label-name'>\n";
|
||||
echo "<td><input type='image' class='icon' name='drop_col[$j]' src='../adminer/static/cross.gif' alt='x' title='" . lang('Remove') . "'>" . script("qsl('input').onclick = partial(editingRemoveRow, 'indexes\$1[type]');");
|
||||
}
|
||||
echo "<td><input name='indexes[$j][name]' value='" . h($index["name"]) . "'>\n";
|
||||
$j++;
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
</div>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<noscript><p><input type="submit" name="add" value="<?php echo lang('Add next'); ?>"></noscript>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
||||
@@ -1,23 +1,22 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'تسجيل الدخول',
|
||||
'Logout successful.' => 'مع السلامة.',
|
||||
'Invalid credentials.' => 'فشل في تسجيل الدخول.',
|
||||
'Logout successful.' => 'تم تسجيل الخروج بنجاح.',
|
||||
'Invalid credentials.' => 'بيانات الدخول غير صالحة.',
|
||||
'Server' => 'الخادم',
|
||||
'Username' => 'المستعمل',
|
||||
'Username' => 'اسم المستخدم',
|
||||
'Password' => 'كلمة المرور',
|
||||
'Select database' => 'إختر قاعدة البيانات',
|
||||
'Invalid database.' => 'قاعدة بيانات خاطئة.',
|
||||
'Create new database' => 'أنشئ فاعدة بيانات',
|
||||
'Select database' => 'اختر قاعدة البيانات',
|
||||
'Invalid database.' => 'قاعدة البيانات غير صالحة.',
|
||||
'Table has been dropped.' => 'تم حذف الجدول.',
|
||||
'Table has been altered.' => 'تم تعديل الجدول.',
|
||||
'Table has been created.' => 'تم إنشاء الجدول.',
|
||||
'Alter table' => 'تعديل الجدول',
|
||||
'Create table' => 'إنشاء جدول',
|
||||
'Table name' => 'إسم الجدول',
|
||||
'Table name' => 'اسم الجدول',
|
||||
'engine' => 'المحرك',
|
||||
'collation' => 'الترتيب',
|
||||
'Column name' => 'إسم العمود',
|
||||
'Column name' => 'اسم العمود',
|
||||
'Type' => 'النوع',
|
||||
'Length' => 'الطول',
|
||||
'Auto Increment' => 'تزايد تلقائي',
|
||||
@@ -29,14 +28,12 @@ $translations = array(
|
||||
'Database has been altered.' => 'تم تعديل قاعدة البيانات.',
|
||||
'Alter database' => 'تعديل قاعدة البيانات',
|
||||
'Create database' => 'إنشاء قاعدة بيانات',
|
||||
'SQL command' => 'إستعلام SQL',
|
||||
'Dump' => 'تصدير',
|
||||
'SQL command' => 'استعلام SQL',
|
||||
'Logout' => 'تسجيل الخروج',
|
||||
'database' => 'قاعدة بيانات',
|
||||
'Use' => 'المستعمل',
|
||||
'Use' => 'استعمال',
|
||||
'No tables.' => 'لا توجد جداول.',
|
||||
'select' => 'تحديد',
|
||||
'Create new table' => 'أنشئ جدول جديد',
|
||||
'Item has been deleted.' => 'تم حذف العنصر.',
|
||||
'Item has been updated.' => 'تم تعديل العنصر.',
|
||||
'Edit' => 'تعديل',
|
||||
@@ -50,48 +47,48 @@ $translations = array(
|
||||
'Alter indexes' => 'تعديل المؤشرات',
|
||||
'Add next' => 'إضافة التالي',
|
||||
'Language' => 'اللغة',
|
||||
'Select' => 'إختيار',
|
||||
'Select' => 'اختيار',
|
||||
'New item' => 'عنصر جديد',
|
||||
'Search' => 'بحث',
|
||||
'Sort' => 'ترتيب',
|
||||
'descending' => 'تنازلي',
|
||||
'Limit' => 'حد',
|
||||
'No rows.' => 'لا توجد نتائج.',
|
||||
'Action' => 'حركة',
|
||||
'Action' => 'الإجراء',
|
||||
'edit' => 'تعديل',
|
||||
'Page' => 'صفحة',
|
||||
'Query executed OK, %d row(s) affected.' => 'تم تنفسذ الإستعلام, %d عدد الأسطر المعدلة.',
|
||||
'Error in query' => 'هناك خطأ في الإستعلام',
|
||||
'Query executed OK, %d row(s) affected.' => 'تم تنفسذ الاستعلام, %d عدد الأسطر المعدلة.',
|
||||
'Error in query' => 'هناك خطأ في الاستعلام',
|
||||
'Execute' => 'تنفيذ',
|
||||
'Table' => 'جدول',
|
||||
'Foreign keys' => 'مفاتيح أجنبية',
|
||||
'Triggers' => 'الزنادات',
|
||||
'View' => 'عرض',
|
||||
'Unable to select the table' => 'من غير الممكن إختيار الجدول',
|
||||
'Invalid CSRF token. Send the form again.' => 'CSRF Token خاطئ. من فضلك أعد إرسال الإستمارة.',
|
||||
'Unable to select the table' => 'يتعذر اختيار الجدول',
|
||||
'Invalid CSRF token. Send the form again.' => 'رمز CSRF غير صالح. المرجو إرسال الاستمارة مرة أخرى.',
|
||||
'Comment' => 'تعليق',
|
||||
'Default values' => 'القيمة الإفتراضية',
|
||||
'Default values' => 'القيم الافتراضية',
|
||||
'%d byte(s)' => '%d بايت',
|
||||
'No commands to execute.' => 'لا توجد أوامر للتنفيذ.',
|
||||
'Unable to upload a file.' => 'من غير الممكن رفع الملف.',
|
||||
'Unable to upload a file.' => 'يتعذر رفع ملف ما.',
|
||||
'File upload' => 'رفع ملف',
|
||||
'File uploads are disabled.' => 'تم إلغاء رفع الملفات.',
|
||||
'Routine has been called, %d row(s) affected.' => 'تم إستدعاء الروتين, عدد الأسطر المعدلة %d.',
|
||||
'Call' => 'إستدعاء',
|
||||
'No extension' => 'إمتداد غير موجود',
|
||||
'File uploads are disabled.' => 'رفع الملفات غير مشغل.',
|
||||
'Routine has been called, %d row(s) affected.' => 'تم استدعاء الروتين, عدد الأسطر المعدلة %d.',
|
||||
'Call' => 'استدعاء',
|
||||
'No extension' => 'امتداد غير موجود',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'إمتدادات php المدعومة غير موجودة.',
|
||||
'Session support must be enabled.' => 'عليك تفعيل نظام الجلسات.',
|
||||
'Session expired, please login again.' => 'إنتهت الجلسة، من فضلك أعد تسجيل الدخول.',
|
||||
'Text length' => 'طول النص',
|
||||
'Foreign key has been dropped.' => 'المفتاح الأجنبي تم مسحه.',
|
||||
'Foreign key has been altered.' => 'المفتاح الأجنبي تم تعديله.',
|
||||
'Foreign key has been created.' => 'المفتاح الأجنبي تم إنشاؤه.',
|
||||
'Foreign key has been dropped.' => 'تم مسح المفتاح الأجنبي.',
|
||||
'Foreign key has been altered.' => 'تم تعديل المفتاح الأجنبي.',
|
||||
'Foreign key has been created.' => 'تم إنشاء المفتاح الأجنبي.',
|
||||
'Foreign key' => 'مفتاح أجنبي',
|
||||
'Target table' => 'الجدول المستهدف',
|
||||
'Change' => 'تعديل',
|
||||
'Source' => 'المصدر',
|
||||
'Target' => 'الهدف',
|
||||
'Add column' => 'أضف عمود',
|
||||
'Add column' => 'إضافة عمودا',
|
||||
'Alter' => 'تعديل',
|
||||
'Add foreign key' => 'إضافة مفتاح أجنبي',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
@@ -103,11 +100,11 @@ $translations = array(
|
||||
'View has been created.' => 'تم إنشاء العرض.',
|
||||
'Alter view' => 'تعديل عرض',
|
||||
'Create view' => 'إنشاء عرض',
|
||||
'Name' => 'الإسم',
|
||||
'Name' => 'الاسم',
|
||||
'Process list' => 'قائمة الإجراءات',
|
||||
'%d process(es) have been killed.' => 'عدد الإجراءات التي تم إيقافها %d.',
|
||||
'Kill' => 'إيقاف',
|
||||
'Parameter name' => 'إسم المتغير',
|
||||
'Parameter name' => 'اسم المتغير',
|
||||
'Database schema' => 'مخطط فاعدة البيانات',
|
||||
'Create procedure' => 'إنشاء إجراء',
|
||||
'Create function' => 'إنشاء دالة',
|
||||
@@ -139,7 +136,7 @@ $translations = array(
|
||||
'Grant' => 'موافق',
|
||||
'Revoke' => 'إلغاء',
|
||||
'%s version: %s through PHP extension %s' => 'النسخة %s : %s عن طريق إمتداد ال PHP %s',
|
||||
'Logged as: %s' => 'تم تسجيل الدخول بإسم %s',
|
||||
'Logged as: %s' => 'تم تسجيل الدخول باسم %s',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'معلومات POST كبيرة جدا. قم بتقليص حجم المعلومات أو قم بزيادة قيمة %s في خيارات ال PHP.',
|
||||
'Move up' => 'نقل للأعلى',
|
||||
'Move down' => 'نقل للأسفل',
|
||||
@@ -178,6 +175,7 @@ $translations = array(
|
||||
'Data Free' => 'المساحة الحرة',
|
||||
'Rows' => 'الأسطر',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'تحليل',
|
||||
'Optimize' => 'تحسين',
|
||||
'Check' => 'فحص',
|
||||
@@ -186,16 +184,16 @@ $translations = array(
|
||||
'Move to other database' => 'نقل إلى قاعدة بيانات أخرى',
|
||||
'Move' => 'نقل',
|
||||
'%d item(s) have been affected.' => 'عدد العناصر المعدلة هو %d.',
|
||||
'whole result' => 'نتيجة كاملة',
|
||||
'Whole result' => 'نتيجة كاملة',
|
||||
'Clone' => 'نسخ',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'لقد تجاوزت العدد الأقصى للحقول. يرجى الرفع من %s و %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'لقد تجاوزت العدد الأقصى للحقول. يرجى الرفع من %s.',
|
||||
'Partition by' => 'مقسم بواسطة',
|
||||
'Partitions' => 'التقسيمات',
|
||||
'Partition name' => 'إسم التقسيم',
|
||||
'Partition name' => 'اسم التقسيم',
|
||||
'Values' => 'القيم',
|
||||
'%d row(s) have been imported.' => 'عدد الأسطر المستوردة هو %d.',
|
||||
'%d row(s) have been imported.' => 'تم استيراد %d سطرا',
|
||||
'anywhere' => 'في اي مكان',
|
||||
'Import' => 'إستيراد',
|
||||
'Import' => 'استيراد',
|
||||
'Stop on error' => 'أوقف في حالة حدوث خطأ',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5/$3/$1',
|
||||
@@ -225,7 +223,6 @@ $translations = array(
|
||||
'Databases have been dropped.' => 'تم حذف قواعد البيانات.',
|
||||
'Database has been dropped.' => 'تم حذف قاعدة البيانات.',
|
||||
'Search data in tables' => 'بحث في الجداول',
|
||||
'schema' => 'المخطط',
|
||||
'Schema' => 'المخطط',
|
||||
'Alter schema' => 'تعديل المخطط',
|
||||
'Create schema' => 'إنشاء مخطط',
|
||||
@@ -243,7 +240,7 @@ $translations = array(
|
||||
'Alter type' => 'تعديل نوع',
|
||||
'Type has been dropped.' => 'تم حذف النوع.',
|
||||
'Type has been created.' => 'تم إنشاء النوع.',
|
||||
'Use edit link to modify this value.' => 'إستعمل الرابط "تعديل" لتعديل هذه القيمة.',
|
||||
'Use edit link to modify this value.' => 'استعمل الرابط "تعديل" لتعديل هذه القيمة.',
|
||||
'last' => 'الأخيرة',
|
||||
'From server' => 'من الخادم',
|
||||
'System' => 'النظام',
|
||||
@@ -256,16 +253,15 @@ $translations = array(
|
||||
'Attachments' => 'ملفات مرفقة.',
|
||||
'Item%s has been inserted.' => 'تم إدراج العنصر.',
|
||||
'now' => 'الآن',
|
||||
'%d query(s) executed OK.' => array('تم تنفيذ الإستعلام %d بنجاح.', 'تم تنفيذ الإستعلامات %d بنجاح.'),
|
||||
'Show only errors' => 'إعرض الأخطاء فقط',
|
||||
'Last page' => 'الصفحة السابقة',
|
||||
'%d query(s) executed OK.' => array('تم تنفيذ الاستعلام %d بنجاح.', 'تم تنفيذ الاستعلامات %d بنجاح.'),
|
||||
'Show only errors' => 'إظهار الأخطاء فقط',
|
||||
'Refresh' => 'تحديث',
|
||||
'Invalid schema.' => 'مخطط خاطئ.',
|
||||
'Please use one of the extensions %s.' => 'من فضلك إستعمل إحدى الإمتدادات: %s.',
|
||||
'Invalid schema.' => 'مخطط غير صالح.',
|
||||
'Please use one of the extensions %s.' => 'المرجو استخدام إحدى الامتدادات %s.',
|
||||
'ltr' => 'rtl',
|
||||
'Tables have been copied.' => 'تم نسخ الجداول.',
|
||||
'Copy' => 'نسخ',
|
||||
'Permanent link' => 'وصلة دائمة',
|
||||
'Permanent link' => 'رابط دائم',
|
||||
'Edit all' => 'تعديل الكل',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
|
||||
336
adminer/lang/bg.inc.php
Normal file
336
adminer/lang/bg.inc.php
Normal file
@@ -0,0 +1,336 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'Система',
|
||||
'Server' => 'Сървър',
|
||||
'Username' => 'Потребител',
|
||||
'Password' => 'Парола',
|
||||
'Permanent login' => 'Запаметяване',
|
||||
'Login' => 'Вход',
|
||||
'Logout' => 'Изход',
|
||||
'Logged as: %s' => 'Текущ потребител: %s',
|
||||
'Logout successful.' => 'Излизането е успешно.',
|
||||
'Invalid credentials.' => 'Невалидни потребителски данни.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Прекалено много неуспешни опити за вход, опитайте пак след %d минута.', 'Прекалено много неуспешни опити за вход, опитайте пак след %d минути.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Главната парола вече е невалидна. <a href="https://www.adminer.org/en/extension/"%s>Изберете</a> %s метод, за да я направите постоянна.',
|
||||
'Language' => 'Език',
|
||||
'Invalid CSRF token. Send the form again.' => 'Невалиден шифроващ ключ. Попълнете и изпратете формуляра отново.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Ако не сте изпратили тази заявка през Adminer, затворете тази страница.',
|
||||
'No extension' => 'Няма разширение',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Никое от поддържаните PHP разширения (%s) не е налично.',
|
||||
'Session support must be enabled.' => 'Поддръжката на сесии трябва да е разрешена.',
|
||||
'Session expired, please login again.' => 'Сесията е изтекла; моля, влезте отново.',
|
||||
'%s version: %s through PHP extension %s' => '%s версия: %s през PHP разширение %s',
|
||||
'Refresh' => 'Обновяване',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Права',
|
||||
'Create user' => 'Създаване на потребител',
|
||||
'User has been dropped.' => 'Потребителя беше премахнат.',
|
||||
'User has been altered.' => 'Потребителя беше променен.',
|
||||
'User has been created.' => 'Потребителя беше създаден.',
|
||||
'Hashed' => 'Хеширан',
|
||||
'Column' => 'Колона',
|
||||
'Routine' => 'Процедура',
|
||||
'Grant' => 'Осигуряване',
|
||||
'Revoke' => 'Отнемане',
|
||||
|
||||
'Process list' => 'Списък с процеси',
|
||||
'%d process(es) have been killed.' => array('%d процес беше прекъснат.', '%d процеса бяха прекъснати.'),
|
||||
'Kill' => 'Прекъсване',
|
||||
|
||||
'Variables' => 'Променливи',
|
||||
'Status' => 'Състояние',
|
||||
|
||||
'SQL command' => 'SQL команда',
|
||||
'%d query(s) executed OK.' => array('%d заявка е изпълнена.', '%d заявки са изпълнени.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Заявката е изпълнена, %d ред е засегнат.', 'Заявката е изпълнена, %d редове са засегнати.'),
|
||||
'No commands to execute.' => 'Няма команди за изпълнение.',
|
||||
'Error in query' => 'Грешка в заявката',
|
||||
'Execute' => 'Изпълнение',
|
||||
'Stop on error' => 'Спиране при грешка',
|
||||
'Show only errors' => 'Показване само на грешките',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Хронология',
|
||||
'Clear' => 'Изчистване',
|
||||
'Edit all' => 'Редактиране на всички',
|
||||
|
||||
'File upload' => 'Прикачване на файл',
|
||||
'From server' => 'От сървър',
|
||||
'Webserver file %s' => 'Сървърен файл %s',
|
||||
'Run file' => 'Изпълнение на файл',
|
||||
'File does not exist.' => 'Файлът не съществува.',
|
||||
'File uploads are disabled.' => 'Прикачването на файлове е забранено.',
|
||||
'Unable to upload a file.' => 'Неуспешно прикачване на файл.',
|
||||
'Maximum allowed file size is %sB.' => 'Максимално разрешената големина на файл е %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Изпратени са прекалено много данни. Намалете обема на данните или увеличете %s управляващата директива.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Можете да прикачите голям SQL файл чрез FTP и да го импортирате от сървъра.',
|
||||
'You are offline.' => 'Вие сте офлайн.',
|
||||
|
||||
'Export' => 'Експорт',
|
||||
'Output' => 'Резултат',
|
||||
'open' => 'показване',
|
||||
'save' => 'запис',
|
||||
'Format' => 'Формат',
|
||||
'Data' => 'Данни',
|
||||
|
||||
'Database' => 'База данни',
|
||||
'database' => 'база данни',
|
||||
'Use' => 'Избор',
|
||||
'Select database' => 'Избор на база данни',
|
||||
'Invalid database.' => 'Невалидна база данни.',
|
||||
'Database has been dropped.' => 'Базата данни беше премахната.',
|
||||
'Databases have been dropped.' => 'Базите данни бяха премехнати.',
|
||||
'Database has been created.' => 'Базата данни беше създадена.',
|
||||
'Database has been renamed.' => 'Базата данни беше преименувана.',
|
||||
'Database has been altered.' => 'Базата данни беше променена.',
|
||||
'Alter database' => 'Промяна на база данни',
|
||||
'Create database' => 'Създаване на база данни',
|
||||
'Database schema' => 'Схема на базата данни',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Постоянна препратка',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Система',
|
||||
'Collation' => 'Кодировка',
|
||||
'Data Length' => 'Големина на данните',
|
||||
'Index Length' => 'Големина на индекса',
|
||||
'Data Free' => 'Свободно място',
|
||||
'Rows' => 'Редове',
|
||||
'%d in total' => '%d всичко',
|
||||
'Analyze' => 'Анализиране',
|
||||
'Optimize' => 'Оптимизиране',
|
||||
'Vacuum' => 'Консолидиране',
|
||||
'Check' => 'Проверка',
|
||||
'Repair' => 'Поправка',
|
||||
'Truncate' => 'Изрязване',
|
||||
'Tables have been truncated.' => 'Таблиците бяха изрязани.',
|
||||
'Move to other database' => 'Преместване в друга база данни',
|
||||
'Move' => 'Преместване',
|
||||
'Tables have been moved.' => 'Таблиците бяха преместени.',
|
||||
'Copy' => 'Копиране',
|
||||
'Tables have been copied.' => 'Таблиците бяха копирани.',
|
||||
|
||||
'Routines' => 'Процедури',
|
||||
'Routine has been called, %d row(s) affected.' => array('Беше приложена процедура, %d ред е засегнат.', 'Беше приложена процедура, %d редове са засегнати.'),
|
||||
'Call' => 'Прилагане',
|
||||
'Parameter name' => 'Име на параметъра',
|
||||
'Create procedure' => 'Създаване на процедура',
|
||||
'Create function' => 'Създаване на функция',
|
||||
'Routine has been dropped.' => 'Процедурата беше премахната.',
|
||||
'Routine has been altered.' => 'Процедурата беше променена.',
|
||||
'Routine has been created.' => 'Процедурата беше създадена.',
|
||||
'Alter function' => 'Промяна на функция',
|
||||
'Alter procedure' => 'Промяна на процедура',
|
||||
'Return type' => 'Резултат',
|
||||
|
||||
'Events' => 'Събития',
|
||||
'Event has been dropped.' => 'Събитието беше премахнато.',
|
||||
'Event has been altered.' => 'Събитието беше променено.',
|
||||
'Event has been created.' => 'Събитието беше създадено.',
|
||||
'Alter event' => 'Промяна на събитие',
|
||||
'Create event' => 'Създаване на събитие',
|
||||
'At given time' => 'В зададено време',
|
||||
'Every' => 'Всеки',
|
||||
'Schedule' => 'Насрочване',
|
||||
'Start' => 'Начало',
|
||||
'End' => 'Край',
|
||||
'On completion preserve' => 'Запазване след завършване',
|
||||
|
||||
'Tables' => 'Таблици',
|
||||
'Tables and views' => 'Таблици и изгледи',
|
||||
'Table' => 'Таблица',
|
||||
'No tables.' => 'Няма таблици.',
|
||||
'Alter table' => 'Промяна на таблица',
|
||||
'Create table' => 'Създаване на таблица',
|
||||
'Table has been dropped.' => 'Таблицата беше премахната.',
|
||||
'Tables have been dropped.' => 'Таблиците бяха премахнати.',
|
||||
'Tables have been optimized.' => 'Таблиците бяха оптимизирани.',
|
||||
'Table has been altered.' => 'Таблицата беше променена.',
|
||||
'Table has been created.' => 'Таблицата беше създадена.',
|
||||
'Table name' => 'Име на таблица',
|
||||
'Show structure' => 'Структура',
|
||||
'engine' => 'система',
|
||||
'collation' => 'кодировка',
|
||||
'Column name' => 'Име на колоната',
|
||||
'Type' => 'Вид',
|
||||
'Length' => 'Големина',
|
||||
'Auto Increment' => 'Автоматично увеличаване',
|
||||
'Options' => 'Опции',
|
||||
'Comment' => 'Коментар',
|
||||
'Default value' => 'Стойност по подразбиране',
|
||||
'Default values' => 'Стойности по подразбиране',
|
||||
'Drop' => 'Премахване',
|
||||
'Are you sure?' => 'Сигурни ли сте?',
|
||||
'Size' => 'Големина',
|
||||
'Compute' => 'Изчисляване',
|
||||
'Move up' => 'Преместване нагоре',
|
||||
'Move down' => 'Преместване надолу',
|
||||
'Remove' => 'Премахване',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Максималния брой полета е превишен. Моля, увеличете %s.',
|
||||
|
||||
'Partition by' => 'Разделяне на',
|
||||
'Partitions' => 'Раздели',
|
||||
'Partition name' => 'Име на раздела',
|
||||
'Values' => 'Стойности',
|
||||
|
||||
'View' => 'Изглед',
|
||||
'Materialized view' => 'Запаметен изглед',
|
||||
'View has been dropped.' => 'Изгледа беше премахнат.',
|
||||
'View has been altered.' => 'Изгледа беше променен.',
|
||||
'View has been created.' => 'Изгледа беше създаден.',
|
||||
'Alter view' => 'Промяна на изглед',
|
||||
'Create view' => 'Създаване на изглед',
|
||||
|
||||
'Indexes' => 'Индекси',
|
||||
'Indexes have been altered.' => 'Индексите бяха променени.',
|
||||
'Alter indexes' => 'Промяна на индекси',
|
||||
'Add next' => 'Добавяне на следващ',
|
||||
'Index Type' => 'Вид на индекса',
|
||||
'Column (length)' => 'Колона (дължина)',
|
||||
|
||||
'Foreign keys' => 'Препратки',
|
||||
'Foreign key' => 'Препратка',
|
||||
'Foreign key has been dropped.' => 'Препратката беше премахната.',
|
||||
'Foreign key has been altered.' => 'Препратката беше променена.',
|
||||
'Foreign key has been created.' => 'Препратката беше създадена.',
|
||||
'Target table' => 'Таблица приемник',
|
||||
'Change' => 'Промяна',
|
||||
'Source' => 'Източник',
|
||||
'Target' => 'Цел',
|
||||
'Add column' => 'Добавяне на колона',
|
||||
'Alter' => 'Промяна',
|
||||
'Add foreign key' => 'Добавяне на препратка',
|
||||
'ON DELETE' => 'При изтриване',
|
||||
'ON UPDATE' => 'При промяна',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Колоните източник и цел трябва да са от еднакъв вид, трябва да има индекс на колоните приемник и да има въведени данни.',
|
||||
|
||||
'Triggers' => 'Тригери',
|
||||
'Add trigger' => 'Добавяне на тригер',
|
||||
'Trigger has been dropped.' => 'Тригера беше премахнат.',
|
||||
'Trigger has been altered.' => 'Тригера беше променен.',
|
||||
'Trigger has been created.' => 'Тригера беше създаден.',
|
||||
'Alter trigger' => 'Промяна на тригер',
|
||||
'Create trigger' => 'Създаване на тригер',
|
||||
'Time' => 'Време',
|
||||
'Event' => 'Събитие',
|
||||
'Name' => 'Име',
|
||||
|
||||
'select' => 'показване',
|
||||
'Select' => 'Показване',
|
||||
'Select data' => 'Показване на данни',
|
||||
'Functions' => 'Функции',
|
||||
'Aggregation' => 'Съвкупност',
|
||||
'Search' => 'Търсене',
|
||||
'anywhere' => 'навсякъде',
|
||||
'Search data in tables' => 'Търсене на данни в таблиците',
|
||||
'Sort' => 'Сортиране',
|
||||
'descending' => 'низходящо',
|
||||
'Limit' => 'Редове',
|
||||
'Limit rows' => 'Лимит на редовете',
|
||||
'Text length' => 'Текст',
|
||||
'Action' => 'Действие',
|
||||
'Full table scan' => 'Пълно сканиране на таблицата',
|
||||
'Unable to select the table' => 'Неуспешно показване на таблицата',
|
||||
'No rows.' => 'Няма редове.',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d ред', '%d реда'),
|
||||
'Page' => 'Страница',
|
||||
'last' => 'последен',
|
||||
'Load more data' => 'Зареждане на повече данни',
|
||||
'Loading' => 'Зареждане',
|
||||
'Whole result' => 'Пълен резултат',
|
||||
'%d byte(s)' => array('%d байт', '%d байта'),
|
||||
|
||||
'Import' => 'Импорт',
|
||||
'%d row(s) have been imported.' => array('%d ред беше импортиран.', '%d реда бяха импортирани.'),
|
||||
'File must be in UTF-8 encoding.' => 'Файла трябва да е с UTF-8 кодировка.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Промяна',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+щракване в стойността, за да я промените.',
|
||||
'Use edit link to modify this value.' => 'Използвайте "редакция" за промяна на данните.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Елементи%s бяха вмъкнати.',
|
||||
'Item has been deleted.' => 'Елемента беше изтрит.',
|
||||
'Item has been updated.' => 'Елемента беше обновен.',
|
||||
'%d item(s) have been affected.' => array('%d елемент беше засегнат.', '%d елемента бяха засегнати.'),
|
||||
'New item' => 'Нов елемент',
|
||||
'original' => 'оригинал',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'празно',
|
||||
'edit' => 'редакция',
|
||||
'Edit' => 'Редактиране',
|
||||
'Insert' => 'Вмъкване',
|
||||
'Save' => 'Запис',
|
||||
'Saving' => 'Записване',
|
||||
'Save and continue edit' => 'Запис и редакция',
|
||||
'Save and insert next' => 'Запис и нов',
|
||||
'Selected' => 'Избран',
|
||||
'Clone' => 'Клониране',
|
||||
'Delete' => 'Изтриване',
|
||||
'You have no privileges to update this table.' => 'Нямате праве за обновяване на таблицата.',
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'От',
|
||||
'Subject' => 'Тема',
|
||||
'Attachments' => 'Прикачени',
|
||||
'Send' => 'Изпращане',
|
||||
'%d e-mail(s) have been sent.' => array('%d писмо беше изпратено.', '%d писма бяха изпратени.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Числа',
|
||||
'Date and time' => 'Дата и час',
|
||||
'Strings' => 'Низове',
|
||||
'Binary' => 'Двоични',
|
||||
'Lists' => 'Списъци',
|
||||
'Network' => 'Мрежа',
|
||||
'Geometry' => 'Геометрия',
|
||||
'Relations' => 'Зависимости',
|
||||
|
||||
'Editor' => 'Редактор',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => '[гггг]-мм-дд',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'ЧЧ:ММ:СС',
|
||||
'now' => 'сега',
|
||||
'yes' => 'да',
|
||||
'no' => 'не',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Файла вече съществува.',
|
||||
'Please use one of the extensions %s.' => 'Моля, използвайте някое от разширенията %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Промяна на схемата',
|
||||
'Create schema' => 'Създаване на схема',
|
||||
'Schema has been dropped.' => 'Схемата беше премахната.',
|
||||
'Schema has been created.' => 'Схемата беше създадена.',
|
||||
'Schema has been altered.' => 'Схемата беше променена.',
|
||||
'Schema' => 'Схема',
|
||||
'Invalid schema.' => 'Невалидна схема.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Последователности',
|
||||
'Create sequence' => 'Създаване на последователност',
|
||||
'Sequence has been dropped.' => 'Последователността беше премахната.',
|
||||
'Sequence has been created.' => 'Последователността беше създадена.',
|
||||
'Sequence has been altered.' => 'Последователността беше променена.',
|
||||
'Alter sequence' => 'Промяна на последователност',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Видове потребители',
|
||||
'Create type' => 'Създаване на вид',
|
||||
'Type has been dropped.' => 'Вида беше пермахнат.',
|
||||
'Type has been created.' => 'Вида беше създаден.',
|
||||
'Alter type' => 'Промяна на вид',
|
||||
);
|
||||
@@ -8,7 +8,6 @@ $translations = array(
|
||||
'Password' => 'পাসওয়ার্ড',
|
||||
'Select database' => 'ডাটাবেজ নির্বাচন করো',
|
||||
'Invalid database.' => 'ভুল ডাটাবেজ।',
|
||||
'Create new database' => 'নতুন ডাটাবেজ তৈরী করো',
|
||||
'Table has been dropped.' => 'টেবিল মুছে ফেলা হয়েছে।',
|
||||
'Table has been altered.' => 'টেবিল সম্পাদনা করা হয়েছে।',
|
||||
'Table has been created.' => 'টেবিল তৈরী করা হয়েছে।',
|
||||
@@ -31,13 +30,11 @@ $translations = array(
|
||||
'Alter database' => 'ডাটাবেজ সম্পাদনা',
|
||||
'Create database' => 'ডাটাবেজ তৈরী',
|
||||
'SQL command' => 'SQL-কোয়্যারী',
|
||||
'Dump' => 'এক্সপোর্ট',
|
||||
'Logout' => 'লগআউট',
|
||||
'database' => 'ডাটাবেজ',
|
||||
'Use' => 'ব্যবহার',
|
||||
'No tables.' => 'কোন টেবিল নাই।',
|
||||
'select' => 'নির্বাচন',
|
||||
'Create new table' => 'নতুন টেবিল তৈরী করো',
|
||||
'Item has been deleted.' => 'বিষয়বস্তু মুছে ফেলা হয়েছে।',
|
||||
'Item has been updated.' => 'বিষয়বস্তু আপডেট করা হয়েছে।',
|
||||
'Item%s has been inserted.' => 'বিষয়বস্তুসমূহ সংযোজন করা হয়েছে।',
|
||||
@@ -180,6 +177,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'টেবিল ছাঁটাই করা হয়েছে',
|
||||
'Rows' => 'সারি',
|
||||
',' => ',',
|
||||
'0123456789' => '০১২৩৪৫৬৭৮৯',
|
||||
'Tables have been moved.' => 'টেবিল স্থানান্তর করা হয়েছে।',
|
||||
'Move to other database' => 'অন্য ডাটাবেজে স্থানান্তর করো',
|
||||
'Move' => 'স্থানান্তর করো',
|
||||
@@ -188,9 +186,9 @@ $translations = array(
|
||||
'original' => 'প্রকৃত',
|
||||
'Tables have been dropped.' => 'টেবিলসমূহ মুছে ফেলা হয়েছে।',
|
||||
'%d item(s) have been affected.' => '%d টি বিষয়বস্তু প্রভাবিত হয়েছে',
|
||||
'whole result' => 'সম্পূর্ণ ফলাফল',
|
||||
'Whole result' => 'সম্পূর্ণ ফলাফল',
|
||||
'Clone' => 'ক্লোন',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'অনুমোদিত ফিল্ড এর সর্বাধিক সংখ্যা অতিক্রম করে গেছে। অনুগ্রহপূর্বক %s এবং %s বৃদ্ধি করুন।',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'অনুমোদিত ফিল্ড এর সর্বাধিক সংখ্যা অতিক্রম করে গেছে। অনুগ্রহপূর্বক %s বৃদ্ধি করুন।',
|
||||
'Partition by' => 'পার্টিশন যার মাধ্যমে',
|
||||
'Partitions' => 'পার্টিশন',
|
||||
'Partition name' => 'পার্টিশনের নাম',
|
||||
@@ -226,7 +224,6 @@ $translations = array(
|
||||
'Permanent login' => 'স্থায়ী লগইন',
|
||||
'Databases have been dropped.' => 'ডাটাবেজসমূহ মুছে ফেলা হয়েছে।',
|
||||
'Search data in tables' => 'টেবিলে খোঁজ করো',
|
||||
'schema' => 'স্কিমা',
|
||||
'Schema' => 'স্কিমা',
|
||||
'Alter schema' => 'স্কিমা পরিবর্তন করো',
|
||||
'Create schema' => 'স্কিমা তৈরী করো',
|
||||
@@ -257,7 +254,6 @@ $translations = array(
|
||||
'Attachments' => 'সংযুক্তি',
|
||||
'%d query(s) executed OK.' => array('SQL-কোয়্যারী সফলভাবে সম্পন্ন হয়েছে', '%d SQL-কোয়্যারীসমূহ সফলভাবে সম্পন্ন হয়েছে'),
|
||||
'Show only errors' => 'শুধুমাত্র ত্রুটি দেখাও',
|
||||
'Last page' => 'শেষ পাতা',
|
||||
'Refresh' => 'রিফ্রেশ',
|
||||
'Invalid schema.' => 'অবৈধ স্কিমা।',
|
||||
'Please use one of the extensions %s.' => 'কোন একটা এক্সটেনশন %s ব্যবহার করো।',
|
||||
|
||||
321
adminer/lang/bs.inc.php
Normal file
321
adminer/lang/bs.inc.php
Normal file
@@ -0,0 +1,321 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'Sistem',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Korisničko ime',
|
||||
'Password' => 'Lozinka',
|
||||
'Permanent login' => 'Trajna prijava',
|
||||
'Login' => 'Prijava',
|
||||
'Logout' => 'Odjava',
|
||||
'Logged as: %s' => 'Prijavi se kao: %s',
|
||||
'Logout successful.' => 'Uspešna odjava.',
|
||||
'Invalid credentials.' => 'Nevažeće dozvole.',
|
||||
'Language' => 'Jezik',
|
||||
'Invalid CSRF token. Send the form again.' => 'Nevažeći CSRF kod. Proslijedite ponovo formu.',
|
||||
'No extension' => 'Bez dodataka',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Nijedan od podržanih PHP dodataka nije dostupan.',
|
||||
'Session support must be enabled.' => 'Morate omogućiti podršku za sesije.',
|
||||
'Session expired, please login again.' => 'Vaša sesija je istekla, prijavite se ponovo.',
|
||||
'%s version: %s through PHP extension %s' => '%s verzija: %s pomoću PHP dodatka je %s',
|
||||
'Refresh' => 'Osveži',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Dozvole',
|
||||
'Create user' => 'Novi korisnik',
|
||||
'User has been dropped.' => 'Korisnik je izbrisan.',
|
||||
'User has been altered.' => 'Korisnik je izmijenjen.',
|
||||
'User has been created.' => 'korisnik je spašen.',
|
||||
'Hashed' => 'Heširano',
|
||||
'Column' => 'kolumna',
|
||||
'Routine' => 'Rutina',
|
||||
'Grant' => 'Dozvoli',
|
||||
'Revoke' => 'Opozovi',
|
||||
|
||||
'Process list' => 'Spisak procesa',
|
||||
'%d process(es) have been killed.' => array('%d proces je ukinut.', '%d procesa su ukinuta.', '%d procesa je ukinuto.'),
|
||||
'Kill' => 'Ubij',
|
||||
|
||||
'Variables' => 'Promijenljive',
|
||||
'Status' => 'Status',
|
||||
|
||||
'SQL command' => 'SQL komanda',
|
||||
'%d query(s) executed OK.' => array('%d upit je uspiješno izvršen.', '%d upita su uspiješno izvršena.', '%d upita je uspiješno izvršeno.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Upit je uspiješno izvršen, %d red je ažuriran.', 'Upit je uspiješno izvršen, %d reda su ažurirana.', 'Upit je uspiješno izvršen, %d redova je ažurirano.'),
|
||||
'No commands to execute.' => 'Bez komandi za izvršavanje.',
|
||||
'Error in query' => 'Greška u upitu',
|
||||
'Execute' => 'Izvrši',
|
||||
'Stop on error' => 'Zaustavi prilikom greške',
|
||||
'Show only errors' => 'Prikazuj samo greške',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Historijat',
|
||||
'Clear' => 'Očisti',
|
||||
'Edit all' => 'Izmijeni sve',
|
||||
|
||||
'File upload' => 'Slanje datoteka',
|
||||
'From server' => 'Sa servera',
|
||||
'Webserver file %s' => 'Datoteka %s sa veb servera',
|
||||
'Run file' => 'Pokreni datoteku',
|
||||
'File does not exist.' => 'Datoteka ne postoji.',
|
||||
'File uploads are disabled.' => 'Onemogućeno je slanje datoteka.',
|
||||
'Unable to upload a file.' => 'Slanje datoteke nije uspelo.',
|
||||
'Maximum allowed file size is %sB.' => 'Najveća dozvoljena veličina datoteke je %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Preveliki POST podatak. Morate da smanjite podatak ili povećajte vrijednost konfiguracione direktive %s.',
|
||||
|
||||
'Export' => 'Izvoz',
|
||||
'Output' => 'Ispis',
|
||||
'open' => 'otvori',
|
||||
'save' => 'spasi',
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Podaci',
|
||||
|
||||
'Database' => 'Baza podataka',
|
||||
'database' => 'baza podataka',
|
||||
'Use' => 'Koristi',
|
||||
'Select database' => 'Izaberite bazu',
|
||||
'Invalid database.' => 'Neispravna baza podataka.',
|
||||
'Database has been dropped.' => 'Baza podataka je izbrisana.',
|
||||
'Databases have been dropped.' => 'Baze podataka su izbrisane.',
|
||||
'Database has been created.' => 'Baza podataka je spašena.',
|
||||
'Database has been renamed.' => 'Baza podataka je preimenovana.',
|
||||
'Database has been altered.' => 'Baza podataka je izmijenjena.',
|
||||
'Alter database' => 'Ažuriraj bazu podataka',
|
||||
'Create database' => 'Formiraj bazu podataka',
|
||||
'Database schema' => 'Šema baze podataka',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Trajna veza',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Stroj',
|
||||
'Collation' => 'Sravnjivanje',
|
||||
'Data Length' => 'Dužina podataka',
|
||||
'Index Length' => 'Dužina indeksa',
|
||||
'Data Free' => 'Slobodno podataka',
|
||||
'Rows' => 'Redova',
|
||||
'%d in total' => 'ukupno %d',
|
||||
'Analyze' => 'Analiziraj',
|
||||
'Optimize' => 'Optimizuj',
|
||||
'Check' => 'Provjeri',
|
||||
'Repair' => 'Popravi',
|
||||
'Truncate' => 'Isprazni',
|
||||
'Tables have been truncated.' => 'Tabele su ispražnjene.',
|
||||
'Move to other database' => 'Premijesti u drugu bazu podataka',
|
||||
'Move' => 'Premijesti',
|
||||
'Tables have been moved.' => 'Tabele su premješćene.',
|
||||
'Copy' => 'Umnoži',
|
||||
'Tables have been copied.' => 'Tabele su umnožene.',
|
||||
|
||||
'Routines' => 'Rutine',
|
||||
'Routine has been called, %d row(s) affected.' => array('Pozvana je rutina, %d red je ažuriran.', 'Pozvana je rutina, %d reda su ažurirani.', 'Pozvana je rutina, %d redova je ažurirano.'),
|
||||
'Call' => 'Pozovi',
|
||||
'Parameter name' => 'Naziv parametra',
|
||||
'Create procedure' => 'Formiraj proceduru',
|
||||
'Create function' => 'Formiraj funkciju',
|
||||
'Routine has been dropped.' => 'Rutina je izbrisana.',
|
||||
'Routine has been altered.' => 'Rutina je izmijenjena.',
|
||||
'Routine has been created.' => 'Rutina je spašena.',
|
||||
'Alter function' => 'Ažuriraj funkciju',
|
||||
'Alter procedure' => 'Ažuriraj proceduru',
|
||||
'Return type' => 'Povratni tip',
|
||||
|
||||
'Events' => 'Događaji',
|
||||
'Event has been dropped.' => 'Događaj je izbrisan.',
|
||||
'Event has been altered.' => 'Događaj je izmijenjen.',
|
||||
'Event has been created.' => 'Događaj je spašen.',
|
||||
'Alter event' => 'Ažuriraj događaj',
|
||||
'Create event' => 'Napravi događaj',
|
||||
'At given time' => 'U zadato vrijeme',
|
||||
'Every' => 'Svaki',
|
||||
'Schedule' => 'Raspored',
|
||||
'Start' => 'Početak',
|
||||
'End' => 'Kraj',
|
||||
'On completion preserve' => 'Zadrži po završetku',
|
||||
|
||||
'Tables' => 'Tabele',
|
||||
'Tables and views' => 'Tabele i pogledi',
|
||||
'Table' => 'Tabela',
|
||||
'No tables.' => 'Bez tabela.',
|
||||
'Alter table' => 'Ažuriraj tabelu',
|
||||
'Create table' => 'Napravi tabelu',
|
||||
'Table has been dropped.' => 'Tabela je izbrisana.',
|
||||
'Tables have been dropped.' => 'Tabele su izbrisane.',
|
||||
'Tables have been optimized.' => 'Tabele su optimizovane.',
|
||||
'Table has been altered.' => 'Tabela je izmijenjena.',
|
||||
'Table has been created.' => 'Tabela je spašena.',
|
||||
'Table name' => 'Naziv tabele',
|
||||
'Show structure' => 'Prikaži strukturu',
|
||||
'engine' => 'stroj',
|
||||
'collation' => 'Sravnjivanje',
|
||||
'Column name' => 'Naziv kolumne',
|
||||
'Type' => 'Tip',
|
||||
'Length' => 'Dužina',
|
||||
'Auto Increment' => 'Auto-priraštaj',
|
||||
'Options' => 'Opcije',
|
||||
'Comment' => 'Komentar',
|
||||
'Default values' => 'Podrazumijevane vrijednosti',
|
||||
'Drop' => 'Izbriši',
|
||||
'Are you sure?' => 'Da li ste sigurni?',
|
||||
'Move up' => 'Pomijeri na gore',
|
||||
'Move down' => 'Pomijeri na dole',
|
||||
'Remove' => 'Ukloni',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Premašen je maksimalni broj dozvoljenih polja. Molim uvećajte %s.',
|
||||
|
||||
'Partition by' => 'Podijeli po',
|
||||
'Partitions' => 'Podijele',
|
||||
'Partition name' => 'Ime podijele',
|
||||
'Values' => 'Vrijednosti',
|
||||
|
||||
'View' => 'Pogled',
|
||||
'View has been dropped.' => 'Pogled je izbrisan.',
|
||||
'View has been altered.' => 'Pogled je izmijenjen.',
|
||||
'View has been created.' => 'Pogled je spašen.',
|
||||
'Alter view' => 'Ažuriraj pogled',
|
||||
'Create view' => 'Napravi pogled',
|
||||
|
||||
'Indexes' => 'Indeksi',
|
||||
'Indexes have been altered.' => 'Indeksi su izmijenjeni.',
|
||||
'Alter indexes' => 'Ažuriraj indekse',
|
||||
'Add next' => 'Dodaj slijedeći',
|
||||
'Index Type' => 'Tip indeksa',
|
||||
'Column (length)' => 'kolumna (dužina)',
|
||||
|
||||
'Foreign keys' => 'Strani ključevi',
|
||||
'Foreign key' => 'Strani ključ',
|
||||
'Foreign key has been dropped.' => 'Strani ključ je izbrisan.',
|
||||
'Foreign key has been altered.' => 'Strani ključ je izmijenjen.',
|
||||
'Foreign key has been created.' => 'Strani ključ je spašen.',
|
||||
'Target table' => 'Ciljna tabela',
|
||||
'Change' => 'izmijeni',
|
||||
'Source' => 'Izvor',
|
||||
'Target' => 'Cilj',
|
||||
'Add column' => 'Dodaj kolumnu',
|
||||
'Alter' => 'Ažuriraj',
|
||||
'Add foreign key' => 'Dodaj strani ključ',
|
||||
'ON DELETE' => 'ON DELETE (prilikom brisanja)',
|
||||
'ON UPDATE' => 'ON UPDATE (prilikom osvežavanja)',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Izvorne i ciljne kolumne moraju biti istog tipa, ciljna kolumna mora biti indeksirana i izvorna tabela mora sadržati podatke iz ciljne.',
|
||||
|
||||
'Triggers' => 'Okidači',
|
||||
'Add trigger' => 'Dodaj okidač',
|
||||
'Trigger has been dropped.' => 'Okidač je izbrisan.',
|
||||
'Trigger has been altered.' => 'Okidač je izmijenjen.',
|
||||
'Trigger has been created.' => 'Okidač je spašen.',
|
||||
'Alter trigger' => 'Ažuriraj okidač',
|
||||
'Create trigger' => 'Formiraj okidač',
|
||||
'Time' => 'Vrijeme',
|
||||
'Event' => 'Događaj',
|
||||
'Name' => 'Ime',
|
||||
|
||||
'select' => 'izaberi',
|
||||
'Select' => 'Izaberi',
|
||||
'Selected' => 'Izabrano',
|
||||
'Select data' => 'Izaberi podatke',
|
||||
'Functions' => 'Funkcije',
|
||||
'Aggregation' => 'Sakupljanje',
|
||||
'Search' => 'Pretraga',
|
||||
'anywhere' => 'bilo gdje',
|
||||
'Search data in tables' => 'Pretraži podatke u tabelama',
|
||||
'Sort' => 'Poređaj',
|
||||
'descending' => 'opadajuće',
|
||||
'Limit' => 'Granica',
|
||||
'Text length' => 'Dužina teksta',
|
||||
'Action' => 'Akcija',
|
||||
'Full table scan' => 'Skreniranje kompletne tabele',
|
||||
'Unable to select the table' => 'Ne mogu da izaberem tabelu',
|
||||
'No rows.' => 'Bez redova.',
|
||||
'%d row(s)' => array('%d red', '%d reda', '%d redova'),
|
||||
'Page' => 'Strana',
|
||||
'last' => 'poslijednja',
|
||||
'Loading' => 'Učitavam',
|
||||
'Load more data' => 'Učitavam još podataka',
|
||||
'Whole result' => 'Ceo rezultat',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajtova'),
|
||||
|
||||
'Import' => 'Uvoz',
|
||||
'%d row(s) have been imported.' => array('%d red je uvežen.', '%d reda su uvežena.', '%d redova je uveženo.'),
|
||||
|
||||
// in-place editing in select
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klik na vrijednost za izmijenu.',
|
||||
'Use edit link to modify this value.' => 'Koristi vezu za izmijenu ove vrijednosti.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Stavka %s je spašena.',
|
||||
'Item has been deleted.' => 'Stavka je izbrisana.',
|
||||
'Item has been updated.' => 'Stavka je izmijenjena.',
|
||||
'%d item(s) have been affected.' => array('%d stavka je ažurirana.', '%d stavke su ažurirane.', '%d stavki je ažurirano.'),
|
||||
'New item' => 'Nova stavka',
|
||||
'original' => 'original',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'prazno',
|
||||
'edit' => 'izmijeni',
|
||||
'Edit' => 'Izmijeni',
|
||||
'Insert' => 'Umetni',
|
||||
'Save' => 'Sačuvaj',
|
||||
'Save and continue edit' => 'Sačuvaj i nastavi uređenje',
|
||||
'Save and insert next' => 'Sačuvaj i umijetni slijedeće',
|
||||
'Clone' => 'Dupliraj',
|
||||
'Delete' => 'Izbriši',
|
||||
'Modify' => 'Izmjene',
|
||||
|
||||
'E-mail' => 'El. pošta',
|
||||
'From' => 'Od',
|
||||
'Subject' => 'Naslov',
|
||||
'Attachments' => 'Prilozi',
|
||||
'Send' => 'Pošalji',
|
||||
'%d e-mail(s) have been sent.' => array('%d poruka el. pošte je poslata.', '%d poruke el. pošte su poslate.', '%d poruka el. pošte je poslato.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Broj',
|
||||
'Date and time' => 'Datum i vrijeme',
|
||||
'Strings' => 'Tekst',
|
||||
'Binary' => 'Binarno',
|
||||
'Lists' => 'Liste',
|
||||
'Network' => 'Mreža',
|
||||
'Geometry' => 'Geometrija',
|
||||
'Relations' => 'Odnosi',
|
||||
|
||||
'Editor' => 'Uređivač',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$5.$3.$1.',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => 'dd.mm.[yyyy].',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'sad',
|
||||
'yes' => 'da',
|
||||
'no' => 'ne',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Datoteka već postoji.',
|
||||
'Please use one of the extensions %s.' => 'Molim koristite jedan od nastavaka %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Ažuriraj šemu',
|
||||
'Create schema' => 'Formiraj šemu',
|
||||
'Schema has been dropped.' => 'Šema je izbrisana.',
|
||||
'Schema has been created.' => 'Šema je spašena.',
|
||||
'Schema has been altered.' => 'Šema je izmijenjena.',
|
||||
'Schema' => 'Šema',
|
||||
'Invalid schema.' => 'Šema nije ispravna.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Nizovi',
|
||||
'Create sequence' => 'Napravi niz',
|
||||
'Sequence has been dropped.' => 'Niz je izbrisan.',
|
||||
'Sequence has been created.' => 'Niz je formiran.',
|
||||
'Sequence has been altered.' => 'Niz je izmijenjen.',
|
||||
'Alter sequence' => 'Ažuriraj niz',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Korisnički tipovi',
|
||||
'Create type' => 'Definiši tip',
|
||||
'Type has been dropped.' => 'Tip je izbrisan.',
|
||||
'Type has been created.' => 'tip je spašen.',
|
||||
'Alter type' => 'Ažuriraj tip',
|
||||
);
|
||||
@@ -2,13 +2,12 @@
|
||||
$translations = array(
|
||||
'Login' => 'Inicia la sessió',
|
||||
'Logout successful.' => 'Desconnexió correcta.',
|
||||
'Invalid credentials.' => 'Credencials invàlids.',
|
||||
'Invalid credentials.' => 'Credencials invàlides.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Nom d\'usuari',
|
||||
'Password' => 'Contrasenya',
|
||||
'Select database' => 'Selecciona base de dades',
|
||||
'Invalid database.' => 'Base de dades invàlida.',
|
||||
'Create new database' => 'Crea una nova base de dades',
|
||||
'Table has been dropped.' => 'S\'ha suprimit la taula.',
|
||||
'Table has been altered.' => 'S\'ha modificat la taula.',
|
||||
'Table has been created.' => 'S\'ha creat la taula.',
|
||||
@@ -31,14 +30,12 @@ $translations = array(
|
||||
'Alter database' => 'Modifica la base de dades',
|
||||
'Create database' => 'Crea una base de dades',
|
||||
'SQL command' => 'Ordre SQL',
|
||||
'Dump' => 'Exporta',
|
||||
'Logout' => 'Desconnecta',
|
||||
'database' => 'base de dades',
|
||||
'Use' => 'Utilitza',
|
||||
'No tables.' => 'No hi ha cap taula.',
|
||||
'select' => 'registres',
|
||||
'Create new table' => 'Crea una nova taula',
|
||||
'Item has been deleted.' => 'S\'ha suprmit l\'element.',
|
||||
'Item has been deleted.' => 'S\'ha suprimit l\'element.',
|
||||
'Item has been updated.' => 'S\'ha actualitzat l\'element.',
|
||||
'Item%s has been inserted.' => 'S\'ha insertat l\'element%s.',
|
||||
'Edit' => 'Edita',
|
||||
@@ -47,9 +44,9 @@ $translations = array(
|
||||
'Delete' => 'Suprimeix',
|
||||
'Database' => 'Base de dades',
|
||||
'Routines' => 'Rutines',
|
||||
'Indexes have been altered.' => 'S\'han modificat els índexs.',
|
||||
'Indexes have been altered.' => 'S\'han modificat els índex.',
|
||||
'Indexes' => 'Índexs',
|
||||
'Alter indexes' => 'Modifica els índexs',
|
||||
'Alter indexes' => 'Modifica els índex',
|
||||
'Add next' => 'Afegeix el següent',
|
||||
'Language' => 'Idioma',
|
||||
'Select' => 'Selecciona',
|
||||
@@ -77,11 +74,11 @@ $translations = array(
|
||||
'No commands to execute.' => 'Cap comanda per executar.',
|
||||
'Unable to upload a file.' => 'Impossible adjuntar el fitxer.',
|
||||
'File upload' => 'Adjunta un fitxer',
|
||||
'File uploads are disabled.' => 'L\'ddjunció de fitxers està desactivada.',
|
||||
'File uploads are disabled.' => 'La pujada de fitxers està desactivada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('S\'ha cridat la rutina, %d registre modificat.', 'S\'ha cridat la rutina, %d registres modificats.'),
|
||||
'Call' => 'Crida',
|
||||
'No extension' => 'Cap extensió',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP soporatades (%s) disponible.',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'No hi ha cap de les extensions PHP suportades (%s) disponible.',
|
||||
'Session support must be enabled.' => 'Cal que estigui permès l\'us de sessions.',
|
||||
'Session expired, please login again.' => 'La sessió ha expirat, torna a iniciar-ne una.',
|
||||
'Text length' => 'Longitud del text',
|
||||
@@ -89,7 +86,7 @@ $translations = array(
|
||||
'Foreign key has been altered.' => 'S\'ha modificat la clau forana.',
|
||||
'Foreign key has been created.' => 'S\'ha creat la clau forana.',
|
||||
'Foreign key' => 'Clau forana',
|
||||
'Target table' => 'Taula de destí',
|
||||
'Target table' => 'Taula de destinació',
|
||||
'Change' => 'Canvi',
|
||||
'Source' => 'Font',
|
||||
'Target' => 'Destí',
|
||||
@@ -142,7 +139,7 @@ $translations = array(
|
||||
'Grant' => 'Grant',
|
||||
'Revoke' => 'Revoke',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Les dades POST són massa grans. Redueix les dades o incrementa la directiva de configuració %s.',
|
||||
'Logged as: %s' => 'Connectat com: %s',
|
||||
'Logged as: %s' => 'Connectat com a: %s',
|
||||
'Move up' => 'Mou a dalt',
|
||||
'Move down' => 'Mou a baix',
|
||||
'Functions' => 'Funcions',
|
||||
@@ -180,6 +177,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'S\'han escapçat les taules.',
|
||||
'Rows' => 'Files',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'S\'han desplaçat les taules.',
|
||||
'Move to other database' => 'Desplaça a una altra base de dades',
|
||||
'Move' => 'Desplaça',
|
||||
@@ -187,7 +185,7 @@ $translations = array(
|
||||
'Save and continue edit' => 'Desa i segueix editant',
|
||||
'original' => 'original',
|
||||
'%d item(s) have been affected.' => array('S\'ha modificat %d element.', 'S\'han modificat %d elements.'),
|
||||
'whole result' => 'tots els resultats',
|
||||
'Whole result' => 'Tots els resultats',
|
||||
'Tables have been dropped.' => 'S\'han suprimit les taules.',
|
||||
'Clone' => 'Clona',
|
||||
'Partition by' => 'Fes particions segons',
|
||||
@@ -199,14 +197,14 @@ $translations = array(
|
||||
'Show structure' => 'Mostra l\'estructura',
|
||||
'Select data' => 'Selecciona dades',
|
||||
'Stop on error' => 'Atura en trobar un error',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'S\'ha assolit el nombre màxim de camps. Incrementa %s i %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'S\'ha assolit el nombre màxim de camps. Incrementa %s.',
|
||||
'anywhere' => 'a qualsevol lloc',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5/$3/$1',
|
||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||
'History' => 'Història',
|
||||
'Variables' => 'Variables',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les columnes origen i destí han de ser del mateix tipus, la columna destí ha d\'estar indexada i les dades referenciades han d\'existir.',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Les columnes d\'origen i de destinació han de ser del mateix tipus, la columna de destinació ha d\'estar indexada i les dades referenciades han d\'existir.',
|
||||
'E-mail' => 'Correu electrònic',
|
||||
'From' => 'De',
|
||||
'Subject' => 'Assumpte',
|
||||
@@ -240,7 +238,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'S\'ha suprimit l\'esquema.',
|
||||
'Schema has been created.' => 'S\'ha creat l\'esquema.',
|
||||
'Schema has been altered.' => 'S\'ha modificat l\'esquema.',
|
||||
'schema' => 'esquema',
|
||||
'Schema' => 'Esquema',
|
||||
'Sequences' => 'Seqüències',
|
||||
'Create sequence' => 'Crea una seqüència',
|
||||
@@ -259,7 +256,6 @@ $translations = array(
|
||||
'now' => 'ara',
|
||||
'%d query(s) executed OK.' => array('%d consulta executada correctament.', '%d consultes executades correctament.'),
|
||||
'Show only errors' => 'Mostra només els errors',
|
||||
'Last page' => 'Darrera plana',
|
||||
'Refresh' => 'Refresca',
|
||||
'Invalid schema.' => 'Esquema invàlid.',
|
||||
'Please use one of the extensions %s.' => 'Si us plau, utilitza una de les extensions %s.',
|
||||
|
||||
@@ -10,13 +10,23 @@ $translations = array(
|
||||
'Logout' => 'Odhlásit',
|
||||
'Logged as: %s' => 'Přihlášen jako: %s',
|
||||
'Logout successful.' => 'Odhlášení proběhlo v pořádku.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Díky za použití Admineru, <a href="https://www.adminer.org/cs/donation/">přispějte</a> na vývoj.',
|
||||
'Invalid credentials.' => 'Neplatné přihlašovací údaje.',
|
||||
'There is a space in the input password which might be the cause.' => 'Problém může být, že je v zadaném hesle mezera.',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer nepodporuje přístup k databázi bez hesla, <a href="https://www.adminer.org/cs/password/"%s>více informací</a>.',
|
||||
'Database does not support password.' => 'Databáze nepodporuje heslo.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minutu.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minuty.', 'Příliš mnoho pokusů o přihlášení, zkuste to znovu za %d minut.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Platnost hlavního hesla vypršela. <a href="https://www.adminer.org/cs/extension/"%s>Implementujte</a> metodu %s, aby platilo stále.',
|
||||
'Language' => 'Jazyk',
|
||||
'Invalid CSRF token. Send the form again.' => 'Neplatný token CSRF. Odešlete formulář znovu.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Pokud jste tento požadavek neposlali z Adminera, tak tuto stránku zavřete.',
|
||||
'No extension' => 'Žádné rozšíření',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Není dostupné žádné z podporovaných PHP rozšíření (%s).',
|
||||
'Connecting to privileged ports is not allowed.' => 'Připojování k privilegovaným portům není povoleno.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Zakažte %s nebo povolte extenze %s nebo %s.',
|
||||
'Session support must be enabled.' => 'Session proměnné musí být povolené.',
|
||||
'Session expired, please login again.' => 'Session vypršela, přihlašte se prosím znovu.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Akce bude provedena po úspěšném přihlášení se stejnými přihlašovacími údaji.',
|
||||
'%s version: %s through PHP extension %s' => 'Verze %s: %s přes PHP rozšíření %s',
|
||||
'Refresh' => 'Obnovit',
|
||||
|
||||
@@ -46,6 +56,9 @@ $translations = array(
|
||||
'Query executed OK, %d row(s) affected.' => array('Příkaz proběhl v pořádku, byl změněn %d záznam.', 'Příkaz proběhl v pořádku, byly změněny %d záznamy.', 'Příkaz proběhl v pořádku, bylo změněno %d záznamů.'),
|
||||
'No commands to execute.' => 'Žádné příkazy k vykonání.',
|
||||
'Error in query' => 'Chyba v dotazu',
|
||||
'Unknown error.' => 'Neznámá chyba.',
|
||||
'Warnings' => 'Varování',
|
||||
'ATTACH queries are not supported.' => 'Dotazy ATTACH nejsou podporované.',
|
||||
'Execute' => 'Provést',
|
||||
'Stop on error' => 'Zastavit při chybě',
|
||||
'Show only errors' => 'Zobrazit pouze chyby',
|
||||
@@ -64,9 +77,10 @@ $translations = array(
|
||||
'Unable to upload a file.' => 'Nepodařilo se nahrát soubor.',
|
||||
'Maximum allowed file size is %sB.' => 'Maximální povolená velikost souboru je %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Příliš velká POST data. Zmenšete data nebo zvyšte hodnotu konfigurační direktivy %s.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Velký SQL soubor můžete nahrát pomocí FTP a importovat ho ze serveru.',
|
||||
'You are offline.' => 'Jste offline.',
|
||||
|
||||
'Export' => 'Export',
|
||||
'Dump' => 'Export',
|
||||
'Output' => 'Výstup',
|
||||
'open' => 'otevřít',
|
||||
'save' => 'uložit',
|
||||
@@ -75,10 +89,10 @@ $translations = array(
|
||||
|
||||
'Database' => 'Databáze',
|
||||
'database' => 'databáze',
|
||||
'DB' => 'DB',
|
||||
'Use' => 'Vybrat',
|
||||
'Select database' => 'Vybrat databázi',
|
||||
'Invalid database.' => 'Nesprávná databáze.',
|
||||
'Create new database' => 'Vytvořit novou databázi',
|
||||
'Database has been dropped.' => 'Databáze byla odstraněna.',
|
||||
'Databases have been dropped.' => 'Databáze byly odstraněny.',
|
||||
'Database has been created.' => 'Databáze byla vytvořena.',
|
||||
@@ -93,6 +107,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Úložiště',
|
||||
'Collation' => 'Porovnávání',
|
||||
'Data Length' => 'Velikost dat',
|
||||
@@ -102,6 +117,7 @@ $translations = array(
|
||||
'%d in total' => '%d celkem',
|
||||
'Analyze' => 'Analyzovat',
|
||||
'Optimize' => 'Optimalizovat',
|
||||
'Vacuum' => 'Vyčistit',
|
||||
'Check' => 'Zkontrolovat',
|
||||
'Repair' => 'Opravit',
|
||||
'Truncate' => 'Vyprázdnit',
|
||||
@@ -111,6 +127,7 @@ $translations = array(
|
||||
'Tables have been moved.' => 'Tabulky byly přesunuty.',
|
||||
'Copy' => 'Zkopírovat',
|
||||
'Tables have been copied.' => 'Tabulky byly zkopírovány.',
|
||||
'overwrite' => 'přepsat',
|
||||
|
||||
'Routines' => 'Procedury a funkce',
|
||||
'Routine has been called, %d row(s) affected.' => array('Procedura byla zavolána, byl změněn %d záznam.', 'Procedura byla zavolána, byly změněny %d záznamy.', 'Procedura byla zavolána, bylo změněno %d záznamů.'),
|
||||
@@ -144,7 +161,6 @@ $translations = array(
|
||||
'No tables.' => 'Žádné tabulky.',
|
||||
'Alter table' => 'Pozměnit tabulku',
|
||||
'Create table' => 'Vytvořit tabulku',
|
||||
'Create new table' => 'Vytvořit novou tabulku',
|
||||
'Table has been dropped.' => 'Tabulka byla odstraněna.',
|
||||
'Tables have been dropped.' => 'Tabulky byly odstraněny.',
|
||||
'Tables have been optimized.' => 'Tabulky byly optimalizovány.',
|
||||
@@ -160,13 +176,17 @@ $translations = array(
|
||||
'Auto Increment' => 'Auto Increment',
|
||||
'Options' => 'Volby',
|
||||
'Comment' => 'Komentář',
|
||||
'Default value' => 'Výchozí hodnota',
|
||||
'Default values' => 'Výchozí hodnoty',
|
||||
'Drop' => 'Odstranit',
|
||||
'Drop %s?' => 'Odstranit %s?',
|
||||
'Are you sure?' => 'Opravdu?',
|
||||
'Size' => 'Velikost',
|
||||
'Compute' => 'Spočítat',
|
||||
'Move up' => 'Přesunout nahoru',
|
||||
'Move down' => 'Přesunout dolů',
|
||||
'Remove' => 'Odebrat',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Byl překročen maximální povolený počet polí. Zvyšte prosím %s a %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Byl překročen maximální povolený počet polí. Zvyšte prosím %s.',
|
||||
|
||||
'Partition by' => 'Rozdělit podle',
|
||||
'Partitions' => 'Oddíly',
|
||||
@@ -174,6 +194,7 @@ $translations = array(
|
||||
'Values' => 'Hodnoty',
|
||||
|
||||
'View' => 'Pohled',
|
||||
'Materialized view' => 'Materializovaný pohled',
|
||||
'View has been dropped.' => 'Pohled byl odstraněn.',
|
||||
'View has been altered.' => 'Pohled byl změněn.',
|
||||
'View has been created.' => 'Pohled byl vytvořen.',
|
||||
@@ -225,24 +246,27 @@ $translations = array(
|
||||
'Sort' => 'Seřadit',
|
||||
'descending' => 'sestupně',
|
||||
'Limit' => 'Limit',
|
||||
'Limit rows' => 'Limit řádek',
|
||||
'Text length' => 'Délka textů',
|
||||
'Action' => 'Akce',
|
||||
'Full table scan' => 'Průchod celé tabulky',
|
||||
'Unable to select the table' => 'Nepodařilo se vypsat tabulku',
|
||||
'No rows.' => 'Žádné řádky.',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d řádek', '%d řádky', '%d řádků'),
|
||||
'Page' => 'Stránka',
|
||||
'last' => 'poslední',
|
||||
'Last page' => 'Poslední stránka',
|
||||
'Load more data' => 'Nahrát další data',
|
||||
'Loading' => 'Nahrává se',
|
||||
'whole result' => 'celý výsledek',
|
||||
'Whole result' => 'Celý výsledek',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtů'),
|
||||
|
||||
'Import' => 'Import',
|
||||
'%d row(s) have been imported.' => array('Byl importován %d záznam.', 'Byly importovány %d záznamy.', 'Bylo importováno %d záznamů.'),
|
||||
'File must be in UTF-8 encoding.' => 'Soubor musí být v kódování UTF-8.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Změnit',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klikněte na políčko, které chcete změnit.',
|
||||
'Use edit link to modify this value.' => 'Ke změně této hodnoty použijte odkaz upravit.',
|
||||
|
||||
@@ -259,8 +283,10 @@ $translations = array(
|
||||
'Edit' => 'Upravit',
|
||||
'Insert' => 'Vložit',
|
||||
'Save' => 'Uložit',
|
||||
'Saving' => 'Ukládá se',
|
||||
'Save and continue edit' => 'Uložit a pokračovat v editaci',
|
||||
'Save and insert next' => 'Uložit a vložit další',
|
||||
'Selected' => 'Označené',
|
||||
'Clone' => 'Klonovat',
|
||||
'Delete' => 'Smazat',
|
||||
'You have no privileges to update this table.' => 'Nemáte oprávnění editovat tuto tabulku.',
|
||||
@@ -303,7 +329,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Schéma bylo odstraněno.',
|
||||
'Schema has been created.' => 'Schéma bylo vytvořeno.',
|
||||
'Schema has been altered.' => 'Schéma bylo změněno.',
|
||||
'schema' => 'schéma',
|
||||
'Schema' => 'Schéma',
|
||||
'Invalid schema.' => 'Nesprávné schéma.',
|
||||
|
||||
|
||||
282
adminer/lang/da.inc.php
Normal file
282
adminer/lang/da.inc.php
Normal file
@@ -0,0 +1,282 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'System' => 'System',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Brugernavn',
|
||||
'Password' => 'Kodeord',
|
||||
'Permanent login' => 'Permanent login',
|
||||
'Login' => 'Log ind',
|
||||
'Logout' => 'Log ud',
|
||||
'Logged as: %s' => 'Logget ind som: %s',
|
||||
'Logout successful.' => 'Log af vellykket.',
|
||||
'Invalid credentials.' => 'Ugyldige log ind oplysninger.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-kodeordet er udløbet. <a href="https://www.adminer.org/en/extension/"%s>Implementer</a> en metode for %s for at gøre det permanent.',
|
||||
'Language' => 'Sprog',
|
||||
'Invalid CSRF token. Send the form again.' => 'Ugyldigt CSRF-token - Genindsend formen.',
|
||||
'No extension' => 'Ingen udvidelse',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Ingen af de understøttede PHP-udvidelser (%s) er tilgængelige.',
|
||||
'Session support must be enabled.' => 'Session support skal være slået til.',
|
||||
'Session expired, please login again.' => 'Sessionen er udløbet - Log venligst ind igen.',
|
||||
'%s version: %s through PHP extension %s' => '%s version: %s via PHP-udvidelse %s',
|
||||
'Refresh' => 'Genindlæs',
|
||||
'ltr' => 'ltr',
|
||||
'Privileges' => 'Privilegier',
|
||||
'Create user' => 'Opret bruger',
|
||||
'User has been dropped.' => 'Brugeren slettet.',
|
||||
'User has been altered.' => 'Brugeren ændret.',
|
||||
'User has been created.' => 'Brugeren oprettet.',
|
||||
'Hashed' => 'Hashet',
|
||||
'Column' => 'Kolonne',
|
||||
'Routine' => 'Rutine',
|
||||
'Grant' => 'Giv privilegier',
|
||||
'Revoke' => 'Træk tilbage',
|
||||
'Process list' => 'Procesliste',
|
||||
'%d process(es) have been killed.' => array('%d proces afsluttet.', '%d processer afsluttet.'),
|
||||
'Kill' => 'Afslut',
|
||||
'Variables' => 'Variabler',
|
||||
'Status' => 'Status',
|
||||
'SQL command' => 'SQL-kommando',
|
||||
'%d query(s) executed OK.' => array('%d kald udført OK.', '%d kald udført OK.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Kald udført OK, %d række påvirket.', 'Kald udført OK, %d rækker påvirket.'),
|
||||
'No commands to execute.' => 'Ingen kommandoer at udføre.',
|
||||
'Error in query' => 'Fejl i forespørgelse',
|
||||
'Execute' => 'Kør',
|
||||
'Stop on error' => 'Stop ved fejl',
|
||||
'Show only errors' => 'Vis kun fejl',
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Historik',
|
||||
'Clear' => 'Tøm',
|
||||
'Edit all' => 'Rediger alle',
|
||||
'File upload' => 'Fil upload',
|
||||
'From server' => 'Fra server',
|
||||
'Webserver file %s' => 'Webserver-fil %s',
|
||||
'Run file' => 'Kør fil',
|
||||
'File does not exist.' => 'Filen eksisterer ikke.',
|
||||
'File uploads are disabled.' => 'Fil upload er slået fra.',
|
||||
'Unable to upload a file.' => 'Kunne ikke uploade fil.',
|
||||
'Maximum allowed file size is %sB.' => 'Maksimum tilladte filstørrelse er %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Maks POST data er overskredet. Reducer mængden af data eller øg størrelsen i %s-konfigurationen.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Du kan uploade en stor SQL-fil via FTP og importere den fra serveren.',
|
||||
'Export' => 'Eksport',
|
||||
'Output' => 'Resultat',
|
||||
'open' => 'Åben',
|
||||
'save' => 'Gem',
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Data',
|
||||
'Database' => 'Database',
|
||||
'database' => 'database',
|
||||
'Use' => 'Brug',
|
||||
'Select database' => 'Vælg database',
|
||||
'Invalid database.' => 'Ugyldig database.',
|
||||
'Database has been dropped.' => 'Databasen er blevet slettet.',
|
||||
'Databases have been dropped.' => 'Databasene er blevet slettet.',
|
||||
'Database has been created.' => 'Databasen er oprettet.',
|
||||
'Database has been renamed.' => 'Databasen har fået nyt navn.',
|
||||
'Database has been altered.' => 'Databasen er ændret.',
|
||||
'Alter database' => 'Ændre database',
|
||||
'Create database' => 'Opret database',
|
||||
'Database schema' => 'Databaseskema',
|
||||
'Permanent link' => 'Permanent link',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Motor',
|
||||
'Collation' => 'Tekstsortering',
|
||||
'Data Length' => 'Datalængde',
|
||||
'Index Length' => 'Indekslængde',
|
||||
'Data Free' => 'Fri data',
|
||||
'Rows' => 'Rader',
|
||||
'%d in total' => '%d total',
|
||||
'Analyze' => 'Analyser',
|
||||
'Optimize' => 'Optimaliser',
|
||||
'Vacuum' => 'Støvsug',
|
||||
'Check' => 'Tjek',
|
||||
'Repair' => 'Reparer',
|
||||
'Truncate' => 'Afkort',
|
||||
'Tables have been truncated.' => 'Tabellerne er blevet afkortet.',
|
||||
'Move to other database' => 'Flyt til anden database',
|
||||
'Move' => 'Flyt',
|
||||
'Tables have been moved.' => 'Tabellerne er blevet flyttet.',
|
||||
'Copy' => 'Kopier',
|
||||
'Tables have been copied.' => 'Tabellerne er blevet kopiert.',
|
||||
'Routines' => 'Rutiner',
|
||||
'Routine has been called, %d row(s) affected.' => array('Rutinen er udført, %d række påvirket.', 'Rutinen er udført, %d rækker påvirket.'),
|
||||
'Call' => 'Kald',
|
||||
'Parameter name' => 'Parameternavn',
|
||||
'Create procedure' => 'Opret procedure',
|
||||
'Create function' => 'Opret funktion',
|
||||
'Routine has been dropped.' => 'Rutinen er slettet.',
|
||||
'Routine has been altered.' => 'Rutinen er ændret.',
|
||||
'Routine has been created.' => 'Rutinen er oprettet.',
|
||||
'Alter function' => 'Ændre funktion',
|
||||
'Alter procedure' => 'Ændre procedure',
|
||||
'Return type' => 'Returtype',
|
||||
'Events' => 'Hændelser',
|
||||
'Event has been dropped.' => 'Hændelsen er slettet.',
|
||||
'Event has been altered.' => 'Hændelsen er ændret.',
|
||||
'Event has been created.' => 'Hændelsen er oprettet.',
|
||||
'Alter event' => 'Ændre hændelse',
|
||||
'Create event' => 'Opret hændelse',
|
||||
'At given time' => 'På givne tid',
|
||||
'Every' => 'Hver',
|
||||
'Schedule' => 'Tidsplan',
|
||||
'Start' => 'Start',
|
||||
'End' => 'Slut',
|
||||
'On completion preserve' => 'Ved fuldførelse bevar',
|
||||
'Tables' => 'Tabeller',
|
||||
'Tables and views' => 'Tabeller og views',
|
||||
'Table' => 'Tabel',
|
||||
'No tables.' => 'Ingen tabeller.',
|
||||
'Alter table' => 'Ændre tabel',
|
||||
'Create table' => 'Opret tabel',
|
||||
'Table has been dropped.' => 'Tabellen er slettet.',
|
||||
'Tables have been dropped.' => 'Tabellerne er slettet.',
|
||||
'Tables have been optimized.' => 'Tabellerne er blevet optimaliseret.',
|
||||
'Table has been altered.' => 'Tabellen er ændret.',
|
||||
'Table has been created.' => 'Tabellen er oprettet.',
|
||||
'Table name' => 'Tabelnavn',
|
||||
'Show structure' => 'Vis struktur',
|
||||
'engine' => 'motor',
|
||||
'collation' => 'sortering',
|
||||
'Column name' => 'Kolonnenavn',
|
||||
'Type' => 'Type',
|
||||
'Length' => 'Længde',
|
||||
'Auto Increment' => 'Auto Increment',
|
||||
'Options' => 'Valg',
|
||||
'Comment' => 'Kommentarer',
|
||||
'Default values' => 'Standardværdier',
|
||||
'Drop' => 'Drop',
|
||||
'Are you sure?' => 'Er du sikker?',
|
||||
'Move up' => 'Flyt op',
|
||||
'Move down' => 'Flyt ned',
|
||||
'Remove' => 'Fjern',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimum antal feltnavne overskredet - øg venligst %s.',
|
||||
'Partition by' => 'Partition ved',
|
||||
'Partitions' => 'Partitioner',
|
||||
'Partition name' => 'Partitionsnavn',
|
||||
'Values' => 'Værdier',
|
||||
'View' => 'View',
|
||||
'View has been dropped.' => 'Viewet er slettet.',
|
||||
'View has been altered.' => 'Viewet er ændret.',
|
||||
'View has been created.' => 'Viewet er oprettet.',
|
||||
'Alter view' => 'Ændre view',
|
||||
'Create view' => 'Nyt view',
|
||||
'Indexes' => 'Indekser',
|
||||
'Indexes have been altered.' => 'Indekserne er ændret.',
|
||||
'Alter indexes' => 'Ændre indekser',
|
||||
'Add next' => 'Læg til næste',
|
||||
'Index Type' => 'Indekstype',
|
||||
'Column (length)' => 'Kolonne (længde)',
|
||||
'Foreign keys' => 'Fremmednøgler',
|
||||
'Foreign key' => 'Fremmednøgle',
|
||||
'Foreign key has been dropped.' => 'Fremmednøglen er slettet.',
|
||||
'Foreign key has been altered.' => 'Fremmednøglen er ændret.',
|
||||
'Foreign key has been created.' => 'Fremmednøglen er oprettet.',
|
||||
'Target table' => 'Måltabel',
|
||||
'Change' => 'Ændre',
|
||||
'Source' => 'Kilde',
|
||||
'Target' => 'Mål',
|
||||
'Add column' => 'Tilføj kolonne',
|
||||
'Alter' => 'Ændre',
|
||||
'Add foreign key' => 'Tilføj fremmednøgle',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kilde- og målkolonner skal have samme datatype, der skal være en indeks på mål-kolonnen, og data som refereres til skal eksistere.',
|
||||
'Triggers' => 'Triggere',
|
||||
'Add trigger' => 'Tilføj trigger',
|
||||
'Trigger has been dropped.' => 'Triggeren er slettet.',
|
||||
'Trigger has been altered.' => 'Triggeren er ændret.',
|
||||
'Trigger has been created.' => 'Triggeren er oprettet.',
|
||||
'Alter trigger' => 'Ændre trigger',
|
||||
'Create trigger' => 'Opret trigger',
|
||||
'Time' => 'Tid',
|
||||
'Event' => 'Hændelse',
|
||||
'Name' => 'Navn',
|
||||
'select' => 'Vis',
|
||||
'Select' => 'Vælg',
|
||||
'Select data' => 'Vælg data',
|
||||
'Functions' => 'Funktioner',
|
||||
'Aggregation' => 'Sammenfatning',
|
||||
'Search' => 'Søg',
|
||||
'anywhere' => 'hvorsomhelst',
|
||||
'Search data in tables' => 'Søg data i tabeller',
|
||||
'Sort' => 'Sorter',
|
||||
'descending' => 'faldende',
|
||||
'Limit' => 'Limit',
|
||||
'Text length' => 'Tekstlængde',
|
||||
'Action' => 'Handling',
|
||||
'Full table scan' => 'Fuld tabel-scan',
|
||||
'Unable to select the table' => 'Kan ikke vælge tabellen',
|
||||
'No rows.' => 'Ingen rækker.',
|
||||
'%d row(s)' => array('%d række', '%d rækker'),
|
||||
'Page' => 'Side',
|
||||
'last' => 'sidste',
|
||||
'Load more data' => 'Indlæs mere data',
|
||||
'Loading' => 'Indlæser',
|
||||
'Whole result' => 'Hele resultatet',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'Import' => 'Importer',
|
||||
'%d row(s) have been imported.' => array('%d række er importeret.', '%d rækker er importeret.'),
|
||||
'File must be in UTF-8 encoding.' => 'Filen skal være i UTF8-tegnkoding.',
|
||||
'Modify' => 'Ændre',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klik på en værdi for at ændre den.',
|
||||
'Use edit link to modify this value.' => 'Brug rediger-link for at ændre dennne værdi.',
|
||||
'Item%s has been inserted.' => 'Emne%s er sat ind.',
|
||||
'Item has been deleted.' => 'Emnet er slettet.',
|
||||
'Item has been updated.' => 'Emnet er opdateret.',
|
||||
'%d item(s) have been affected.' => array('%d emne påvirket.', '%d emner påvirket.'),
|
||||
'New item' => 'Nyt emne',
|
||||
'original' => 'original',
|
||||
'empty' => 'tom',
|
||||
'edit' => 'rediger',
|
||||
'Edit' => 'Rediger',
|
||||
'Insert' => 'Indsæt',
|
||||
'Save' => 'Gem',
|
||||
'Save and continue edit' => 'Gem og fortsæt redigering',
|
||||
'Save and insert next' => 'Gem og indsæt næste',
|
||||
'Selected' => 'Valgt',
|
||||
'Clone' => 'Klon',
|
||||
'Delete' => 'Slet',
|
||||
'You have no privileges to update this table.' => 'Du mangler rettigheder til at ændre denne tabellen.',
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Fra',
|
||||
'Subject' => 'Titel',
|
||||
'Attachments' => 'Vedhæft',
|
||||
'Send' => 'Send',
|
||||
'%d e-mail(s) have been sent.' => array('%d email sendt.', '%d emails sendt.'),
|
||||
'Numbers' => 'Nummer',
|
||||
'Date and time' => 'Dato og tid',
|
||||
'Strings' => 'Strenge',
|
||||
'Binary' => 'Binær',
|
||||
'Lists' => 'Lister',
|
||||
'Network' => 'Netværk',
|
||||
'Geometry' => 'Geometri',
|
||||
'Relations' => 'Relationer',
|
||||
'Editor' => 'Redigering',
|
||||
'$1-$3-$5' => '$6/$4 $1',
|
||||
'[yyyy]-mm-dd' => 'd/m [åååå]',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'nu',
|
||||
'yes' => 'ja',
|
||||
'no' => 'nej',
|
||||
'File exists.' => 'Filen findes.',
|
||||
'Please use one of the extensions %s.' => 'Brug venligst en af filendelserne %s.',
|
||||
'Alter schema' => 'Ændre skema',
|
||||
'Create schema' => 'Opret skema',
|
||||
'Schema has been dropped.' => 'Skemaet er slettet.',
|
||||
'Schema has been created.' => 'Skemaet er oprettet.',
|
||||
'Schema has been altered.' => 'Skemaet er ændret.',
|
||||
'Schema' => 'Skema',
|
||||
'Invalid schema.' => 'Ugyldigt skema.',
|
||||
'Sequences' => 'Sekvenser',
|
||||
'Create sequence' => 'Opret sekvens',
|
||||
'Sequence has been dropped.' => 'Sekvensen er slettet.',
|
||||
'Sequence has been created.' => 'Sekvensen er oprettet.',
|
||||
'Sequence has been altered.' => 'Sekvensen er ændret.',
|
||||
'Alter sequence' => 'Ændre sekvens',
|
||||
'User types' => 'Brugertyper',
|
||||
'Create type' => 'Opret type',
|
||||
'Type has been dropped.' => 'Typen er slettet.',
|
||||
'Type has been created.' => 'Typen er oprettet.',
|
||||
'Alter type' => 'Ændre type',
|
||||
'Saving' => 'Gemmer',
|
||||
);
|
||||
@@ -2,20 +2,20 @@
|
||||
$translations = array(
|
||||
'Login' => 'Login',
|
||||
'Logout successful.' => 'Abmeldung erfolgreich.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Danke, dass Sie Adminer genutzt haben. <a href="https://www.adminer.org/de/donation/">Spenden willkommen!</a>',
|
||||
'Invalid credentials.' => 'Ungültige Anmelde-Informationen.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Benutzer',
|
||||
'Password' => 'Passwort',
|
||||
'Select database' => 'Datenbank auswählen',
|
||||
'Invalid database.' => 'Datenbank ungültig.',
|
||||
'Create new database' => 'Neue Datenbank',
|
||||
'Table has been dropped.' => 'Tabelle entfernt.',
|
||||
'Table has been altered.' => 'Tabelle geändert.',
|
||||
'Table has been created.' => 'Tabelle erstellt.',
|
||||
'Table has been dropped.' => 'Tabelle wurde entfernt.',
|
||||
'Table has been altered.' => 'Tabelle wurde geändert.',
|
||||
'Table has been created.' => 'Tabelle wurde erstellt.',
|
||||
'Alter table' => 'Tabelle ändern',
|
||||
'Create table' => 'Neue Tabelle erstellen',
|
||||
'Create table' => 'Tabelle erstellen',
|
||||
'Table name' => 'Name der Tabelle',
|
||||
'engine' => 'Motor',
|
||||
'engine' => 'Speicher-Engine',
|
||||
'collation' => 'Kollation',
|
||||
'Column name' => 'Spaltenname',
|
||||
'Type' => 'Typ',
|
||||
@@ -24,29 +24,27 @@ $translations = array(
|
||||
'Options' => 'Optionen',
|
||||
'Save' => 'Speichern',
|
||||
'Drop' => 'Entfernen',
|
||||
'Database has been dropped.' => 'Datenbank entfernt.',
|
||||
'Database has been created.' => 'Datenbank erstellt.',
|
||||
'Database has been renamed.' => 'Datenbank umbenannt.',
|
||||
'Database has been altered.' => 'Datenbank geändert.',
|
||||
'Database has been dropped.' => 'Datenbank wurde entfernt.',
|
||||
'Database has been created.' => 'Datenbank wurde erstellt.',
|
||||
'Database has been renamed.' => 'Datenbank wurde umbenannt.',
|
||||
'Database has been altered.' => 'Datenbank wurde geändert.',
|
||||
'Alter database' => 'Datenbank ändern',
|
||||
'Create database' => 'Neue Datenbank',
|
||||
'SQL command' => 'SQL-Query',
|
||||
'Dump' => 'Export',
|
||||
'Create database' => 'Datenbank erstellen',
|
||||
'SQL command' => 'SQL-Kommando',
|
||||
'Logout' => 'Abmelden',
|
||||
'database' => 'Datenbank',
|
||||
'Use' => 'Benutzung',
|
||||
'No tables.' => 'Keine Tabellen.',
|
||||
'select' => 'zeigen',
|
||||
'Create new table' => 'Neue Tabelle',
|
||||
'Item has been deleted.' => 'Datensatz gelöscht.',
|
||||
'Item has been updated.' => 'Datensatz geändert.',
|
||||
'Item%s has been inserted.' => 'Datensatz%s hinzugefügt.',
|
||||
'Edit' => 'Ändern',
|
||||
'Insert' => 'Hinzufügen',
|
||||
'Save and insert next' => 'Speichern und nächsten hinzufügen',
|
||||
'Item has been deleted.' => 'Datensatz wurde gelöscht.',
|
||||
'Item has been updated.' => 'Datensatz wurde geändert.',
|
||||
'Item%s has been inserted.' => 'Datensatz%s wurde eingefügt.',
|
||||
'Edit' => 'Bearbeiten',
|
||||
'Insert' => 'Einfügen',
|
||||
'Save and insert next' => 'Speichern und nächsten einfügen',
|
||||
'Delete' => 'Entfernen',
|
||||
'Database' => 'Datenbank',
|
||||
'Routines' => 'Prozeduren',
|
||||
'Routines' => 'Routinen',
|
||||
'Indexes have been altered.' => 'Indizes geändert.',
|
||||
'Indexes' => 'Indizes',
|
||||
'Alter indexes' => 'Indizes ändern',
|
||||
@@ -58,9 +56,9 @@ $translations = array(
|
||||
'Sort' => 'Ordnen',
|
||||
'descending' => 'absteigend',
|
||||
'Limit' => 'Begrenzung',
|
||||
'No rows.' => 'Keine Daten.',
|
||||
'No rows.' => 'Keine Datensätze.',
|
||||
'Action' => 'Aktion',
|
||||
'edit' => 'ändern',
|
||||
'edit' => 'bearbeiten',
|
||||
'Page' => 'Seite',
|
||||
'Query executed OK, %d row(s) affected.' => array('Abfrage ausgeführt, %d Datensatz betroffen.', 'Abfrage ausgeführt, %d Datensätze betroffen.'),
|
||||
'Error in query' => 'Fehler in der SQL-Abfrage',
|
||||
@@ -78,16 +76,16 @@ $translations = array(
|
||||
'Unable to upload a file.' => 'Hochladen von Datei fehlgeschlagen.',
|
||||
'File upload' => 'Datei importieren',
|
||||
'File uploads are disabled.' => 'Importieren von Dateien abgeschaltet.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Kommando SQL ausgeführt, %d Datensatz betroffen.', 'Kommando SQL ausgeführt, %d Datensätze betroffen.'),
|
||||
'Routine has been called, %d row(s) affected.' => array('Routine wurde ausgeführt, %d Datensatz betroffen.', 'Routine wurde ausgeführt, %d Datensätze betroffen.'),
|
||||
'Call' => 'Aufrufen',
|
||||
'No extension' => 'Keine Erweiterungen installiert',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Keine der unterstützten PHP-Erweiterungen (%s) ist vorhanden.',
|
||||
'Session support must be enabled.' => 'Sitzungen müssen aktiviert sein.',
|
||||
'Session support must be enabled.' => 'Unterstüzung für PHP-Sessions muss aktiviert sein.',
|
||||
'Session expired, please login again.' => 'Sitzungsdauer abgelaufen, bitte erneut anmelden.',
|
||||
'Text length' => 'Textlänge',
|
||||
'Foreign key has been dropped.' => 'Fremdschlüssel entfernt.',
|
||||
'Foreign key has been altered.' => 'Fremdschlüssel geändert.',
|
||||
'Foreign key has been created.' => 'Fremdschlüssel erstellt.',
|
||||
'Foreign key has been dropped.' => 'Fremdschlüssel wurde entfernt.',
|
||||
'Foreign key has been altered.' => 'Fremdschlüssel wurde geändert.',
|
||||
'Foreign key has been created.' => 'Fremdschlüssel wurde erstellt.',
|
||||
'Foreign key' => 'Fremdschlüssel',
|
||||
'Target table' => 'Zieltabelle',
|
||||
'Change' => 'Ändern',
|
||||
@@ -100,53 +98,53 @@ $translations = array(
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Index-Typ',
|
||||
'Column (length)' => 'Spalte (Länge)',
|
||||
'View has been dropped.' => 'View entfernt.',
|
||||
'View has been altered.' => 'View geändert.',
|
||||
'View has been created.' => 'View erstellt.',
|
||||
'View has been dropped.' => 'View wurde entfernt.',
|
||||
'View has been altered.' => 'View wurde geändert.',
|
||||
'View has been created.' => 'View wurde erstellt.',
|
||||
'Alter view' => 'View ändern',
|
||||
'Create view' => 'Neue View erstellen',
|
||||
'Create view' => 'View erstellen',
|
||||
'Name' => 'Name',
|
||||
'Process list' => 'Prozessliste',
|
||||
'%d process(es) have been killed.' => array('%d Prozess gestoppt.', '%d Prozesse gestoppt.'),
|
||||
'Kill' => 'Anhalten',
|
||||
'Parameter name' => 'Name des Parameters',
|
||||
'Database schema' => 'Datenbankschema',
|
||||
'Create procedure' => 'Neue Prozedur',
|
||||
'Create function' => 'Neue Funktion',
|
||||
'Routine has been dropped.' => 'Prozedur entfernt.',
|
||||
'Routine has been altered.' => 'Prozedur geändert.',
|
||||
'Routine has been created.' => 'Prozedur erstellt.',
|
||||
'Create procedure' => 'Prozedur erstellen',
|
||||
'Create function' => 'Funktion erstellen',
|
||||
'Routine has been dropped.' => 'Routine wurde entfernt.',
|
||||
'Routine has been altered.' => 'Routine wurde geändert.',
|
||||
'Routine has been created.' => 'Routine wurde erstellt.',
|
||||
'Alter function' => 'Funktion ändern',
|
||||
'Alter procedure' => 'Prozedur ändern',
|
||||
'Return type' => 'Typ des Rückgabewertes',
|
||||
'Add trigger' => 'Trigger hinzufügen',
|
||||
'Trigger has been dropped.' => 'Trigger entfernt.',
|
||||
'Trigger has been altered.' => 'Trigger geändert.',
|
||||
'Trigger has been created.' => 'Trigger erstellt.',
|
||||
'Trigger has been dropped.' => 'Trigger wurde entfernt.',
|
||||
'Trigger has been altered.' => 'Trigger wurde geändert.',
|
||||
'Trigger has been created.' => 'Trigger wurde erstellt.',
|
||||
'Alter trigger' => 'Trigger ändern',
|
||||
'Create trigger' => 'Trigger hinzufügen',
|
||||
'Create trigger' => 'Trigger erstellen',
|
||||
'Time' => 'Zeitpunkt',
|
||||
'Event' => 'Ereignis',
|
||||
'%s version: %s through PHP extension %s' => 'Version %s: %s, mit PHP-Erweiterung %s',
|
||||
'%s version: %s through PHP extension %s' => 'Version %s: %s mit PHP-Erweiterung %s',
|
||||
'%d row(s)' => array('%d Datensatz', '%d Datensätze'),
|
||||
'Remove' => 'Entfernen',
|
||||
'Are you sure?' => 'Sind Sie sicher ?',
|
||||
'Are you sure?' => 'Sind Sie sicher?',
|
||||
'Privileges' => 'Rechte',
|
||||
'Create user' => 'Neuer Benutzer',
|
||||
'User has been dropped.' => 'Benutzer entfernt.',
|
||||
'User has been altered.' => 'Benutzer geändert.',
|
||||
'User has been created.' => 'Benutzer erstellt.',
|
||||
'Create user' => 'Benutzer erstellen',
|
||||
'User has been dropped.' => 'Benutzer wurde entfernt.',
|
||||
'User has been altered.' => 'Benutzer wurde geändert.',
|
||||
'User has been created.' => 'Benutzer wurde erstellt.',
|
||||
'Hashed' => 'Hashed',
|
||||
'Column' => 'Spalte',
|
||||
'Routine' => 'Rutine',
|
||||
'Routine' => 'Routine',
|
||||
'Grant' => 'Erlauben',
|
||||
'Revoke' => 'Verbieten',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data zu gross. Reduzieren Sie die Grösse oder vergrössern Sie den Wert %s in der Konfiguration.',
|
||||
'Revoke' => 'Widerrufen',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST-Daten sind zu groß. Reduzieren Sie die Größe oder vergrößern Sie den Wert %s in der Konfiguration.',
|
||||
'Logged as: %s' => 'Angemeldet als: %s',
|
||||
'Move up' => 'Nach oben',
|
||||
'Move down' => 'Nach unten',
|
||||
'Functions' => 'Funktionen',
|
||||
'Aggregation' => 'Agregationen',
|
||||
'Aggregation' => 'Aggregationen',
|
||||
'Export' => 'Exportieren',
|
||||
'Output' => 'Ergebnis',
|
||||
'open' => 'anzeigen',
|
||||
@@ -154,9 +152,9 @@ $translations = array(
|
||||
'Format' => 'Format',
|
||||
'Tables' => 'Tabellen',
|
||||
'Data' => 'Daten',
|
||||
'Event has been dropped.' => 'Ereignis entfernt.',
|
||||
'Event has been altered.' => 'Ereignis geändert.',
|
||||
'Event has been created.' => 'Ereignis erstellt.',
|
||||
'Event has been dropped.' => 'Ereignis wurde entfernt.',
|
||||
'Event has been altered.' => 'Ereignis wurde geändert.',
|
||||
'Event has been created.' => 'Ereignis wurde erstellt.',
|
||||
'Alter event' => 'Ereignis ändern',
|
||||
'Create event' => 'Ereignis erstellen',
|
||||
'At given time' => 'Zur angegebenen Zeit',
|
||||
@@ -168,34 +166,35 @@ $translations = array(
|
||||
'Status' => 'Status',
|
||||
'On completion preserve' => 'Nach der Ausführung erhalten',
|
||||
'Tables and views' => 'Tabellen und Views',
|
||||
'Data Length' => 'Datengrösse',
|
||||
'Index Length' => 'Indexgrösse',
|
||||
'Data Length' => 'Datengröße',
|
||||
'Index Length' => 'Indexgröße',
|
||||
'Data Free' => 'Freier Bereich',
|
||||
'Collation' => 'Collation',
|
||||
'Collation' => 'Kollation',
|
||||
'Analyze' => 'Analysieren',
|
||||
'Optimize' => 'Optimieren',
|
||||
'Check' => 'Prüfen',
|
||||
'Repair' => 'Reparieren',
|
||||
'Truncate' => 'Entleeren (truncate)',
|
||||
'Tables have been truncated.' => 'Tabellen sind entleert worden (truncate).',
|
||||
'Truncate' => 'Leeren (truncate)',
|
||||
'Tables have been truncated.' => 'Tabellen wurden geleert (truncate).',
|
||||
'Rows' => 'Datensätze',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Tabellen verschoben.',
|
||||
'Move to other database' => 'In andere Datenbank verschieben',
|
||||
'Move' => 'Verschieben',
|
||||
'Engine' => 'Motor',
|
||||
'Engine' => 'Speicher-Engine',
|
||||
'Save and continue edit' => 'Speichern und weiter bearbeiten',
|
||||
'original' => 'Original',
|
||||
'Tables have been dropped.' => 'Tabellen wurden entfernt (drop).',
|
||||
'%d item(s) have been affected.' => '%d Artikel betroffen.',
|
||||
'whole result' => 'Gesamtergebnis',
|
||||
'Whole result' => 'Gesamtergebnis',
|
||||
'Clone' => 'Klonen',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Die maximal erlaubte Anzahl der Felder ist überschritten. Bitte %s und %s erhöhen.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Die maximal erlaubte Anzahl der Felder ist überschritten. Bitte %s erhöhen.',
|
||||
'Partition by' => 'Partitionieren um',
|
||||
'Partitions' => 'Partitionen',
|
||||
'Partition name' => 'Name der Partition',
|
||||
'Values' => 'Werte',
|
||||
'%d row(s) have been imported.' => array('%d Datensatz importiert.', '%d Datensätze wurden importiert.'),
|
||||
'%d row(s) have been imported.' => array('%d Datensatz wurde importiert.', '%d Datensätze wurden importiert.'),
|
||||
'anywhere' => 'beliebig',
|
||||
'Import' => 'Importieren',
|
||||
'Stop on error' => 'Bei Fehler anhalten',
|
||||
@@ -204,50 +203,49 @@ $translations = array(
|
||||
'[yyyy]-mm-dd' => 't.m.[jjjj]',
|
||||
'History' => 'History',
|
||||
'Variables' => 'Variablen',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Spalten des Ursprungs und des Zieles müssen vom gleichen Datentyp sein, es muss unter den Zielspalten ein Index existieren und die referenzierten Daten müssen existieren.',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Quell- und Zielspalten müssen vom gleichen Datentyp sein, es muss unter den Zielspalten ein Index existieren und die referenzierten Daten müssen existieren.',
|
||||
'Relations' => 'Relationen',
|
||||
'Run file' => 'Datei ausführen',
|
||||
'Clear' => 'Entleeren',
|
||||
'Maximum allowed file size is %sB.' => 'Maximal erlaubte Dateigrösse ist %sB.',
|
||||
'Clear' => 'Löschen',
|
||||
'Maximum allowed file size is %sB.' => 'Maximal erlaubte Dateigröße ist %sB.',
|
||||
'Numbers' => 'Zahlen',
|
||||
'Date and time' => 'Datum oder Zeit',
|
||||
'Date and time' => 'Datum und Zeit',
|
||||
'Strings' => 'Zeichenketten',
|
||||
'Binary' => 'Binär',
|
||||
'Lists' => 'Listen',
|
||||
'Editor' => 'Editor',
|
||||
'E-mail' => 'E-mail',
|
||||
'E-mail' => 'E-Mail',
|
||||
'From' => 'Von',
|
||||
'Subject' => 'Betreff',
|
||||
'Send' => 'Abschicken',
|
||||
'%d e-mail(s) have been sent.' => array('%d e-mail abgeschickt.', '%d e-mails abgeschickt.'),
|
||||
'%d e-mail(s) have been sent.' => array('%d E-Mail abgeschickt.', '%d E-Mails abgeschickt.'),
|
||||
'Webserver file %s' => 'Webserver Datei %s',
|
||||
'File does not exist.' => 'Datei existiert nicht.',
|
||||
'%d in total' => '%d insgesamt',
|
||||
'Permanent login' => 'Passwort speichern',
|
||||
'Databases have been dropped.' => 'Datenbanken entfernt.',
|
||||
'Databases have been dropped.' => 'Datenbanken wurden entfernt.',
|
||||
'Search data in tables' => 'Suche in Tabellen',
|
||||
'schema' => 'Schema',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'Schema ändern',
|
||||
'Create schema' => 'Neues Schema',
|
||||
'Create schema' => 'Schema erstellen',
|
||||
'Schema has been dropped.' => 'Schema wurde gelöscht.',
|
||||
'Schema has been created.' => 'Neues Schema erstellt.',
|
||||
'Schema has been altered.' => 'Schema geändert.',
|
||||
'Sequences' => 'Sequenz',
|
||||
'Create sequence' => 'Neue Sequenz',
|
||||
'Schema has been created.' => 'Schema wurde erstellt.',
|
||||
'Schema has been altered.' => 'Schema wurde geändert.',
|
||||
'Sequences' => 'Sequenzen',
|
||||
'Create sequence' => 'Sequenz erstellen',
|
||||
'Alter sequence' => 'Sequenz ändern',
|
||||
'Sequence has been dropped.' => 'Sequenz gelöscht.',
|
||||
'Sequence has been created.' => 'Neue Sequenz erstellt.',
|
||||
'Sequence has been altered.' => 'Sequenz geändert.',
|
||||
'User types' => 'Benutzer-definierte Typen',
|
||||
'Sequence has been dropped.' => 'Sequenz wurde gelöscht.',
|
||||
'Sequence has been created.' => 'Sequenz wurde erstellt.',
|
||||
'Sequence has been altered.' => 'Sequenz wurde geändert.',
|
||||
'User types' => 'Benutzerdefinierte Typen',
|
||||
'Create type' => 'Typ erstellen',
|
||||
'Alter type' => 'Typ ändern',
|
||||
'Type has been dropped.' => 'Typ gelöscht.',
|
||||
'Type has been created.' => 'Typ erstellt.',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klick zum Bearbeiten des Wertes.',
|
||||
'Use edit link to modify this value.' => 'Benutzen Sie den Link zum editieren dieses Wertes.',
|
||||
'Type has been dropped.' => 'Typ wurde gelöscht.',
|
||||
'Type has been created.' => 'Typ wurde erstellt.',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+Klick zum Bearbeiten des Wertes.',
|
||||
'Use edit link to modify this value.' => 'Benutzen Sie den Link zum Bearbeiten dieses Wertes.',
|
||||
'last' => 'letzte',
|
||||
'From server' => 'Im Server',
|
||||
'From server' => 'Vom Server',
|
||||
'System' => 'Datenbank System',
|
||||
'Select data' => 'Daten auswählen',
|
||||
'Show structure' => 'Struktur anzeigen',
|
||||
@@ -256,9 +254,8 @@ $translations = array(
|
||||
'Geometry' => 'Geometrie',
|
||||
'File exists.' => 'Datei existiert schon.',
|
||||
'Attachments' => 'Anhänge',
|
||||
'%d query(s) executed OK.' => array('SQL-Query erfolgreich ausgeführt.', '%d SQL-Queries erfolgreich ausgeführt.'),
|
||||
'%d query(s) executed OK.' => array('SQL-Abfrage erfolgreich ausgeführt.', '%d SQL-Abfragen erfolgreich ausgeführt.'),
|
||||
'Show only errors' => 'Nur Fehler anzeigen',
|
||||
'Last page' => 'Letzte Seite',
|
||||
'Refresh' => 'Aktualisieren',
|
||||
'Invalid schema.' => 'Schema nicht gültig.',
|
||||
'Please use one of the extensions %s.' => 'Bitte einen der Dateitypen %s benutzen.',
|
||||
@@ -267,6 +264,26 @@ $translations = array(
|
||||
'Tables have been copied.' => 'Tabellen wurden kopiert.',
|
||||
'Copy' => 'Kopieren',
|
||||
'Permanent link' => 'Dauerhafter Link',
|
||||
'Edit all' => 'Alle ändern',
|
||||
'Edit all' => 'Alle bearbeiten',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Compute' => 'kalkulieren',
|
||||
'Size' => 'Größe',
|
||||
'Modify' => 'Ändern',
|
||||
'Selected' => 'Ausgewählte',
|
||||
'Default value' => 'Vorgabewert festlegen',
|
||||
'Limit rows' => 'Datensätze begrenzen',
|
||||
'Tables have been optimized.' => 'Tabellen wurden optimiert.',
|
||||
'File must be in UTF-8 encoding.' => 'Die Datei muss UTF-8 kodiert sein.',
|
||||
'Loading' => 'Lade',
|
||||
'Load more data' => 'Mehr Daten laden',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Zu viele erfolglose Login-Versuche. Bitte probieren Sie es in %d Minute noch einmal.', 'Zu viele erfolglose Login-Versuche. Bitte probieren Sie es in %d Minuten noch einmal.'),
|
||||
'If you did not send this request from Adminer then close this page.' => 'Wenn Sie diese Anfrage nicht von Adminer gesendet haben, schließen Sie diese Seite.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Sie können eine große SQL-Datei per FTP hochladen und dann vom Server importieren.',
|
||||
'You are offline.' => 'Sie sind offline.',
|
||||
'You have no privileges to update this table.' => 'Sie haben keine Rechte, um diese Tabelle zu aktualisieren.',
|
||||
'Saving' => 'Speichere',
|
||||
'yes' => 'ja',
|
||||
'no' => 'nein',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Das Master-Passwort ist abgelaufen. <a href="https://www.adminer.org/de/extension/"%s>Implementieren</a> Sie die %s Methode, um es permanent zu machen.',
|
||||
'%d / ' => '%d / ',
|
||||
);
|
||||
|
||||
336
adminer/lang/el.inc.php
Normal file
336
adminer/lang/el.inc.php
Normal file
@@ -0,0 +1,336 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'Σύστημα',
|
||||
'Server' => 'Διακομιστής',
|
||||
'Username' => 'Όνομα Χρήστη',
|
||||
'Password' => 'Κωδικός',
|
||||
'Permanent login' => 'Μόνιμη Σύνδεση',
|
||||
'Login' => 'Σύνδεση',
|
||||
'Logout' => 'Αποσύνδεση',
|
||||
'Logged as: %s' => 'Συνδεθήκατε ως %s',
|
||||
'Logout successful.' => 'Αποσυνδεθήκατε με επιτυχία.',
|
||||
'Invalid credentials.' => 'Εσφαλμένα Διαπιστευτήρια.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Επανειλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτό.', 'Επανειλημμένες ανεπιτυχείς προσπάθειες σύνδεσης, δοκιμάστε ξανά σε %s λεπτά.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Έληξε ο Κύριος Κωδικός. <a href="https://www.adminer.org/en/extension/"%s>Ενεργοποιήστε</a> τη μέθοδο %s για να τον κάνετε μόνιμο.',
|
||||
'Language' => 'Γλώσσα',
|
||||
'Invalid CSRF token. Send the form again.' => 'Άκυρο κουπόνι CSRF. Στείλτε τη φόρμα ξανά.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Αν δε στείλατε αυτό το αίτημα από το Adminer, τότε κλείστε αυτή τη σελίδα.',
|
||||
'No extension' => 'Καμία Επέκταση',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Καμία από τις υποστηριζόμενες επεκτάσεις PHP (%s) δεν είναι διαθέσιμη.',
|
||||
'Session support must be enabled.' => 'Πρέπει να είναι ενεργοποιημένη η υποστήριξη συνεδριών.',
|
||||
'Session expired, please login again.' => 'Η συνεδρία έληξε, παρακαλώ συνδεθείτε ξανά.',
|
||||
'%s version: %s through PHP extension %s' => '%s έκδοση: %s μέσω επέκτασης PHP %s',
|
||||
'Refresh' => 'Ανανέωση',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Δικαιώματα',
|
||||
'Create user' => 'Δημιουργία Χρήστη',
|
||||
'User has been dropped.' => 'Ο Χρήστης διαγράφηκε.',
|
||||
'User has been altered.' => 'Ο Χρήστης τροποποιήθηκε.',
|
||||
'User has been created.' => 'Ο Χρήστης δημιουργήθηκε.',
|
||||
'Hashed' => 'Κωδικοποιήθηκε',
|
||||
'Column' => 'Στήλη',
|
||||
'Routine' => 'Ρουτίνα',
|
||||
'Grant' => 'Παραχώρηση',
|
||||
'Revoke' => 'Ανάκληση',
|
||||
|
||||
'Process list' => 'Λίστα διεργασιών',
|
||||
'%d process(es) have been killed.' => array('Τερματίστηκε %d διεργασία.', 'Τερματίστηκαν %d διεργασίες.'),
|
||||
'Kill' => 'Τερματισμός',
|
||||
|
||||
'Variables' => 'Μεταβλητές',
|
||||
'Status' => 'Κατάσταση',
|
||||
|
||||
'SQL command' => 'Εντολή SQL',
|
||||
'%d query(s) executed OK.' => array('Το ερώτημα %d εκτελέστηκε ΟΚ.', 'Τα ερώτηματα %d εκτελέστηκαν ΟΚ.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκε %d σειρά.', 'Το ερώτημα εκτελέστηκε ΟΚ, επηρεάστηκαν %d σειρές.'),
|
||||
'No commands to execute.' => 'Δεν υπάρχουν εντολές να εκτελεστούν.',
|
||||
'Error in query' => 'Σφάλμα στο ερώτημα',
|
||||
'Execute' => 'Εκτέλεση',
|
||||
'Stop on error' => 'Διακοπή όταν υπάρχει σφάλμα',
|
||||
'Show only errors' => 'Να εμφανίζονται μόνο τα σφάλματα',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Ιστορικό',
|
||||
'Clear' => 'Καθαρισμός',
|
||||
'Edit all' => 'Επεξεργασία όλων',
|
||||
|
||||
'File upload' => 'Μεταφόρτωση αρχείου',
|
||||
'From server' => 'Από διακομιστή',
|
||||
'Webserver file %s' => 'Αρχείο %s από διακομιστή web',
|
||||
'Run file' => 'Εκτέλεση αρχείου',
|
||||
'File does not exist.' => 'Το αρχείο δεν υπάρχει.',
|
||||
'File uploads are disabled.' => 'Έχει απενεργοποιηθεί η μεταφόρτωση αρχείων.',
|
||||
'Unable to upload a file.' => 'Αδυναμία μεταφόρτωσης αρχείου.',
|
||||
'Maximum allowed file size is %sB.' => 'Το μέγιστο επιτρεπόμενο μέγεθος αρχείου είναι %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Πολλά δεδομένα POST. Μείωστε τα περιεχόμενα ή αυξήστε την σχετική ρύθμιση %s.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Μπορείτε να μεταφορτώσετε ένα μεγάλο αρχείο SQL μέσω FTP και να το εισάγετε από το διακομιστή.',
|
||||
'You are offline.' => 'Βρίσκεστε εκτός σύνδεσης.',
|
||||
|
||||
'Export' => 'Εξαγωγή',
|
||||
'Output' => 'Αποτέλεσμα',
|
||||
'open' => 'άνοιγμα',
|
||||
'save' => 'αποθήκευση',
|
||||
'Saving' => 'Γίνεται Αποθήκευση',
|
||||
'Format' => 'Μορφή',
|
||||
'Data' => 'Δεδομένα',
|
||||
|
||||
'Database' => 'Β. Δεδομένων',
|
||||
'database' => 'β. δεδομένων',
|
||||
'Use' => 'χρήση',
|
||||
'Select database' => 'Επιλέξτε Β.Δ.',
|
||||
'Invalid database.' => 'Λανθασμένη Β.Δ.',
|
||||
'Database has been dropped.' => 'Η Β.Δ. διαγράφηκε.',
|
||||
'Databases have been dropped.' => 'Οι Β.Δ. διαγράφηκαν.',
|
||||
'Database has been created.' => 'Η Β.Δ. δημιουργήθηκε.',
|
||||
'Database has been renamed.' => 'Η. Β.Δ. μετονομάστηκε.',
|
||||
'Database has been altered.' => 'Η Β.Δ. τροποποιήθηκε.',
|
||||
'Alter database' => 'Τροποποίηση Β.Δ.',
|
||||
'Create database' => 'Δημιουργία Β.Δ.',
|
||||
'Database schema' => 'Σχήμα Β.Δ.',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Μόνιμος Σύνδεσμος',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => '.',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Μηχανή',
|
||||
'Collation' => 'Collation',
|
||||
'Data Length' => 'Μήκος Δεδομένων',
|
||||
'Index Length' => 'Μήκος Δείκτη',
|
||||
'Data Free' => 'Δεδομένα Ελεύθερα',
|
||||
'Rows' => 'Σειρές',
|
||||
'%d in total' => '%d συνολικά',
|
||||
'Analyze' => 'Ανάλυση',
|
||||
'Optimize' => 'Βελτιστοποίηση',
|
||||
'Vacuum' => 'Καθαρισμός',
|
||||
'Check' => 'Έλεγχος',
|
||||
'Repair' => 'Επιδιόρθωση',
|
||||
'Truncate' => 'Περικοπή',
|
||||
'Tables have been truncated.' => 'Οι πίνακες περικόπηκαν.',
|
||||
'Move to other database' => 'Μεταφορά σε άλλη Β.Δ.',
|
||||
'Move' => 'Μεταφορά',
|
||||
'Tables have been moved.' => 'Οι πίνακες μεταφέρθηκαν.',
|
||||
'Copy' => 'Αντιγραφή',
|
||||
'Tables have been copied.' => 'Οι πίνακες αντιγράφηκαν.',
|
||||
|
||||
'Routines' => 'Ρουτίνες',
|
||||
'Routine has been called, %d row(s) affected.' => array('Η ρουτίνα εκτελέστηκε, επηρεάστηκε %d σειρά.', 'Η ρουτίνα εκτελέστηκε, επηρεάστηκαν %d σειρές.'),
|
||||
'Call' => 'Εκτέλεση',
|
||||
'Parameter name' => 'Όνομα παραμέτρου',
|
||||
'Create procedure' => 'Δημιουργία διαδικασίας',
|
||||
'Create function' => 'Δημιουργία Συνάρτησης',
|
||||
'Routine has been dropped.' => 'Η ρουτίνα διαγράφηκε.',
|
||||
'Routine has been altered.' => 'Η ρουτίνα τροποποιήθηκε.',
|
||||
'Routine has been created.' => 'Η ρουτίνα δημιουργήθηκε.',
|
||||
'Alter function' => 'Τροποποίηση λειτουργίας',
|
||||
'Alter procedure' => 'Τροποποίηση διαδικασίας',
|
||||
'Return type' => 'Επιστρεφόμενος τύπος',
|
||||
|
||||
'Events' => 'Γεγονός',
|
||||
'Event has been dropped.' => 'Το γεγονός διαγράφηκε.',
|
||||
'Event has been altered.' => 'Το γεγονός τροποποιήθηκε.',
|
||||
'Event has been created.' => 'Το γεγονός δημιουργήθηκε.',
|
||||
'Alter event' => 'Τροποποίηση γεγονότος',
|
||||
'Create event' => 'Δημιουργία γεγονότος',
|
||||
'At given time' => 'Σε προκαθορισμένο χρόνο',
|
||||
'Every' => 'Κάθε',
|
||||
'Schedule' => 'Προγραμματισμός',
|
||||
'Start' => 'Έναρξη',
|
||||
'End' => 'Λήξη',
|
||||
'On completion preserve' => 'Κατά την ολοκλήρωση διατήρησε',
|
||||
|
||||
'Tables' => 'Πίνακες',
|
||||
'Tables and views' => 'Πίνακες και Προβολές',
|
||||
'Table' => 'Πίνακας',
|
||||
'No tables.' => 'Χωρίς πίνακες.',
|
||||
'Alter table' => 'Τροποποίηση πίνακα',
|
||||
'Create table' => 'Δημιουργία πίνακα',
|
||||
'Table has been dropped.' => 'Ο πίνακας διαγράφηκε.',
|
||||
'Tables have been dropped.' => 'Οι πίνακες διαγράφηκαν.',
|
||||
'Tables have been optimized.' => 'Οι πίνακες βελτιστοποιήθηκαν.',
|
||||
'Table has been altered.' => 'Ο πίνακας τροποποιήθηκε.',
|
||||
'Table has been created.' => 'Ο πίνακας δημιουργήθηκε.',
|
||||
'Table name' => 'Όνομα πίνακα',
|
||||
'Show structure' => 'Προβολή δομής',
|
||||
'engine' => 'μηχανή',
|
||||
'collation' => 'collation',
|
||||
'Column name' => 'Όνομα στήλης',
|
||||
'Type' => 'Τύπος',
|
||||
'Length' => 'Μήκος',
|
||||
'Auto Increment' => 'Αυτόματη αρίθμηση',
|
||||
'Options' => 'Επιλογές',
|
||||
'Comment' => 'Σχόλιο',
|
||||
'Default value' => 'Προεπιλεγμένη τιμή',
|
||||
'Default values' => 'Προεπιλεγμένες τιμές',
|
||||
'Drop' => 'Διαγραφή',
|
||||
'Are you sure?' => 'Είστε σίγουρος;',
|
||||
'Size' => 'Μέγεθος',
|
||||
'Compute' => 'Υπολογισμός',
|
||||
'Move up' => 'Μετακίνηση προς τα επάνω',
|
||||
'Move down' => 'Μετακίνηση προς τα κάτω',
|
||||
'Remove' => 'Αφαίρεση',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Υπέρβαση μέγιστου επιτρεπόμενου αριθμού πεδίων. Παρακαλώ αυξήστε %s.',
|
||||
|
||||
'Partition by' => 'Τμηματοποίηση ανά',
|
||||
'Partitions' => 'Τμήματα',
|
||||
'Partition name' => 'Όνομα Τμήματος',
|
||||
'Values' => 'Τιμές',
|
||||
|
||||
'View' => 'Προβολή',
|
||||
'Materialized view' => 'Υλοποιημένη προβολή',
|
||||
'View has been dropped.' => 'Η προβολή διαγράφηκε.',
|
||||
'View has been altered.' => 'Η προβολή τροποποιήθηκε.',
|
||||
'View has been created.' => 'Η προβολή δημιουργήθηκε.',
|
||||
'Alter view' => 'Τροποποίηση προβολής',
|
||||
'Create view' => 'Δημιουργία προβολής',
|
||||
|
||||
'Indexes' => 'Δείκτες',
|
||||
'Indexes have been altered.' => 'Οι δείκτες τροποποιήθηκαν.',
|
||||
'Alter indexes' => 'Τροποποίηση δεικτών',
|
||||
'Add next' => 'Προσθήκη επόμενου',
|
||||
'Index Type' => 'Τύπος δείκτη',
|
||||
'Column (length)' => 'Στήλη (μήκος)',
|
||||
|
||||
'Foreign keys' => 'Εξαρτημένα κλειδιά',
|
||||
'Foreign key' => 'Εξαρτημένο κλειδί',
|
||||
'Foreign key has been dropped.' => 'Το εξαρτημένο κλειδί διαγράφηκε.',
|
||||
'Foreign key has been altered.' => 'Το εξαρτημένο κλειδί τροποποιήθηκε.',
|
||||
'Foreign key has been created.' => 'Το εξαρτημένο κλειδί δημιουργήθηκε.',
|
||||
'Target table' => 'Πίνακας Στόχος',
|
||||
'Change' => 'Αλλαγή',
|
||||
'Source' => 'Πηγή',
|
||||
'Target' => 'Στόχος',
|
||||
'Add column' => 'Προσθήκη στήλης',
|
||||
'Alter' => 'Τροποποίηση',
|
||||
'Add foreign key' => 'Προσθήκη εξαρτημένου κλειδιού',
|
||||
'ON DELETE' => 'ΚΑΤΑ ΤΗ ΔΙΑΓΡΑΦΗ',
|
||||
'ON UPDATE' => 'ΚΑΤΑ ΤΗΝ ΑΛΛΑΓΗ',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Οι στήλες στην πηγή και το στόχο πρέπει να έχουν τον ίδιο τύπο, πρέπει να υπάρχει δείκτης στη στήλη στόχο και να υπάρχουν εξαρτημένα δεδομένα.',
|
||||
|
||||
'Triggers' => 'Εναύσματα',
|
||||
'Add trigger' => 'Προσθήκη εναύσματος',
|
||||
'Trigger has been dropped.' => 'Το έναυσμα διαγράφηκε.',
|
||||
'Trigger has been altered.' => 'Το έναυσμα τροποποιήθηκε.',
|
||||
'Trigger has been created.' => 'Το έναυσμα δημιουργήθηκε.',
|
||||
'Alter trigger' => 'Τροποποίηση εναύσματος',
|
||||
'Create trigger' => 'Δημιουργία εναύσματος',
|
||||
'Time' => 'Ώρα',
|
||||
'Event' => 'Γεγονός',
|
||||
'Name' => 'Όνομα',
|
||||
|
||||
'select' => 'επιλογή',
|
||||
'Select' => 'Επιλογή',
|
||||
'Select data' => 'Επιλέξτε δεδομένα',
|
||||
'Functions' => 'Λειτουργίες',
|
||||
'Aggregation' => 'Άθροισμα',
|
||||
'Search' => 'Αναζήτηση',
|
||||
'anywhere' => 'παντού',
|
||||
'Search data in tables' => 'Αναζήτηση δεδομένων στους πίνακες',
|
||||
'Sort' => 'Ταξινόμηση',
|
||||
'descending' => 'Φθίνουσα',
|
||||
'Limit' => 'Όριο',
|
||||
'Limit rows' => 'Περιορισμός σειρών',
|
||||
'Text length' => 'Μήκος κειμένου',
|
||||
'Action' => 'Ενέργεια',
|
||||
'Full table scan' => 'Πλήρης σάρωση πινάκων',
|
||||
'Unable to select the table' => 'Δεν είναι δυνατή η επιλογή πίνακα',
|
||||
'No rows.' => 'Χωρίς σειρές.',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d σειρά', '%d σειρές'),
|
||||
'Page' => 'Σελίδα',
|
||||
'last' => 'τελευταία',
|
||||
'Load more data' => 'Φόρτωση κι άλλων δεδομένων',
|
||||
'Loading' => 'Φορτώνει',
|
||||
'Whole result' => 'Όλο το αποτέλεσμα',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
|
||||
'Import' => 'Εισαγωγή',
|
||||
'%d row(s) have been imported.' => array('$d σειρά εισήχθη.', '%d σειρές εισήχθησαν.'),
|
||||
'File must be in UTF-8 encoding.' => 'Το αρχείο πρέπει να έχει κωδικοποίηση UTF-8.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Τροποποίηση',
|
||||
'Ctrl+click on a value to modify it.' => 'Πιέστε Ctrl+click σε μια τιμή για να την τροποποιήσετε.',
|
||||
'Use edit link to modify this value.' => 'Χρησιμοποιήστε το σύνδεσμο επεξεργασία για να τροποποιήσετε την τιμή.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Η εγγραφή%s εισήχθη.',
|
||||
'Item has been deleted.' => 'Η εγγραφή διαγράφηκε.',
|
||||
'Item has been updated.' => 'Η εγγραφή ενημερώθηκε.',
|
||||
'%d item(s) have been affected.' => array('Επηρεάστηκε %d εγγραφή.', 'Επηρεάστηκαν %d εγγραφές.'),
|
||||
'New item' => 'Νέα εγγραφή',
|
||||
'original' => 'πρωτότυπο',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'κενό',
|
||||
'edit' => 'επεξεργασία',
|
||||
'Edit' => 'Επεξεργασία',
|
||||
'Insert' => 'Εισαγωγή',
|
||||
'Save' => 'Αποθήκευση',
|
||||
'Save and continue edit' => 'Αποθήκευση και συνέχεια επεξεργασίας',
|
||||
'Save and insert next' => 'Αποθήκευση και εισαγωγή επόμενου',
|
||||
'Selected' => 'Επιλεγμένα',
|
||||
'Clone' => 'Κλωνοποίηση',
|
||||
'Delete' => 'Διαγραφή',
|
||||
'You have no privileges to update this table.' => 'Δεν έχετε δικαίωμα να τροποποιήσετε αυτό τον πίνακα.',
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Από',
|
||||
'Subject' => 'Θέμα',
|
||||
'Attachments' => 'Συνημμένα',
|
||||
'Send' => 'Αποστολή',
|
||||
'%d e-mail(s) have been sent.' => array('%d e-mail απεστάλη.', '%d e-mail απεστάλησαν.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Αριθμοί',
|
||||
'Date and time' => 'Ημερομηνία και ώρα',
|
||||
'Strings' => 'Κείμενο',
|
||||
'Binary' => 'Δυαδικό',
|
||||
'Lists' => 'Λίστες',
|
||||
'Network' => 'Δίκτυο',
|
||||
'Geometry' => 'Γεωμετρία',
|
||||
'Relations' => 'Συσχετήσεις',
|
||||
|
||||
'Editor' => 'Επεξεργαστής',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$5/$3/$1',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => 'ηη/μμ/[εεεε]',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'ΩΩ:ΛΛ:ΔΔ',
|
||||
'now' => 'τώρα',
|
||||
'yes' => 'ναι',
|
||||
'no' => 'όχι',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Το αρχείο υπάρχει.',
|
||||
'Please use one of the extensions %s.' => 'Παρακαλώ χρησιμοποιείστε μια από τις επεκτάσεις %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Τροποποίηση σχήματος',
|
||||
'Create schema' => 'Δημιουργία σχήματος',
|
||||
'Schema has been dropped.' => 'Το σχήμα διαγράφηκε.',
|
||||
'Schema has been created.' => 'Το σχήμα δημιουργήθηκε.',
|
||||
'Schema has been altered.' => 'Το σχήμα τροποποιήθηκε.',
|
||||
'Schema' => 'Σχήμα',
|
||||
'Invalid schema.' => 'Άκυρο σχήμα.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Αλληλουχία',
|
||||
'Create sequence' => 'Δημιουργία αλληλουχίας',
|
||||
'Sequence has been dropped.' => 'Η αλληλουχία διαγράφηκε.',
|
||||
'Sequence has been created.' => 'Η αλληλουχία δημιουργήθηκε.',
|
||||
'Sequence has been altered.' => 'Η αλληλουχία τροποποιήθηκε.',
|
||||
'Alter sequence' => 'Τροποποίηση αλληλουχίας',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Τύποι χρήστη',
|
||||
'Create type' => 'Δημιουργία τύπου',
|
||||
'Type has been dropped.' => 'Ο τύπος διαγράφηκε.',
|
||||
'Type has been created.' => 'Ο τύπος δημιουργήθηκε.',
|
||||
'Alter type' => 'Τροποποίηση τύπου',
|
||||
);
|
||||
@@ -1,9 +1,11 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Too many unsuccessful logins, try again in %d minute.', 'Too many unsuccessful logins, try again in %d minutes.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Query executed OK, %d row affected.', 'Query executed OK, %d rows affected.'),
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'Routine has been called, %d row(s) affected.' => array('Routine has been called, %d row affected.', 'Routine has been called, %d rows affected.'),
|
||||
'%d process(es) have been killed.' => array('%d process has been killed.', '%d processes have been killed.'),
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d row', '%d rows'),
|
||||
'%d item(s) have been affected.' => array('%d item has been affected.', '%d items have been affected.'),
|
||||
'%d row(s) have been imported.' => array('%d row has been imported.', '%d rows have been imported.'),
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Login',
|
||||
'Logout successful.' => 'Salida exitosa.',
|
||||
'Invalid credentials.' => 'Identificacion inválida.',
|
||||
'Logout successful.' => 'Sesión finalizada con éxito.',
|
||||
'Invalid credentials.' => 'Usuario y/o clave de acceso incorrecta.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Usuario',
|
||||
'Password' => 'Contraseña',
|
||||
'Select database' => 'Seleccionar Base de datos',
|
||||
'Invalid database.' => 'Base de datos inválida.',
|
||||
'Create new database' => 'Ingrese nueva base de datos',
|
||||
'Invalid database.' => 'Base de datos incorrecta.',
|
||||
'Table has been dropped.' => 'Tabla eliminada.',
|
||||
'Table has been altered.' => 'Tabla modificada.',
|
||||
'Table has been created.' => 'Tabla creada.',
|
||||
'Alter table' => 'Modifique estructura',
|
||||
'Alter table' => 'Modificar tabla',
|
||||
'Create table' => 'Crear tabla',
|
||||
'Table name' => 'Nombre de la tabla',
|
||||
'engine' => 'motor',
|
||||
@@ -31,25 +30,23 @@ $translations = array(
|
||||
'Alter database' => 'Modificar Base de datos',
|
||||
'Create database' => 'Crear Base de datos',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Dump' => 'Export',
|
||||
'Logout' => 'Logout',
|
||||
'Logout' => 'Cerrar sesión',
|
||||
'database' => 'base de datos',
|
||||
'Use' => 'Usar',
|
||||
'No tables.' => 'No existen tablas.',
|
||||
'select' => 'registros',
|
||||
'Create new table' => 'Nueva tabla',
|
||||
'Item has been deleted.' => 'Registro eliminado.',
|
||||
'Item has been updated.' => 'Registro modificado.',
|
||||
'Item%s has been inserted.' => 'Registro%s insertado.',
|
||||
'Edit' => 'Modificar',
|
||||
'Insert' => 'Agregar',
|
||||
'Save and insert next' => 'Guardar e insertar otro',
|
||||
'Save and insert next' => 'Guardar e insertar siguiente',
|
||||
'Delete' => 'Eliminar',
|
||||
'Database' => 'Base de datos',
|
||||
'Routines' => 'Procedimientos',
|
||||
'Indexes have been altered.' => 'Indices modificados.',
|
||||
'Indexes' => 'Indices',
|
||||
'Alter indexes' => 'Modificar indices',
|
||||
'Indexes have been altered.' => 'Índices actualizados.',
|
||||
'Indexes' => 'Índices',
|
||||
'Alter indexes' => 'Modificar índices',
|
||||
'Add next' => 'Agregar',
|
||||
'Language' => 'Idioma',
|
||||
'Select' => 'Mostrar',
|
||||
@@ -57,33 +54,33 @@ $translations = array(
|
||||
'Search' => 'Condición',
|
||||
'Sort' => 'Ordenar',
|
||||
'descending' => 'descendiente',
|
||||
'Limit' => 'Limit',
|
||||
'Limit' => 'Limite',
|
||||
'No rows.' => 'No existen registros.',
|
||||
'Action' => 'Acción',
|
||||
'edit' => 'modificar',
|
||||
'Page' => 'Página',
|
||||
'Query executed OK, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),
|
||||
'Error in query' => 'Error en consulta',
|
||||
'Error in query' => 'Error al ejecutar consulta',
|
||||
'Execute' => 'Ejecutar',
|
||||
'Table' => 'Tabla',
|
||||
'Foreign keys' => 'Claves foráneas',
|
||||
'Triggers' => 'Triggers',
|
||||
'View' => 'Vistas',
|
||||
'Foreign keys' => 'Claves externas',
|
||||
'Triggers' => 'Disparadores',
|
||||
'View' => 'Vista',
|
||||
'Unable to select the table' => 'No es posible seleccionar la tabla',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Vuelva a enviar los datos del formulario.',
|
||||
'Comment' => 'Comentario',
|
||||
'Default values' => 'Valores predeterminados',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'No commands to execute.' => 'No hay comando para ejecutar.',
|
||||
'Unable to upload a file.' => 'No es posible importar archivo.',
|
||||
'No commands to execute.' => 'No es posible ejecutar ningún comando.',
|
||||
'Unable to upload a file.' => 'No es posible importar el archivo.',
|
||||
'File upload' => 'Importar archivo',
|
||||
'File uploads are disabled.' => 'Importación de archivos deshablilitado.',
|
||||
'File uploads are disabled.' => 'Importación de archivos deshablilitada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Consulta ejecutada, %d registro afectado.', 'Consulta ejecutada, %d registros afectados.'),
|
||||
'Call' => 'Llamar',
|
||||
'No extension' => 'No hay extension',
|
||||
'No extension' => 'No hay extensión',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Ninguna de las extensiones PHP soportadas (%s) está disponible.',
|
||||
'Session support must be enabled.' => 'Deben estar habilitadas las sesiones.',
|
||||
'Session expired, please login again.' => 'Sesión expirada, por favor ingrese su clave de nuevo.',
|
||||
'Session expired, please login again.' => 'Sesión caducada, por favor escriba su clave de nuevo.',
|
||||
'Text length' => 'Longitud de texto',
|
||||
'Foreign key has been dropped.' => 'Clave externa eliminada.',
|
||||
'Foreign key has been altered.' => 'Clave externa modificada.',
|
||||
@@ -95,9 +92,9 @@ $translations = array(
|
||||
'Target' => 'Destino',
|
||||
'Add column' => 'Agregar columna',
|
||||
'Alter' => 'Modificar',
|
||||
'Add foreign key' => 'Agregar clave foránea',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Add foreign key' => 'Agregar clave externa',
|
||||
'ON DELETE' => 'AL BORRAR',
|
||||
'ON UPDATE' => 'AL ACTUALIZAR',
|
||||
'Index Type' => 'Tipo de índice',
|
||||
'Column (length)' => 'Columna (longitud)',
|
||||
'View has been dropped.' => 'Vista eliminada.',
|
||||
@@ -116,21 +113,21 @@ $translations = array(
|
||||
'Routine has been dropped.' => 'Procedimiento eliminado.',
|
||||
'Routine has been altered.' => 'Procedimiento modificado.',
|
||||
'Routine has been created.' => 'Procedimiento creado.',
|
||||
'Alter function' => 'Modificar Función',
|
||||
'Alter function' => 'Modificar función',
|
||||
'Alter procedure' => 'Modificar procedimiento',
|
||||
'Return type' => 'Tipo de valor de regreso',
|
||||
'Add trigger' => 'Agregar trigger',
|
||||
'Trigger has been dropped.' => 'Trigger eliminado.',
|
||||
'Trigger has been altered.' => 'Trigger modificado.',
|
||||
'Trigger has been created.' => 'Trigger creado.',
|
||||
'Alter trigger' => 'Modificar Trigger',
|
||||
'Create trigger' => 'Agregar Trigger',
|
||||
'Return type' => 'Tipo de valor de vuelta',
|
||||
'Add trigger' => 'Agregar disparador',
|
||||
'Trigger has been dropped.' => 'Disparador eliminado.',
|
||||
'Trigger has been altered.' => 'Disparador modificado.',
|
||||
'Trigger has been created.' => 'Disparador creado.',
|
||||
'Alter trigger' => 'Modificar Disparador',
|
||||
'Create trigger' => 'Agregar Disparador',
|
||||
'Time' => 'Tiempo',
|
||||
'Event' => 'Evento',
|
||||
'%s version: %s through PHP extension %s' => 'Versión %s: %s a través de extensión PHP %s',
|
||||
'%s version: %s through PHP extension %s' => 'Versión %s: %s a través de la extensión de PHP %s',
|
||||
'%d row(s)' => array('%d registro', '%d registros'),
|
||||
'Remove' => 'Eliminar',
|
||||
'Are you sure?' => 'Está seguro?',
|
||||
'Are you sure?' => '¿Está seguro?',
|
||||
'Privileges' => 'Privilegios',
|
||||
'Create user' => 'Crear Usuario',
|
||||
'User has been dropped.' => 'Usuario eliminado.',
|
||||
@@ -142,11 +139,11 @@ $translations = array(
|
||||
'Grant' => 'Conceder',
|
||||
'Revoke' => 'Impedir',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduzca el tamaño o aumente la directiva de configuración %s.',
|
||||
'Logged as: %s' => 'Logeado como: %s',
|
||||
'Logged as: %s' => 'Logueado como: %s',
|
||||
'Move up' => 'Mover arriba',
|
||||
'Move down' => 'Mover abajo',
|
||||
'Functions' => 'Funciones',
|
||||
'Aggregation' => 'Agregaciones',
|
||||
'Aggregation' => 'Agregados',
|
||||
'Export' => 'Exportar',
|
||||
'Output' => 'Salida',
|
||||
'open' => 'mostrar',
|
||||
@@ -159,14 +156,14 @@ $translations = array(
|
||||
'Event has been created.' => 'Evento creado.',
|
||||
'Alter event' => 'Modificar Evento',
|
||||
'Create event' => 'Crear Evento',
|
||||
'At given time' => 'A hora determinada',
|
||||
'At given time' => 'En el momento indicado',
|
||||
'Every' => 'Cada',
|
||||
'Events' => 'Eventos',
|
||||
'Schedule' => 'Agenda',
|
||||
'Start' => 'Inicio',
|
||||
'End' => 'Fin',
|
||||
'Status' => 'Estado',
|
||||
'On completion preserve' => 'Al completar preservar',
|
||||
'On completion preserve' => 'Al completar mantener',
|
||||
'Tables and views' => 'Tablas y vistas',
|
||||
'Data Length' => 'Longitud de datos',
|
||||
'Index Length' => 'Longitud de índice',
|
||||
@@ -177,9 +174,10 @@ $translations = array(
|
||||
'Check' => 'Comprobar',
|
||||
'Repair' => 'Reparar',
|
||||
'Truncate' => 'Vaciar',
|
||||
'Tables have been truncated.' => 'Tablas vaciadas (truncate).',
|
||||
'Tables have been truncated.' => 'Las tablas han sido vaciadas.',
|
||||
'Rows' => 'Registros',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Se movieron las tablas.',
|
||||
'Move to other database' => 'Mover a otra base de datos',
|
||||
'Move' => 'Mover',
|
||||
@@ -187,13 +185,13 @@ $translations = array(
|
||||
'Save and continue edit' => 'Guardar y continuar editando',
|
||||
'original' => 'original',
|
||||
'Tables have been dropped.' => 'Tablas eliminadas.',
|
||||
'%d item(s) have been affected.' => array('%d ítem afectado.', '%d itemes afectados.'),
|
||||
'whole result' => 'resultado completo',
|
||||
'%d item(s) have been affected.' => array('%d elemento afectado.', '%d elementos afectados.'),
|
||||
'Whole result' => 'Resultado completo',
|
||||
'Clone' => 'Clonar',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Cantida máxima de campos permitidos excedidos. Por favor aumente %s y %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Excedida la cantidad máxima de campos permitidos. Por favor aumente %s.',
|
||||
'Partition by' => 'Particionar por',
|
||||
'Partitions' => 'Particiones',
|
||||
'Partition name' => 'Nombre de Partición',
|
||||
'Partition name' => 'Nombre de partición',
|
||||
'Values' => 'Valores',
|
||||
'%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'),
|
||||
'anywhere' => 'donde sea',
|
||||
@@ -202,13 +200,13 @@ $translations = array(
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5/$3/$1',
|
||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||
'History' => 'History',
|
||||
'History' => 'Histórico',
|
||||
'Variables' => 'Variables',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Las columnas de origen y destino deben ser del mismo tipo, debe existir un índice entre las columnas del destino y el registro referenciado debe existir.',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Las columnas de origen y destino deben ser del mismo tipo, debe existir un índice entre las columnas del destino y el registro referenciado debe existir también.',
|
||||
'Relations' => 'Relaciones',
|
||||
'Run file' => 'Ejecutar Archivo',
|
||||
'Clear' => 'Vaciar',
|
||||
'Maximum allowed file size is %sB.' => 'Tamaño máximo de archivo es %sB.',
|
||||
'Maximum allowed file size is %sB.' => 'El tamaño máximo de archivo es %sB.',
|
||||
'Numbers' => 'Números',
|
||||
'Date and time' => 'Fecha y hora',
|
||||
'Strings' => 'Cadena',
|
||||
@@ -221,12 +219,11 @@ $translations = array(
|
||||
'Send' => 'Enviar',
|
||||
'%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'),
|
||||
'Webserver file %s' => 'Archivo de servidor web %s',
|
||||
'File does not exist.' => 'Archivo no existe.',
|
||||
'File does not exist.' => 'Ese archivo no existe.',
|
||||
'%d in total' => '%d en total',
|
||||
'Permanent login' => 'Guardar contraseña',
|
||||
'Databases have been dropped.' => 'Bases de datos eliminadas.',
|
||||
'Search data in tables' => 'Buscar datos en tablas',
|
||||
'schema' => 'esquema',
|
||||
'Schema' => 'Esquema',
|
||||
'Alter schema' => 'Modificar esquema',
|
||||
'Create schema' => 'Crear esquema',
|
||||
@@ -239,29 +236,28 @@ $translations = array(
|
||||
'Sequence has been dropped.' => 'Secuencia eliminada.',
|
||||
'Sequence has been created.' => 'Secuencia creada.',
|
||||
'Sequence has been altered.' => 'Secuencia modificada.',
|
||||
'User types' => 'Tipos definido por el usuario',
|
||||
'User types' => 'Tipos definidos por el usuario',
|
||||
'Create type' => 'Crear tipo',
|
||||
'Alter type' => 'Modificar tipo',
|
||||
'Type has been dropped.' => 'Tipo eliminado.',
|
||||
'Type has been created.' => 'Tipo creado.',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+clic sobre el valor para editarlo.',
|
||||
'Use edit link to modify this value.' => 'Utilice el enlace de modificar para realizar los cambios.',
|
||||
'Use edit link to modify this value.' => 'Utilice el enlace de edición para realizar cambios.',
|
||||
'last' => 'último',
|
||||
'From server' => 'Desde servidor',
|
||||
'System' => 'Motor de base de datos',
|
||||
'Select data' => 'Visualizar contenido',
|
||||
'Show structure' => 'Mostrar estructura',
|
||||
'empty' => 'ningúno',
|
||||
'empty' => 'ninguno',
|
||||
'Network' => 'Red',
|
||||
'Geometry' => 'Geometría',
|
||||
'File exists.' => 'Archivo ya existe.',
|
||||
'File exists.' => 'Ese archivo ya existe.',
|
||||
'Attachments' => 'Adjuntos',
|
||||
'%d query(s) executed OK.' => array('%d sentencia sql ejecutada correctamente.', '%d sentencias sql ejecutadas correctamente.'),
|
||||
'%d query(s) executed OK.' => array('%d sentencia SQL ejecutada correctamente.', '%d sentencias SQL ejecutadas correctamente.'),
|
||||
'Show only errors' => 'Mostrar solamente errores',
|
||||
'Last page' => 'Ultima página',
|
||||
'Refresh' => 'Refrescar',
|
||||
'Invalid schema.' => 'Esquema inválido.',
|
||||
'Please use one of the extensions %s.' => 'Por favor use una de las extensiones %s.',
|
||||
'Please use one of the extensions %s.' => 'Por favor, use una de las extensiones %s.',
|
||||
'now' => 'ahora',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'Tablas copiadas.',
|
||||
|
||||
@@ -8,7 +8,6 @@ $translations = array(
|
||||
'Password' => 'Parool',
|
||||
'Select database' => 'Vali andmebaas',
|
||||
'Invalid database.' => 'Tundmatu andmebaas.',
|
||||
'Create new database' => 'Loo uus andmebaas',
|
||||
'Table has been dropped.' => 'Tabel on edukalt kustutatud.',
|
||||
'Table has been altered.' => 'Tabeli andmed on edukalt muudetud.',
|
||||
'Table has been created.' => 'Tabel on edukalt loodud.',
|
||||
@@ -31,13 +30,11 @@ $translations = array(
|
||||
'Alter database' => 'Muuda andmebaasi',
|
||||
'Create database' => 'Loo uus andmebaas',
|
||||
'SQL command' => 'SQL-Päring',
|
||||
'Dump' => 'Ekspordi',
|
||||
'Logout' => 'Logi välja',
|
||||
'database' => 'andmebaas',
|
||||
'Use' => 'Kasuta',
|
||||
'No tables.' => 'Tabeleid ei leitud.',
|
||||
'select' => 'kuva',
|
||||
'Create new table' => 'Loo uus tabel',
|
||||
'Item has been deleted.' => 'Kustutamine õnnestus.',
|
||||
'Item has been updated.' => 'Uuendamine õnnestus.',
|
||||
'Item%s has been inserted.' => 'Kirje%s on edukalt lisatud.',
|
||||
@@ -180,6 +177,7 @@ $translations = array(
|
||||
'Data Free' => 'Vaba ruumi',
|
||||
'Rows' => 'Ridu',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analüüsi',
|
||||
'Optimize' => 'Optimeeri',
|
||||
'Check' => 'Kontrolli',
|
||||
@@ -188,9 +186,9 @@ $translations = array(
|
||||
'Move to other database' => 'Liiguta teise andmebaasi',
|
||||
'Move' => 'Liiguta',
|
||||
'%d item(s) have been affected.' => 'Mõjutatud kirjeid: %d.',
|
||||
'whole result' => 'Täielikud tulemused',
|
||||
'Whole result' => 'Täielikud tulemused',
|
||||
'Clone' => 'Kloon',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Maksimaalne väljade arv ületatud. Palun suurendage %s ja %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimaalne väljade arv ületatud. Palun suurendage %s.',
|
||||
'Partition by' => 'Partitsiooni',
|
||||
'Partitions' => 'Partitsioonid',
|
||||
'Partition name' => 'Partitsiooni nimi',
|
||||
@@ -226,7 +224,6 @@ $translations = array(
|
||||
'Permanent login' => 'Jäta mind meelde',
|
||||
'Databases have been dropped.' => 'Andmebaasid on edukalt kustutatud.',
|
||||
'Search data in tables' => 'Otsi kogu andmebaasist',
|
||||
'schema' => 'struktuur',
|
||||
'Schema' => 'Struktuur',
|
||||
'Alter schema' => 'Muuda struktuuri',
|
||||
'Create schema' => 'Loo struktuur',
|
||||
@@ -258,7 +255,6 @@ $translations = array(
|
||||
'Attachments' => 'Manused',
|
||||
'%d query(s) executed OK.' => array('%d päring edukalt käivitatud.', '%d päringut edukalt käivitatud.'),
|
||||
'Show only errors' => 'Kuva vaid veateateid',
|
||||
'Last page' => 'Viimane lehekülg',
|
||||
'Refresh' => 'Uuenda',
|
||||
'Invalid schema.' => 'Sobimatu skeema.',
|
||||
'Please use one of the extensions %s.' => 'Palun kasuta üht laiendustest %s.',
|
||||
|
||||
@@ -1,98 +1,101 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'سيستم',
|
||||
'System' => 'سیستم',
|
||||
'Server' => 'سرور',
|
||||
'Username' => 'نام كاربري',
|
||||
'Password' => 'كلمه عبور',
|
||||
'Permanent login' => '',
|
||||
'Username' => 'نام کاربری',
|
||||
'Password' => 'کلمه عبور',
|
||||
'Permanent login' => 'ورود دائم',
|
||||
'Login' => 'ورود',
|
||||
'Logout' => 'خروج',
|
||||
'Logged as: %s' => 'ورود به عنوان: %s',
|
||||
'Logout successful.' => 'با موفقيت خارج شديد',
|
||||
'Invalid credentials.' => 'اعتبار سنجي نامعتبر',
|
||||
'Logout successful.' => 'با موفقیت خارج شدید.',
|
||||
'Invalid credentials.' => 'اعتبار سنجی نامعتبر.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.', 'ورودهای ناموفق بیش از حد، %d دقیقه دیگر تلاش نمایید.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'رمز اصلی باطل شده است. روش %s را <a href="https://www.adminer.org/en/extension/"%s>پیاده سازی</a> کرده تا آن را دائمی سازید.',
|
||||
'Language' => 'زبان',
|
||||
'Invalid CSRF token. Send the form again.' => 'نامعتبر است. دوباره سعی کنید Token CSRF',
|
||||
'Invalid CSRF token. Send the form again.' => 'CSRF token نامعتبر است. دوباره سعی کنید.',
|
||||
'No extension' => 'پسوند نامعتبر',
|
||||
'None of the supported PHP extensions (%s) are available.' => ' پسوند پی اچ پی در دسترس نیست (%s) تعداد',
|
||||
'Session support must be enabled.' => 'پشتيباني از نشست بايستي فعال گردد',
|
||||
'Session expired, please login again.' => 'نشست پايان يافته، لطفا دوباره وارد شويد',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'هیچ کدام از افزونه های PHP پشتیبانی شده (%s) موجود نمی باشند.',
|
||||
'Session support must be enabled.' => 'پشتیبانی از نشست بایستی فعال گردد.',
|
||||
'Session expired, please login again.' => 'نشست پایان یافته، لطفا دوباره وارد شوید.',
|
||||
'%s version: %s through PHP extension %s' => 'نسخه %s : %s توسعه پی اچ پی %s',
|
||||
'Refresh' => 'بازيابي',
|
||||
'Refresh' => 'بازیابی',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'rtl',
|
||||
|
||||
'Privileges' => 'امتيازات',
|
||||
'Create user' => 'ایجاد كاربر',
|
||||
'User has been dropped.' => 'كاربر حذف شد',
|
||||
'User has been altered.' => 'كاربر ويرايش گرديد',
|
||||
'User has been created.' => 'كاربر ايجاد شد',
|
||||
'Hashed' => 'به هم ريخته',
|
||||
'Privileges' => 'امتیازات',
|
||||
'Create user' => 'ایجاد کاربر',
|
||||
'User has been dropped.' => 'کاربر حذف شد.',
|
||||
'User has been altered.' => 'کاربر ویرایش گردید.',
|
||||
'User has been created.' => 'کاربر ایجاد شد.',
|
||||
'Hashed' => 'به هم ریخته',
|
||||
'Column' => 'ستون',
|
||||
'Routine' => 'روتين',
|
||||
'Routine' => 'روتین',
|
||||
'Grant' => 'اعطا',
|
||||
'Revoke' => 'لغو كردن',
|
||||
'Revoke' => 'لغو کردن',
|
||||
|
||||
'Process list' => 'ليست فرآيند',
|
||||
'%d process(es) have been killed.' => '%d فرآيند متوقف شد',
|
||||
'Kill' => 'حذف فرآيند',
|
||||
'Process list' => 'لیست فرآیند',
|
||||
'%d process(es) have been killed.' => '%d فرآیند متوقف شد.',
|
||||
'Kill' => 'حذف فرآیند',
|
||||
|
||||
'Variables' => 'متغيرها',
|
||||
'Status' => 'وضعيت',
|
||||
'Variables' => 'متغیرها',
|
||||
'Status' => 'وضعیت',
|
||||
|
||||
'SQL command' => 'دستور اس كيو ال',
|
||||
'%d query(s) executed OK.' => '%d كوئري اجرا شد',
|
||||
'Query executed OK, %d row(s) affected.' => 'كوئري اجرا شد. %d سطر تغيير كرد.',
|
||||
'No commands to execute.' => 'دستوري براي اجرا وجود ندارد',
|
||||
'Error in query' => 'خطا در كوئري',
|
||||
'SQL command' => 'دستور SQL',
|
||||
'%d query(s) executed OK.' => '%d کوئری اجرا شد.',
|
||||
'Query executed OK, %d row(s) affected.' => 'کوئری اجرا شد. %d سطر تغیر کرد.',
|
||||
'No commands to execute.' => 'دستوری برای اجرا وجود ندارد.',
|
||||
'Error in query' => 'خطا در کوئری',
|
||||
'Execute' => 'اجرا',
|
||||
'Stop on error' => 'توقف در خطا',
|
||||
'Show only errors' => 'فقط نمايش خطاها',
|
||||
'Stop on error' => 'توقف بر روی خطا',
|
||||
'Show only errors' => 'فقط نمایش خطاها',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'تاريخ',
|
||||
'Clear' => 'پاك كردن',
|
||||
'Edit all' => 'ويرايش همه',
|
||||
'History' => 'تاریخ',
|
||||
'Clear' => 'پاک کردن',
|
||||
'Edit all' => 'ویرایش همه',
|
||||
|
||||
'File upload' => 'بارگذاري فايل',
|
||||
'File upload' => 'بارگذاری فایل',
|
||||
'From server' => 'از سرور',
|
||||
'Webserver file %s' => '%s فايل وب سرور',
|
||||
'Run file' => 'نمايش فايل',
|
||||
'File does not exist.' => 'فايل وجود ندارد',
|
||||
'File uploads are disabled.' => 'بارگذاري غير فعال است',
|
||||
'Unable to upload a file.' => 'قادر به بارگذاري فايل نيستيد',
|
||||
'Maximum allowed file size is %sB.' => ' %sB حداكثر اندازه فايل',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'حجم داده ارسالي برزگ است. حجم داده كاهش دهيد و يا مقدار %s را در پيكربندي افزايش دهيد.',
|
||||
|
||||
'Webserver file %s' => '%s فایل وب سرور',
|
||||
'Run file' => 'اجرای فایل',
|
||||
'File does not exist.' => 'فایل وجود ندارد.',
|
||||
'File uploads are disabled.' => 'بارگذاری غیر فعال است.',
|
||||
'Unable to upload a file.' => 'قادر به بارگذاری فایل نیستید.',
|
||||
'Maximum allowed file size is %sB.' => ' %sB حداکثر اندازه فایل.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'حجم داده ارسالی برزگ است. حجم داده کاهش دهید و یا مقدار %s را در پیکربندی افزایش دهید.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'شما می توانید فایل SQL حجیم را از طریق FTP بارگزاری و از روی سرور وارد نمایید.',
|
||||
'You are offline.' => 'شما آفلاین می باشید.',
|
||||
|
||||
'Export' => 'استخراج',
|
||||
'Dump' => 'خالي كردن',
|
||||
'Output' => 'خروجي',
|
||||
'open' => 'بازكردن',
|
||||
'save' => 'ذخيره',
|
||||
'Output' => 'خروجی',
|
||||
'open' => 'بازکردن',
|
||||
'save' => 'ذخیره',
|
||||
'Format' => 'حذف',
|
||||
'Data' => 'داده',
|
||||
|
||||
'Database' => 'پايگاه داده',
|
||||
'database' => 'پايگاه داده',
|
||||
'Database' => 'پایگاه داده',
|
||||
'database' => 'پایگاه داده',
|
||||
'Use' => 'استفاده',
|
||||
'Select database' => 'انتخاب پايگاه داده',
|
||||
'Invalid database.' => 'پايگاه داده نامعتبر',
|
||||
'Create new database' => 'ایجاد پايگاه داده جديد',
|
||||
'Database has been dropped.' => 'پايگاه داده حذف شد',
|
||||
'Databases have been dropped.' => 'پايگاه دادها حذف شدند',
|
||||
'Database has been created.' => 'پايگاه داده ايجاد شد',
|
||||
'Database has been renamed.' => 'نام پايگاه داده تغيير كرد',
|
||||
'Database has been altered.' => 'پايگاه داده ويرايش شد',
|
||||
'Alter database' => 'ويرايش پايگاه داده',
|
||||
'Create database' => 'ایجاد پايگاه داده',
|
||||
'Database schema' => 'ساختار پايگاه داده',
|
||||
'Select database' => 'انتخاب پایگاه داده',
|
||||
'Invalid database.' => 'پایگاه داده نامعتبر.',
|
||||
'Database has been dropped.' => 'پایگاه داده حذف شد.',
|
||||
'Databases have been dropped.' => 'پایگاه های داده حذف شدند.',
|
||||
'Database has been created.' => 'پایگاه داده ایجاد شد.',
|
||||
'Database has been renamed.' => 'نام پایگاه داده تغیر کرد.',
|
||||
'Database has been altered.' => 'پایگاه داده ویرایش شد.',
|
||||
'Alter database' => 'ویرایش پایگاه داده',
|
||||
'Create database' => 'ایجاد پایگاه داده',
|
||||
'Database schema' => 'ساختار پایگاه داده',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'ارتباط دائم',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '۰۱۲۳۴۵۶۷۸۹',
|
||||
'Engine' => 'موتور',
|
||||
'Collation' => 'تطبیق',
|
||||
'Data Length' => 'طول داده',
|
||||
@@ -102,33 +105,34 @@ $translations = array(
|
||||
'%d in total' => ' به طور کل %d ',
|
||||
'Analyze' => 'تحلیل',
|
||||
'Optimize' => 'بهینه سازی',
|
||||
'Vacuum' => 'پاک سازی',
|
||||
'Check' => 'بررسی',
|
||||
'Repair' => 'تعمیر',
|
||||
'Truncate' => 'کوتاه کردن',
|
||||
'Tables have been truncated.' => 'جدولها بریده شدند',
|
||||
'Tables have been truncated.' => 'جدولها بریده شدند.',
|
||||
'Move to other database' => 'انتقال به یک پایگاه داده دیگر',
|
||||
'Move' => 'انتقال',
|
||||
'Tables have been moved.' => 'جدولها انتقال داده شدند',
|
||||
'Tables have been moved.' => 'جدولها انتقال داده شدند.',
|
||||
'Copy' => 'کپی کردن',
|
||||
'Tables have been copied.' => 'جدولها کپی شدند',
|
||||
'Tables have been copied.' => 'جدولها کپی شدند.',
|
||||
|
||||
'Routines' => 'روالها',
|
||||
'Routine has been called, %d row(s) affected.' => array('روال فراخوانی شد %d سطر متاثر شد', 'روال فراخوانی شد %d سطر متاثر شد'),
|
||||
'Routine has been called, %d row(s) affected.' => array('روال فراخوانی شد %d سطر متاثر شد.', 'روال فراخوانی شد %d سطر متاثر شد.'),
|
||||
'Call' => 'صدا زدن',
|
||||
'Parameter name' => 'نام پارامتر',
|
||||
'Create procedure' => 'ایجاد زیربرنامه',
|
||||
'Create function' => 'ایجاد تابع',
|
||||
'Routine has been dropped.' => 'روال حذف شد',
|
||||
'Routine has been altered.' => 'روال ویرایش شد',
|
||||
'Routine has been created.' => 'روال ایجاد شد',
|
||||
'Routine has been dropped.' => 'روال حذف شد.',
|
||||
'Routine has been altered.' => 'روال ویرایش شد.',
|
||||
'Routine has been created.' => 'روال ایجاد شد.',
|
||||
'Alter function' => 'ویرایش تابع',
|
||||
'Alter procedure' => 'ویرایش زیربرنامه',
|
||||
'Return type' => 'برگرداندن نوع',
|
||||
|
||||
'Events' => 'رویدادها',
|
||||
'Event has been dropped.' => 'رویداد حذف شد',
|
||||
'Event has been altered.' => 'رویداد ویرایش شد',
|
||||
'Event has been created.' => 'رویداد ایجاد شد',
|
||||
'Event has been dropped.' => 'رویداد حذف شد.',
|
||||
'Event has been altered.' => 'رویداد ویرایش شد.',
|
||||
'Event has been created.' => 'رویداد ایجاد شد.',
|
||||
'Alter event' => 'ویرایش رویداد',
|
||||
'Create event' => 'ایجاد رویداد',
|
||||
'At given time' => 'زمان معین',
|
||||
@@ -144,11 +148,11 @@ $translations = array(
|
||||
'No tables.' => 'جدولی وجود ندارد',
|
||||
'Alter table' => 'ویرایش جدول',
|
||||
'Create table' => 'ایجاد جدول',
|
||||
'Create new table' => 'ایجاد جدول جدید',
|
||||
'Table has been dropped.' => 'جدول حذف شد',
|
||||
'Tables have been dropped.' => 'جدولها حذف شدند',
|
||||
'Table has been altered.' => 'جدول ویرایش شد',
|
||||
'Table has been created.' => 'جدول ایجاد شد',
|
||||
'Table has been dropped.' => 'جدول حذف شد.',
|
||||
'Tables have been dropped.' => 'جدولها حذف شدند.',
|
||||
'Tables have been optimized.' => 'جدولها بهینه شدند.',
|
||||
'Table has been altered.' => 'جدول ویرایش شد.',
|
||||
'Table has been created.' => 'جدول ایجاد شد.',
|
||||
'Table name' => 'نام جدول',
|
||||
'Show structure' => 'نمایش ساختار',
|
||||
'engine' => 'موتور',
|
||||
@@ -159,13 +163,16 @@ $translations = array(
|
||||
'Auto Increment' => 'افزایش خودکار',
|
||||
'Options' => 'اختیارات',
|
||||
'Comment' => 'توضیح',
|
||||
'Default value' => 'مقدار پیش فرض',
|
||||
'Default values' => 'مقادیر پیش فرض',
|
||||
'Drop' => 'حذف',
|
||||
'Are you sure?' => 'مطمئن هستید؟',
|
||||
'Size' => 'حجم',
|
||||
'Compute' => 'محاسبه',
|
||||
'Move up' => 'انتقال به بالا',
|
||||
'Move down' => 'انتقال به پایین',
|
||||
'Remove' => 'حذف',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'حداکثر مجاز فیلدهای مجاز اشباع شد. لطفا %s و %s را کاهش دهید',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'حداکثر تعداد فیلدهای مجاز اشباع شد. لطفا %s را افزایش دهید.',
|
||||
|
||||
'Partition by' => 'بخشبندی توسط',
|
||||
'Partitions' => 'بخشبندیها',
|
||||
@@ -173,14 +180,15 @@ $translations = array(
|
||||
'Values' => 'مقادیر',
|
||||
|
||||
'View' => 'نمایش',
|
||||
'View has been dropped.' => 'نمایش حذف شد',
|
||||
'View has been altered.' => 'نمایش ویرایش شد',
|
||||
'View has been created.' => 'نمایش ایجاد شد',
|
||||
'Materialized view' => 'نمایه مادی',
|
||||
'View has been dropped.' => 'نمایش حذف شد.',
|
||||
'View has been altered.' => 'نمایش ویرایش شد.',
|
||||
'View has been created.' => 'نمایش ایجاد شد.',
|
||||
'Alter view' => 'حذف نمایش',
|
||||
'Create view' => 'ایجاد نمایش',
|
||||
|
||||
'Indexes' => 'ایندکسها',
|
||||
'Indexes have been altered.' => 'ایندکسها ویرایش شد',
|
||||
'Indexes have been altered.' => 'ایندکسها ویرایش شدند.',
|
||||
'Alter indexes' => 'ویرایش ایندکسها',
|
||||
'Add next' => 'افرودن بعدی',
|
||||
'Index Type' => 'نوع ایندکس',
|
||||
@@ -188,9 +196,9 @@ $translations = array(
|
||||
|
||||
'Foreign keys' => 'کلیدهای خارجی',
|
||||
'Foreign key' => 'کلید خارجی',
|
||||
'Foreign key has been dropped.' => 'کلید خارجی حذف شد',
|
||||
'Foreign key has been altered.' => 'کلید خارجی ویرایش شد',
|
||||
'Foreign key has been created.' => 'کلید خارجی ایجاد شد',
|
||||
'Foreign key has been dropped.' => 'کلید خارجی حذف شد.',
|
||||
'Foreign key has been altered.' => 'کلید خارجی ویرایش شد.',
|
||||
'Foreign key has been created.' => 'کلید خارجی ایجاد شد.',
|
||||
'Target table' => 'جدول هدف',
|
||||
'Change' => 'تغییر',
|
||||
'Source' => 'منبع',
|
||||
@@ -200,13 +208,13 @@ $translations = array(
|
||||
'Add foreign key' => 'افزودن کلید خارجی',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'داده مبدا و مقصد ستونها بایستی شبیه هم باشند',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'داده مبدا و مقصد ستونها بایستی شبیه هم باشند.',
|
||||
|
||||
'Triggers' => 'تریگرها',
|
||||
'Add trigger' => 'افزودن تریگر',
|
||||
'Trigger has been dropped.' => 'تریگر حذف شد',
|
||||
'Trigger has been altered.' => 'تریگر ویرایش شد',
|
||||
'Trigger has been created.' => 'تریگر ایجاد شد',
|
||||
'Trigger has been dropped.' => 'تریگر حذف شد.',
|
||||
'Trigger has been altered.' => 'تریگر ویرایش شد.',
|
||||
'Trigger has been created.' => 'تریگر ایجاد شد.',
|
||||
'Alter trigger' => 'ویرایش تریگر',
|
||||
'Create trigger' => 'ایجاد تریگر',
|
||||
'Time' => 'زمان',
|
||||
@@ -224,28 +232,35 @@ $translations = array(
|
||||
'Sort' => 'مرتب کردن',
|
||||
'descending' => 'نزولی',
|
||||
'Limit' => 'محدودیت',
|
||||
'Limit rows' => 'محدودیت سطرها',
|
||||
'Text length' => 'طول متن',
|
||||
'Action' => 'عملیات',
|
||||
'Full table scan' => 'اسکن کامل جدول',
|
||||
'Unable to select the table' => 'قادر به انتخاب جدول نیستید',
|
||||
'No rows.' => 'سطری وجود ندارد',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d سطر', '%d سطر'),
|
||||
'Page' => 'صفحه',
|
||||
'last' => 'آخری',
|
||||
'Last page' => 'صفحه آخر',
|
||||
'whole result' => 'همه نتایج',
|
||||
'Load more data' => 'بارگزاری اطلاعات بیشتر',
|
||||
'Loading' => 'در حال بارگزاری',
|
||||
'Whole result' => 'همه نتایج',
|
||||
'%d byte(s)' => array('%d بایت', '%d بایت'),
|
||||
|
||||
'Import' => 'وارد کردن',
|
||||
'%d row(s) have been imported.' => array('%d سطر وارد شد', '%d سطر وارد شد'),
|
||||
'%d row(s) have been imported.' => array('%d سطر وارد شد.', '%d سطر وارد شد.'),
|
||||
'File must be in UTF-8 encoding.' => 'فرمت فایل باید UTF-8 باشید.',
|
||||
|
||||
// in-place editing in select
|
||||
'Use edit link to modify this value.' => 'از لینک ویرایش برای ویرایش این مقدار استفاده کنید',
|
||||
'Modify' => 'ویرایش',
|
||||
'Ctrl+click on a value to modify it.' => 'برای ویرایش بر روی مقدار ctrl+click کنید.',
|
||||
'Use edit link to modify this value.' => 'از لینک ویرایش برای ویرایش این مقدار استفاده کنید.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => '%s آیتم درج شد',
|
||||
'Item has been deleted.' => 'آیتم حذف شد',
|
||||
'Item has been updated.' => 'آیتم بروز رسانی شد',
|
||||
'%d item(s) have been affected.' => array('%d آیتم متاثر شد', '%d آیتم متاثر شد'),
|
||||
'Item%s has been inserted.' => '%s آیتم درج شد.',
|
||||
'Item has been deleted.' => 'آیتم حذف شد.',
|
||||
'Item has been updated.' => 'آیتم بروز رسانی شد.',
|
||||
'%d item(s) have been affected.' => array('%d آیتم متاثر شد.', '%d آیتم متاثر شد.'),
|
||||
'New item' => 'آیتم جدید',
|
||||
'original' => 'اصلی',
|
||||
// label for value '' in enum data type
|
||||
@@ -256,15 +271,17 @@ $translations = array(
|
||||
'Save' => 'ذخیره',
|
||||
'Save and continue edit' => 'ذخیره و ادامه ویرایش',
|
||||
'Save and insert next' => 'ذخیره و درج بعدی',
|
||||
'Selected' => 'انتخاب شده',
|
||||
'Clone' => 'تکثیر',
|
||||
'Delete' => 'حذف',
|
||||
'You have no privileges to update this table.' => 'شما اختیار ویرایش این جدول را ندارید.',
|
||||
|
||||
'E-mail' => 'پست الکترونیک',
|
||||
'From' => 'فرستنده',
|
||||
'Subject' => 'موضوع',
|
||||
'Attachments' => 'پیوست ها',
|
||||
'Send' => 'ارسال',
|
||||
'%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد', '%d ایمیل ارسال شد'),
|
||||
'%d e-mail(s) have been sent.' => array('%d ایمیل ارسال شد.', '%d ایمیل ارسال شد.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'اعداد',
|
||||
@@ -284,33 +301,34 @@ $translations = array(
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'اکنون',
|
||||
|
||||
'yes' => 'بله',
|
||||
'no' => 'خیر',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'فایل موجود است',
|
||||
'Please use one of the extensions %s.' => 'لطفا یکی از پسوندهای زیر را انتخاب نمائید %s ',
|
||||
'File exists.' => 'فایل موجود است.',
|
||||
'Please use one of the extensions %s.' => 'لطفا یکی از پسوندها را انتخاب نمائید %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'ویرایش ساختار',
|
||||
'Create schema' => 'ایجاد ساختار',
|
||||
'Schema has been dropped.' => 'ساختار حذف شد',
|
||||
'Schema has been created.' => 'ساختار ایجاد شد',
|
||||
'Schema has been altered.' => 'ساختار ویرایش شد',
|
||||
'schema' => 'ساختار',
|
||||
'Schema has been dropped.' => 'ساختار حذف شد.',
|
||||
'Schema has been created.' => 'ساختار ایجاد شد.',
|
||||
'Schema has been altered.' => 'ساختار ویرایش شد.',
|
||||
'Schema' => 'ساختار',
|
||||
'Invalid schema.' => 'ساختار نامعتبر',
|
||||
'Invalid schema.' => 'ساختار نامعتبر.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'صف ها',
|
||||
'Create sequence' => 'ایجاد صف',
|
||||
'Sequence has been dropped.' => 'صف حذف شد',
|
||||
'Sequence has been created.' => 'صف ایجاد شد',
|
||||
'Sequence has been altered.' => 'صف ویرایش شد',
|
||||
'Sequence has been dropped.' => 'صف حذف شد.',
|
||||
'Sequence has been created.' => 'صف ایجاد شد.',
|
||||
'Sequence has been altered.' => 'صف ویرایش شد.',
|
||||
'Alter sequence' => 'ویرایش صف',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'انواع کاربر',
|
||||
'Create type' => 'ایجاد نوع',
|
||||
'Type has been dropped.' => 'نوع حذف شد',
|
||||
'Type has been created.' => 'نوع ایجاد شد',
|
||||
'Type has been dropped.' => 'نوع حذف شد.',
|
||||
'Type has been created.' => 'نوع ایجاد شد.',
|
||||
'Alter type' => 'ویرایش نوع',
|
||||
);
|
||||
|
||||
350
adminer/lang/fi.inc.php
Normal file
350
adminer/lang/fi.inc.php
Normal file
@@ -0,0 +1,350 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'Järjestelmä',
|
||||
'Server' => 'Palvelin',
|
||||
'Username' => 'Käyttäjänimi',
|
||||
'Password' => 'Salasana',
|
||||
'Permanent login' => 'Haluan pysyä kirjautuneena',
|
||||
'Login' => 'Kirjaudu',
|
||||
'Logout' => 'Kirjaudu ulos',
|
||||
'Logged as: %s' => 'Olet kirjautunut käyttäjänä: %s',
|
||||
'Logout successful.' => 'Uloskirjautuminen onnistui.',
|
||||
'Invalid credentials.' => 'Virheelliset kirjautumistiedot.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.', 'Liian monta epäonnistunutta sisäänkirjautumisyritystä, kokeile uudestaan %d minuutin kuluttua.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-salasana ei ole enää voimassa. <a href="https://www.adminer.org/en/extension/"%s>Toteuta</a> %s-metodi sen tekemiseksi pysyväksi.',
|
||||
'Language' => 'Kieli',
|
||||
'Invalid CSRF token. Send the form again.' => 'Virheellinen CSRF-vastamerkki. Lähetä lomake uudelleen.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Jollet lähettänyt tämä pyyntö Adminerista, sulje tämä sivu.',
|
||||
'No extension' => 'Ei laajennusta',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Mitään tuetuista PHP-laajennuksista (%s) ei ole käytettävissä.',
|
||||
'Session support must be enabled.' => 'Istuntotuki on oltava päällä.',
|
||||
'Session expired, please login again.' => 'Istunto vanhentunut, kirjaudu uudelleen.',
|
||||
'%s version: %s through PHP extension %s' => '%s versio: %s PHP-laajennuksella %s',
|
||||
'Refresh' => 'Virkistä',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Oikeudet',
|
||||
'Create user' => 'Luo käyttäjä',
|
||||
'User has been dropped.' => 'Käyttäjä poistettiin.',
|
||||
'User has been altered.' => 'Käyttäjää muutettiin.',
|
||||
'User has been created.' => 'Käyttäjä luotiin.',
|
||||
'Hashed' => 'Hashed',
|
||||
'Column' => 'Sarake',
|
||||
'Routine' => 'Rutiini',
|
||||
'Grant' => 'Myönnä',
|
||||
'Revoke' => 'Kiellä',
|
||||
|
||||
'Process list' => 'Prosessilista',
|
||||
'%d process(es) have been killed.' => array('%d prosessi lopetettu.', '%d prosessia lopetettu..'),
|
||||
'Kill' => 'Lopeta',
|
||||
|
||||
'Variables' => 'Muuttujat',
|
||||
'Status' => 'Tila',
|
||||
|
||||
'SQL command' => 'SQL-komento',
|
||||
'%d query(s) executed OK.' => array('%d kysely onnistui.', '%d kyselyä onnistui.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Kysely onnistui, kohdistui %d riviin.', 'Kysely onnistui, kohdistui %d riviin.'),
|
||||
'No commands to execute.' => 'Ei komentoja suoritettavana.',
|
||||
'Error in query' => 'Virhe kyselyssä',
|
||||
'Execute' => 'Suorita',
|
||||
'Stop on error' => 'Pysähdy virheeseen',
|
||||
'Show only errors' => 'Näytä vain virheet',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Historia',
|
||||
'Clear' => 'Tyhjennä',
|
||||
'Edit all' => 'Muokkaa kaikkia',
|
||||
|
||||
'File upload' => 'Tiedoston lataus palvelimelle',
|
||||
'From server' => 'Verkkopalvelimella Adminer-kansiossa oleva tiedosto',
|
||||
'Webserver file %s' => 'Verkkopalvelintiedosto %s',
|
||||
'Run file' => 'Suorita tämä',
|
||||
'File does not exist.' => 'Tiedostoa ei ole.',
|
||||
'File uploads are disabled.' => 'Tiedostojen lataaminen palvelimelle on estetty.',
|
||||
'Unable to upload a file.' => 'Tiedostoa ei voida ladata palvelimelle.',
|
||||
'Maximum allowed file size is %sB.' => 'Suurin sallittu tiedostokoko on %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Liian suuri POST-datamäärä. Pienennä dataa tai kasvata arvoa %s konfigurointitiedostossa.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Voit ladata suuren SQL-tiedoston FTP:n kautta ja tuoda sen sitten palvelimelta.',
|
||||
'You are offline.' => 'Olet offline-tilassa.',
|
||||
|
||||
'Export' => 'Vienti',
|
||||
'Output' => 'Tulos',
|
||||
'open' => 'avaa',
|
||||
'save' => 'tallenna',
|
||||
'Saving' => 'Tallennetaan',
|
||||
'Format' => 'Muoto',
|
||||
'Data' => 'Data',
|
||||
|
||||
'Database' => 'Tietokanta',
|
||||
'database' => 'tietokanta',
|
||||
'Use' => 'Käytä',
|
||||
'Select database' => 'Valitse tietokanta',
|
||||
'Invalid database.' => 'Tietokanta ei kelpaa.',
|
||||
'Database has been dropped.' => 'Tietokanta on poistettu.',
|
||||
'Databases have been dropped.' => 'Tietokannat on poistettu.',
|
||||
'Database has been created.' => 'Tietokanta on luotu.',
|
||||
'Database has been renamed.' => 'Tietokanta on nimetty uudelleen.',
|
||||
'Database has been altered.' => 'Tietokantaa on muutettu.',
|
||||
'Alter database' => 'Muuta tietokantaa',
|
||||
'Create database' => 'Luo tietokanta',
|
||||
'Database schema' => 'Tietokantakaava',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Pysyvä linkki',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Moottori',
|
||||
'Collation' => 'Kollaatio',
|
||||
'Data Length' => 'Datan pituus',
|
||||
'Index Length' => 'Indeksin pituus',
|
||||
'Data Free' => 'Vapaa tila',
|
||||
'Rows' => 'Riviä',
|
||||
'%d in total' => '%d kaikkiaan',
|
||||
'Analyze' => 'Analysoi',
|
||||
'Optimize' => 'Optimoi',
|
||||
'Vacuum' => 'Siivoa',
|
||||
'Check' => 'Tarkista',
|
||||
'Repair' => 'Korjaa',
|
||||
'Truncate' => 'Tyhjennä',
|
||||
'Tables have been truncated.' => 'Taulujen sisältö on tyhjennetty.',
|
||||
'Move to other database' => 'Siirrä toiseen tietokantaan',
|
||||
'Move' => 'Siirrä',
|
||||
'Tables have been moved.' => 'Taulut on siirretty.',
|
||||
'Copy' => 'Kopioi',
|
||||
'Tables have been copied.' => 'Taulut on kopioitu.',
|
||||
|
||||
'Routines' => 'Rutiinit',
|
||||
'Routine has been called, %d row(s) affected.' => array('Rutiini kutsuttu, kohdistui %d riviin.', 'Rutiini kutsuttu, kohdistui %d riviin.'),
|
||||
'Call' => 'Kutsua',
|
||||
'Parameter name' => 'Parametrin nimi',
|
||||
'Create procedure' => 'Luo proseduuri',
|
||||
'Create function' => 'Luo funktio',
|
||||
'Routine has been dropped.' => 'Rutiini on poistettu.',
|
||||
'Routine has been altered.' => 'Rutiinia on muutettu.',
|
||||
'Routine has been created.' => 'Rutiini on luotu.',
|
||||
'Alter function' => 'Muuta funktiota',
|
||||
'Alter procedure' => 'Muuta proseduuria',
|
||||
'Return type' => 'Palautustyyppi',
|
||||
|
||||
'Events' => 'Tapahtumat',
|
||||
'Event has been dropped.' => 'Tapahtuma on poistettu.',
|
||||
'Event has been altered.' => 'Tapahtumaa on muutettu.',
|
||||
'Event has been created.' => 'Tapahtuma on luotu.',
|
||||
'Alter event' => 'Muuta tapahtumaa',
|
||||
'Create event' => 'Luo tapahtuma',
|
||||
'At given time' => 'Tiettynä aikana',
|
||||
'Every' => 'Joka',
|
||||
'Schedule' => 'Aikataulu',
|
||||
'Start' => 'Aloitus',
|
||||
'End' => 'Lopetus',
|
||||
'On completion preserve' => 'Säilytä, kun valmis',
|
||||
|
||||
'Tables' => 'Taulut',
|
||||
'Tables and views' => 'Taulut ja näkymät',
|
||||
'Table' => 'Taulu',
|
||||
'No tables.' => 'Ei tauluja.',
|
||||
'Alter table' => 'Muuta taulua',
|
||||
'Create table' => 'Luo taulu',
|
||||
'Table has been dropped.' => 'Taulu on poistettu.',
|
||||
'Tables have been dropped.' => 'Tauluja on poistettu.',
|
||||
'Tables have been optimized.' => 'Taulut on optimoitu.',
|
||||
'Table has been altered.' => 'Taulua on muutettu.',
|
||||
'Table has been created.' => 'Taulu on luotu.',
|
||||
'Table name' => 'Taulun nimi',
|
||||
'Show structure' => 'Näytä rakenne',
|
||||
'engine' => 'moottori',
|
||||
'collation' => 'kollaatio',
|
||||
'Column name' => 'Sarakkeen nimi',
|
||||
'Type' => 'Tyyppi',
|
||||
'Length' => 'Pituus',
|
||||
'Auto Increment' => 'Automaattinen lisäys',
|
||||
'Options' => 'Asetukset',
|
||||
'Comment' => 'Kommentit',
|
||||
'Default value' => 'Oletusarvo',
|
||||
'Default values' => 'Oletusarvot',
|
||||
'Drop' => 'Poista',
|
||||
'Are you sure?' => 'Oletko varma?',
|
||||
'Size' => 'Koko',
|
||||
'Compute' => 'Laske',
|
||||
'Move up' => 'Siirrä ylös',
|
||||
'Move down' => 'Siirrä alas',
|
||||
'Remove' => 'Poista',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Kenttien sallittu enimmäismäärä ylitetty. Kasvata arvoa %s.',
|
||||
|
||||
'Partition by' => 'Osioi arvolla',
|
||||
'Partitions' => 'Osiot',
|
||||
'Partition name' => 'Osion nimi',
|
||||
'Values' => 'Arvot',
|
||||
|
||||
'View' => 'Näkymä',
|
||||
'Materialized view' => 'Materialisoitunut näkymä',
|
||||
'View has been dropped.' => 'Näkymä on poistettu.',
|
||||
'View has been altered.' => 'Näkymää on muutettu.',
|
||||
'View has been created.' => 'Näkymä on luotu.',
|
||||
'Alter view' => 'Muuta näkymää',
|
||||
'Create view' => 'Luo näkymä',
|
||||
|
||||
'Indexes' => 'Indeksit',
|
||||
'Indexes have been altered.' => 'Indeksejä on muutettu.',
|
||||
'Alter indexes' => 'Muuta indeksejä',
|
||||
'Add next' => 'Lisää seuraava',
|
||||
'Index Type' => 'Indeksityyppi',
|
||||
'Column (length)' => 'Sarake (pituus)',
|
||||
|
||||
'Foreign keys' => 'Vieraat avaimet',
|
||||
'Foreign key' => 'Vieras avain',
|
||||
'Foreign key has been dropped.' => 'Vieras avain on poistettu.',
|
||||
'Foreign key has been altered.' => 'Vierasta avainta on muutettu.',
|
||||
'Foreign key has been created.' => 'Vieras avain on luotu.',
|
||||
'Target table' => 'Kohdetaulu',
|
||||
'Change' => 'Muuta',
|
||||
'Source' => 'Lähde',
|
||||
'Target' => 'Kohde',
|
||||
'Add column' => 'Lisää sarake',
|
||||
'Alter' => 'Muuta',
|
||||
'Add foreign key' => 'Lisää vieras avain',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Lähde- ja kohdesarakkeiden tulee olla samaa tietotyyppiä, kohdesarakkeisiin tulee olla indeksi ja dataa, johon viitataan, täytyy olla.',
|
||||
|
||||
'Triggers' => 'Liipaisimet',
|
||||
'Add trigger' => 'Lisää liipaisin',
|
||||
'Trigger has been dropped.' => 'Liipaisin on poistettu.',
|
||||
'Trigger has been altered.' => 'Liipaisinta on muutettu.',
|
||||
'Trigger has been created.' => 'Liipaisin on luotu.',
|
||||
'Alter trigger' => 'Muuta liipaisinta',
|
||||
'Create trigger' => 'Luo liipaisin',
|
||||
'Time' => 'Aika',
|
||||
'Event' => 'Tapahtuma',
|
||||
'Name' => 'Nimi',
|
||||
|
||||
'select' => 'valitse',
|
||||
'Select' => 'Valitse',
|
||||
'Select data' => 'Valitse data',
|
||||
'Functions' => 'Funktiot',
|
||||
'Aggregation' => 'Aggregaatiot',
|
||||
'Search' => 'Hae',
|
||||
'anywhere' => 'kaikkialta',
|
||||
'Search data in tables' => 'Hae dataa tauluista',
|
||||
'Sort' => 'Lajittele',
|
||||
'descending' => 'alenevasti',
|
||||
'Limit' => 'Raja',
|
||||
'Limit rows' => 'Rajoita rivimäärää',
|
||||
'Text length' => 'Tekstin pituus',
|
||||
'Action' => 'Toimenpide',
|
||||
'Full table scan' => 'Koko taulun läpikäynti',
|
||||
'Unable to select the table' => 'Taulua ei voitu valita',
|
||||
'No rows.' => 'Ei rivejä.',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d rivi', '%d riviä'),
|
||||
'Page' => 'Sivu',
|
||||
'last' => 'viimeinen',
|
||||
'Load more data' => 'Lataa lisää dataa',
|
||||
'Loading' => 'Ladataan',
|
||||
'Whole result' => 'Koko tulos',
|
||||
'%d byte(s)' => array('%d tavu', '%d tavua'),
|
||||
|
||||
'Import' => 'Tuonti',
|
||||
'%d row(s) have been imported.' => array('%d rivi tuotiin.', '%d riviä tuotiin.'),
|
||||
'File must be in UTF-8 encoding.' => 'Tiedoston täytyy olla UTF-8-muodossa.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Muuta',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+napsauta arvoa muuttaaksesi.',
|
||||
'Use edit link to modify this value.' => 'Käytä muokkaa-linkkiä muuttaaksesi tätä arvoa.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Tietue%s lisättiin.',
|
||||
'Item has been deleted.' => 'Tietue poistettiin.',
|
||||
'Item has been updated.' => 'Tietue päivitettiin.',
|
||||
'%d item(s) have been affected.' => array('Kohdistui %d tietueeseen.', 'Kohdistui %d tietueeseen.'),
|
||||
'New item' => 'Uusi tietue',
|
||||
'original' => 'alkuperäinen',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'tyhjä',
|
||||
'edit' => 'muokkaa',
|
||||
'Edit' => 'Muokkaa',
|
||||
'Insert' => 'Lisää',
|
||||
'Save' => 'Tallenna',
|
||||
'Save and continue edit' => 'Tallenna ja jatka muokkaamista',
|
||||
'Save and insert next' => 'Tallenna ja lisää seuraava',
|
||||
'Selected' => 'Valitut',
|
||||
'Clone' => 'Kloonaa',
|
||||
'Delete' => 'Poista',
|
||||
'You have no privileges to update this table.' => 'Sinulla ei ole oikeutta päivittää tätä taulua.',
|
||||
|
||||
'E-mail' => 'S-posti',
|
||||
'From' => 'Lähettäjä',
|
||||
'Subject' => 'Aihe',
|
||||
'Attachments' => 'Liitteet',
|
||||
'Send' => 'Lähetä',
|
||||
'%d e-mail(s) have been sent.' => array('% sähköpostiviestiä lähetetty.', '% sähköpostiviestiä lähetetty.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Numerot',
|
||||
'Date and time' => 'Päiväys ja aika',
|
||||
'Strings' => 'Merkkijonot',
|
||||
'Binary' => 'Binäärinen',
|
||||
'Lists' => 'Luettelot',
|
||||
'Network' => 'Verkko',
|
||||
'Geometry' => 'Geometria',
|
||||
'Relations' => 'Suhteet',
|
||||
|
||||
'Editor' => 'Editori',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$5.$3.$1',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => 'pp.kk.[vvvv]',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'nyt',
|
||||
'yes' => 'kyllä',
|
||||
'no' => 'ei',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Tiedosto on olemassa.',
|
||||
'Please use one of the extensions %s.' => 'Käytä jotain %s-laajennuksista.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Muuta kaavaa',
|
||||
'Create schema' => 'Luo kaava',
|
||||
'Schema has been dropped.' => 'Kaava poistettiin.',
|
||||
'Schema has been created.' => 'Kaava luotiin.',
|
||||
'Schema has been altered.' => 'Kaavaa muutettiin.',
|
||||
'Schema' => 'Kaava',
|
||||
'Invalid schema.' => 'Kaava ei kelpaa.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Sekvenssit',
|
||||
'Create sequence' => 'Luo sekvenssi',
|
||||
'Sequence has been dropped.' => 'Sekvenssi on poistettu.',
|
||||
'Sequence has been created.' => 'Sekvenssi on luotu.',
|
||||
'Sequence has been altered.' => 'Sekvenssiä on muutettu.',
|
||||
'Alter sequence' => 'Muuta sekvenssiä',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Käyttäjän tyypit',
|
||||
'Create type' => 'Luo tyyppi',
|
||||
'Type has been dropped.' => 'Tyyppi poistettiin.',
|
||||
'Type has been created.' => 'Tyyppi luotiin.',
|
||||
'Alter type' => 'Muuta tyyppiä',
|
||||
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Kiitos, kun käytät Admineriä, voit <a href="https://www.adminer.org/en/donation/">tehdä lahjoituksen tästä</a>.',
|
||||
'Drop %s?' => 'Poistetaanko %s?',
|
||||
'overwrite' => 'kirjoittaen päälle',
|
||||
'DB' => 'TK',
|
||||
'ATTACH queries are not supported.' => 'ATTACH-komennolla tehtyjä kyselyjä ei tueta.',
|
||||
'Warnings' => 'Varoitukset',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer ei tue pääsyä tietokantaan ilman salasanaa, katso tarkemmin <a href="https://www.adminer.org/en/password/"%s>täältä</a>.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Toiminto suoritetaan sen jälkeen, kun on onnistuttu kirjautumaan samoilla käyttäjätunnuksilla uudestaan.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Yhteydet etuoikeutettuihin portteihin eivät ole sallittuja.',
|
||||
'There is a space in the input password which might be the cause.' => 'Syynä voi olla syötetyssä salasanassa oleva välilyönti.',
|
||||
'Unknown error.' => 'Tuntematon virhe.',
|
||||
'Database does not support password.' => 'Tietokanta ei tue salasanaa.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Poista käytöstä %s tai ota käyttöön laajennus %s tai %s.',
|
||||
);
|
||||
@@ -8,7 +8,6 @@ $translations = array(
|
||||
'Password' => 'Mot de passe',
|
||||
'Select database' => 'Sélectionner la base de données',
|
||||
'Invalid database.' => 'Base de données invalide.',
|
||||
'Create new database' => 'Créer une base de données',
|
||||
'Table has been dropped.' => 'La table a été effacée.',
|
||||
'Table has been altered.' => 'La table a été modifiée.',
|
||||
'Table has been created.' => 'La table a été créée.',
|
||||
@@ -20,9 +19,9 @@ $translations = array(
|
||||
'Column name' => 'Nom de la colonne',
|
||||
'Type' => 'Type',
|
||||
'Length' => 'Longueur',
|
||||
'Auto Increment' => 'Auto increment',
|
||||
'Auto Increment' => 'Incrément automatique',
|
||||
'Options' => 'Options',
|
||||
'Save' => 'Sauvegarder',
|
||||
'Save' => 'Enregistrer',
|
||||
'Drop' => 'Supprimer',
|
||||
'Database has been created.' => 'La base de données a été créée.',
|
||||
'Database has been renamed.' => 'La base de données a été renommée.',
|
||||
@@ -30,18 +29,16 @@ $translations = array(
|
||||
'Alter database' => 'Modifier la base de données',
|
||||
'Create database' => 'Créer une base de données',
|
||||
'SQL command' => 'Requête SQL',
|
||||
'Dump' => 'Exporter',
|
||||
'Logout' => 'Déconnexion',
|
||||
'database' => 'base de données',
|
||||
'Use' => 'Utiliser',
|
||||
'No tables.' => 'Aucune table.',
|
||||
'select' => 'select',
|
||||
'Create new table' => 'Créer une nouvelle table',
|
||||
'Item has been deleted.' => 'L\'élément a été supprimé.',
|
||||
'Item has been updated.' => 'L\'élément a été modifié.',
|
||||
'Edit' => 'Modifier',
|
||||
'Insert' => 'Insérer',
|
||||
'Save and insert next' => 'Sauvegarder et insérer le prochain',
|
||||
'Save and insert next' => 'Enr. et insérer prochain',
|
||||
'Delete' => 'Effacer',
|
||||
'Database' => 'Base de données',
|
||||
'Routines' => 'Routines',
|
||||
@@ -50,7 +47,7 @@ $translations = array(
|
||||
'Alter indexes' => 'Modifier les index',
|
||||
'Add next' => 'Ajouter le prochain',
|
||||
'Language' => 'Langue',
|
||||
'Select' => 'Select',
|
||||
'Select' => 'Sélectionner',
|
||||
'New item' => 'Nouvel élément',
|
||||
'Search' => 'Rechercher',
|
||||
'Sort' => 'Trier',
|
||||
@@ -65,10 +62,10 @@ $translations = array(
|
||||
'Execute' => 'Exécuter',
|
||||
'Table' => 'Table',
|
||||
'Foreign keys' => 'Clés étrangères',
|
||||
'Triggers' => 'Triggers',
|
||||
'Triggers' => 'Déclencheurs',
|
||||
'View' => 'Vue',
|
||||
'Unable to select the table' => 'Impossible de sélectionner la table',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF invalide. Veuillez réenvoyer le formulaire.',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF invalide. Veuillez renvoyer le formulaire.',
|
||||
'Comment' => 'Commentaire',
|
||||
'Default values' => 'Valeurs par défaut',
|
||||
'%d byte(s)' => array('%d octet', '%d octets'),
|
||||
@@ -117,17 +114,17 @@ $translations = array(
|
||||
'Alter function' => 'Modifier la fonction',
|
||||
'Alter procedure' => 'Modifier la procédure',
|
||||
'Return type' => 'Type de retour',
|
||||
'Add trigger' => 'Ajouter un trigger',
|
||||
'Trigger has been dropped.' => 'Le trigger a été supprimé.',
|
||||
'Trigger has been altered.' => 'Le trigger a été modifié.',
|
||||
'Trigger has been created.' => 'Le trigger a été créé.',
|
||||
'Alter trigger' => 'Modifier un trigger',
|
||||
'Create trigger' => 'Ajouter un trigger',
|
||||
'Add trigger' => 'Ajouter un déclencheur',
|
||||
'Trigger has been dropped.' => 'Le déclencheur a été supprimé.',
|
||||
'Trigger has been altered.' => 'Le déclencheur a été modifié.',
|
||||
'Trigger has been created.' => 'Le déclencheur a été créé.',
|
||||
'Alter trigger' => 'Modifier un déclencheur',
|
||||
'Create trigger' => 'Ajouter un déclencheur',
|
||||
'Time' => 'Temps',
|
||||
'Event' => 'Évènement',
|
||||
'%d row(s)' => array('%d ligne', '%d lignes'),
|
||||
'Remove' => 'Effacer',
|
||||
'Are you sure?' => 'Êtes-vous certain ?',
|
||||
'Are you sure?' => 'Êtes-vous certain(e) ?',
|
||||
'Privileges' => 'Privilèges',
|
||||
'Create user' => 'Créer un utilisateur',
|
||||
'User has been dropped.' => 'L\'utilisateur a été effacé.',
|
||||
@@ -148,7 +145,7 @@ $translations = array(
|
||||
'Data' => 'Données',
|
||||
'Output' => 'Sortie',
|
||||
'open' => 'ouvrir',
|
||||
'save' => 'sauvegarder',
|
||||
'save' => 'enregistrer',
|
||||
'Format' => 'Format',
|
||||
'Functions' => 'Fonctions',
|
||||
'Aggregation' => 'Agrégation',
|
||||
@@ -165,7 +162,7 @@ $translations = array(
|
||||
'Events' => 'Évènements',
|
||||
'Schedule' => 'Horaire',
|
||||
'At given time' => 'À un moment précis',
|
||||
'Save and continue edit' => 'Sauvegarder et continuer l\'édition',
|
||||
'Save and continue edit' => 'Enr. et continuer édition',
|
||||
'original' => 'original',
|
||||
'Tables have been truncated.' => 'Les tables ont été tronquées.',
|
||||
'Tables have been moved.' => 'Les tables ont été déplacées.',
|
||||
@@ -178,6 +175,7 @@ $translations = array(
|
||||
'Data Free' => 'Espace inutilisé',
|
||||
'Rows' => 'Lignes',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analyser',
|
||||
'Optimize' => 'Optimiser',
|
||||
'Check' => 'Vérifier',
|
||||
@@ -186,14 +184,14 @@ $translations = array(
|
||||
'Move to other database' => 'Déplacer vers une autre base de données',
|
||||
'Move' => 'Déplacer',
|
||||
'%d item(s) have been affected.' => array('%d élément a été modifié.', '%d éléments ont été modifiés.'),
|
||||
'whole result' => 'résultat entier',
|
||||
'Whole result' => 'Résultat entier',
|
||||
'Clone' => 'Cloner',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Le nombre maximum de champs est dépassé. Veuillez augmenter %s et %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Le nombre maximum de champs est dépassé. Veuillez augmenter %s.',
|
||||
'Partition by' => 'Partitionner par',
|
||||
'Partitions' => 'Partitions',
|
||||
'Partition name' => 'Nom de la partition',
|
||||
'Values' => 'Valeurs',
|
||||
'%d row(s) have been imported.' => array('%d ligne a été importée.','%d lignes ont été importées.'),
|
||||
'%d row(s) have been imported.' => array('%d ligne a été importée.', '%d lignes ont été importées.'),
|
||||
'anywhere' => 'n\'importe où',
|
||||
'Import' => 'Importer',
|
||||
'Stop on error' => 'Arrêter en cas d\'erreur',
|
||||
@@ -225,7 +223,6 @@ $translations = array(
|
||||
'Databases have been dropped.' => 'Les bases de données ont été supprimées.',
|
||||
'Database has been dropped.' => 'La base de données a été supprimée.',
|
||||
'Search data in tables' => 'Rechercher dans les tables',
|
||||
'schema' => 'schéma',
|
||||
'Schema' => 'Schéma',
|
||||
'Alter schema' => 'Modifier le schéma',
|
||||
'Create schema' => 'Créer un schéma',
|
||||
@@ -259,7 +256,6 @@ $translations = array(
|
||||
'now' => 'maintenant',
|
||||
'%d query(s) executed OK.' => array('%d requête exécutée avec succès.', '%d requêtes exécutées avec succès.'),
|
||||
'Show only errors' => 'Montrer seulement les erreurs',
|
||||
'Last page' => 'Dernière page',
|
||||
'Refresh' => 'Rafraîchir',
|
||||
'Invalid schema.' => 'Schéma invalide.',
|
||||
'Please use one of the extensions %s.' => 'Veuillez utiliser l\'une des extensions %s.',
|
||||
@@ -269,4 +265,27 @@ $translations = array(
|
||||
'Permanent link' => 'Lien permanent',
|
||||
'Edit all' => 'Tout modifier',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Selected' => 'Sélectionnée(s)',
|
||||
'Modify' => 'Modification',
|
||||
'Load more data' => 'Charger plus de données',
|
||||
'Loading' => 'Chargement',
|
||||
'Tables have been optimized.' => 'Les tables ont bien été optimisées.',
|
||||
'Vacuum' => 'Vide',
|
||||
'File must be in UTF-8 encoding.' => 'Les fichiers doivent être encodés en UTF-8.',
|
||||
'Full table scan' => 'Scan de toute la table',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Trop de connexions échouées, essayez à nouveau dans %d minute.', 'Trop de connexions échouées, essayez à nouveau dans %d minutes.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Le mot de passe a expiré. <a href="https://www.adminer.org/en/extension/"%s>Implémentez</a> la méthode %s afin de le rendre permanent.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Vous pouvez uploader un gros fichier SQL par FTP et ensuite l\'importer depuis le serveur.',
|
||||
'Size' => 'Taille',
|
||||
'Compute' => 'Calcul',
|
||||
'You have no privileges to update this table.' => 'Vous n\'avez pas les droits pour mettre à jour cette table.',
|
||||
'Saving' => 'Enregistrement',
|
||||
'yes' => 'oui',
|
||||
'no' => 'non',
|
||||
'Materialized view' => 'Vue matérialisée',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'Limiter les lignes',
|
||||
'Default value' => 'Valeur par défaut',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Si vous n\'avez pas envoyé cette requête depuis Adminer, alors fermez cette page.',
|
||||
'You are offline.' => 'Vous êtes hors ligne.',
|
||||
);
|
||||
|
||||
291
adminer/lang/gl.inc.php
Normal file
291
adminer/lang/gl.inc.php
Normal file
@@ -0,0 +1,291 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Conectar',
|
||||
'Logout successful.' => 'Pechouse a sesión con éxito.',
|
||||
'Invalid credentials.' => 'Credenciais (usuario e/ou contrasinal) inválidos.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Usuario',
|
||||
'Password' => 'Contrasinal',
|
||||
'Select database' => 'Seleccionar Base de datos',
|
||||
'Invalid database.' => 'Base de datos incorrecta.',
|
||||
'Table has been dropped.' => 'Eliminouse a táboa.',
|
||||
'Table has been altered.' => 'Modificouse a táboa.',
|
||||
'Table has been created.' => 'Creouse a táboa.',
|
||||
'Alter table' => 'Modificar táboa',
|
||||
'Create table' => 'Crear táboa',
|
||||
'Table name' => 'Nome da táboa',
|
||||
'engine' => 'motor',
|
||||
'collation' => 'xogo de caracteres (collation)',
|
||||
'Column name' => 'Nome da columna',
|
||||
'Type' => 'Tipo',
|
||||
'Length' => 'Lonxitude',
|
||||
'Auto Increment' => 'Incremento automático',
|
||||
'Options' => 'Opcións',
|
||||
'Save' => 'Gardar',
|
||||
'Drop' => 'Eliminar',
|
||||
'Database has been dropped.' => 'Eliminouse a base de datos.',
|
||||
'Database has been created.' => 'Creouse a base de datos.',
|
||||
'Database has been renamed.' => 'Renomeouse a base de datos.',
|
||||
'Database has been altered.' => 'Modificouse a base de datos.',
|
||||
'Alter database' => 'Modificar Base de datos',
|
||||
'Create database' => 'Crear Base de datos',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Logout' => 'Pechar sesión',
|
||||
'database' => 'base de datos',
|
||||
'Use' => 'Usar',
|
||||
'No tables.' => 'Nengunha táboa.',
|
||||
'select' => 'selecciona',
|
||||
'Item has been deleted.' => 'Eliminouse o elemento.',
|
||||
'Item has been updated.' => 'Modificouse o elemento.',
|
||||
'Item%s has been inserted.' => 'Inseríuse o elemento%s.',
|
||||
'Edit' => 'Editar',
|
||||
'Insert' => 'Inserir',
|
||||
'Save and insert next' => 'Guardar e inserir seguinte',
|
||||
'Delete' => 'Borrar',
|
||||
'Database' => 'Base de datos',
|
||||
'Routines' => 'Rutinas',
|
||||
'Indexes have been altered.' => 'Alteráronse os índices.',
|
||||
'Indexes' => 'Índices',
|
||||
'Alter indexes' => 'Modificar índices',
|
||||
'Add next' => 'Engadir seguinte',
|
||||
'Language' => 'Lingua',
|
||||
'Select' => 'Seleccionar',
|
||||
'New item' => 'Novo elemento',
|
||||
'Search' => 'Buscar',
|
||||
'Sort' => 'Ordenar',
|
||||
'descending' => 'descendente',
|
||||
'Limit' => 'Límite',
|
||||
'No rows.' => 'Nengún resultado.',
|
||||
'Action' => 'Acción',
|
||||
'edit' => 'editar',
|
||||
'Page' => 'Páxina',
|
||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d fila afectada.', 'Consulta executada, %d filas afectadas.'),
|
||||
'Error in query' => 'Erro na consulta',
|
||||
'Execute' => 'Executar',
|
||||
'Table' => 'Táboa',
|
||||
'Foreign keys' => 'Chaves externas',
|
||||
'Triggers' => 'Disparadores',
|
||||
'View' => 'Vista',
|
||||
'Unable to select the table' => 'No é posible seleccionar a táboa',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Envíe de novo os datos do formulario.',
|
||||
'Comment' => 'Comentario',
|
||||
'Default values' => 'Valores predeterminados',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'No commands to execute.' => 'Non hai comandos para executar.',
|
||||
'Unable to upload a file.' => 'Non é posible importar o ficheiro.',
|
||||
'File upload' => 'Importar ficheiro',
|
||||
'File uploads are disabled.' => 'Importación de ficheiros deshablilitada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Chamouse á rutina, %d fila afectada.', 'Chamouse á rutina, %d filas afectadas.'),
|
||||
'Call' => 'Chamar',
|
||||
'No extension' => 'Non ten extensión',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Ningunha das extensións PHP soportadas (%s) está dispoñible.',
|
||||
'Session support must be enabled.' => 'As sesións deben estar habilitadas.',
|
||||
'Session expired, please login again.' => 'Caducou a sesión, por favor acceda de novo.',
|
||||
'Text length' => 'Lonxitud do texto',
|
||||
'Foreign key has been dropped.' => 'Eliminouse a chave externa.',
|
||||
'Foreign key has been altered.' => 'Modificouse a chave externa.',
|
||||
'Foreign key has been created.' => 'Creouse a chave externa.',
|
||||
'Foreign key' => 'Chave externa',
|
||||
'Target table' => 'táboa de destino',
|
||||
'Change' => 'Cambiar',
|
||||
'Source' => 'Orixe',
|
||||
'Target' => 'Destino',
|
||||
'Add column' => 'Engadir columna',
|
||||
'Alter' => 'Modificar',
|
||||
'Add foreign key' => 'Engadir chave externa',
|
||||
'ON DELETE' => 'AO BORRAR (ON DELETE)',
|
||||
'ON UPDATE' => 'AO ACTUALIZAR (ON UPDATE)',
|
||||
'Index Type' => 'Tipo de índice',
|
||||
'Column (length)' => 'Columna (lonxitude)',
|
||||
'View has been dropped.' => 'Eliminouse a vista.',
|
||||
'View has been altered.' => 'Modificouse a vista.',
|
||||
'View has been created.' => 'Creouse a vista.',
|
||||
'Alter view' => 'Modificar vista',
|
||||
'Create view' => 'Crear vista',
|
||||
'Name' => 'Nome',
|
||||
'Process list' => 'Lista de procesos',
|
||||
'%d process(es) have been killed.' => array('%d proceso foi detido.', '%d procesos foron detidos.'),
|
||||
'Kill' => 'Deter',
|
||||
'Parameter name' => 'Nome de Parámetro',
|
||||
'Database schema' => 'Esquema de base de datos',
|
||||
'Create procedure' => 'Crear procedemento',
|
||||
'Create function' => 'Crear función',
|
||||
'Routine has been dropped.' => 'Eliminouse o procedemento.',
|
||||
'Routine has been altered.' => 'Alterouse o procedemento.',
|
||||
'Routine has been created.' => 'Creouse o procedemento.',
|
||||
'Alter function' => 'Modificar Función',
|
||||
'Alter procedure' => 'Modificar procedemento',
|
||||
'Return type' => 'Tipo de valor devolto',
|
||||
'Add trigger' => 'Engadir disparador',
|
||||
'Trigger has been dropped.' => 'Eliminouse o disparador.',
|
||||
'Trigger has been altered.' => 'Modificouse o disparador.',
|
||||
'Trigger has been created.' => 'Creouse o disparador.',
|
||||
'Alter trigger' => 'Modificar Disparador',
|
||||
'Create trigger' => 'Crear Disparador',
|
||||
'Time' => 'Tempo',
|
||||
'Event' => 'Evento',
|
||||
'%s version: %s through PHP extension %s' => 'Versión %s: %s a través da extensión de PHP %s',
|
||||
'%d row(s)' => array('%d fila', '%d filas'),
|
||||
'Remove' => 'Eliminar',
|
||||
'Are you sure?' => 'Está seguro?',
|
||||
'Privileges' => 'Privilexios',
|
||||
'Create user' => 'Crear Usuario',
|
||||
'User has been dropped.' => 'Eliminouse o usuario.',
|
||||
'User has been altered.' => 'Modificouse o usuario.',
|
||||
'User has been created.' => 'Creouse o usuario.',
|
||||
'Hashed' => 'Hashed',
|
||||
'Column' => 'Columna',
|
||||
'Routine' => 'Rutina',
|
||||
'Grant' => 'Conceder',
|
||||
'Revoke' => 'Revocar',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Datos POST demasiado grandes. Reduza os datos ou aumente a directiva de configuración %s.',
|
||||
'Logged as: %s' => 'Conectado como: %s',
|
||||
'Move up' => 'Mover arriba',
|
||||
'Move down' => 'Mover abaixo',
|
||||
'Functions' => 'Funcións',
|
||||
'Aggregation' => 'Agregados',
|
||||
'Export' => 'Exportar',
|
||||
'Output' => 'Salida',
|
||||
'open' => 'abrir',
|
||||
'save' => 'gardar',
|
||||
'Format' => 'Formato',
|
||||
'Tables' => 'Táboas',
|
||||
'Data' => 'Datos',
|
||||
'Event has been dropped.' => 'Eliminouse o evento.',
|
||||
'Event has been altered.' => 'Modificouse o evento.',
|
||||
'Event has been created.' => 'Creouse o evento.',
|
||||
'Alter event' => 'Modificar Evento',
|
||||
'Create event' => 'Crear Evento',
|
||||
'At given time' => 'No tempo indicado',
|
||||
'Every' => 'Cada',
|
||||
'Events' => 'Eventos',
|
||||
'Schedule' => 'Axenda',
|
||||
'Start' => 'Inicio',
|
||||
'End' => 'Fin',
|
||||
'Status' => 'Estado',
|
||||
'On completion preserve' => 'Ao completar manter',
|
||||
'Tables and views' => 'táboas e vistas',
|
||||
'Data Length' => 'Lonxitude de datos',
|
||||
'Index Length' => 'Lonxitude de índice',
|
||||
'Data Free' => 'Espazo dispoñible',
|
||||
'Collation' => 'Xogo de caracteres (collation)',
|
||||
'Analyze' => 'Analizar',
|
||||
'Optimize' => 'Optimizar',
|
||||
'Check' => 'Comprobar',
|
||||
'Repair' => 'Reparar',
|
||||
'Truncate' => 'Baleirar',
|
||||
'Tables have been truncated.' => 'Baleiráronse as táboas.',
|
||||
'Rows' => 'Filas',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Movéronse as táboas.',
|
||||
'Move to other database' => 'Mover a outra base de datos',
|
||||
'Move' => 'Mover',
|
||||
'Engine' => 'Motor',
|
||||
'Save and continue edit' => 'Gardar se seguir editando',
|
||||
'original' => 'orixinal',
|
||||
'Tables have been dropped.' => 'Elimináronse as táboas.',
|
||||
'%d item(s) have been affected.' => array('%d elemento afectado.', '%d elementos afectados.'),
|
||||
'Whole result' => 'Resultado completo',
|
||||
'Clone' => 'Clonar',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Excedida o número máximo de campos permitidos. Por favor aumente %s.',
|
||||
'Partition by' => 'Particionar por',
|
||||
'Partitions' => 'Particións',
|
||||
'Partition name' => 'Nome da Partición',
|
||||
'Values' => 'Valores',
|
||||
'%d row(s) have been imported.' => array('%d fila importada.', '%d filas importadas.'),
|
||||
'anywhere' => 'onde sexa',
|
||||
'Import' => 'Importar',
|
||||
'Stop on error' => 'Parar en caso de erro',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5/$3/$1',
|
||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||
'History' => 'Histórico',
|
||||
'Variables' => 'Variables',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As columnas de orixe e destino deben ser do mesmo tipo, debe existir un índice nas columnas de destino e os datos referenciados deben existir.',
|
||||
'Relations' => 'Relacins',
|
||||
'Run file' => 'Executar ficheiro',
|
||||
'Clear' => 'Baleirar',
|
||||
'Maximum allowed file size is %sB.' => 'O tamaño máximo de ficheiro permitido é de %sB.',
|
||||
'Numbers' => 'Números',
|
||||
'Date and time' => 'Data e hora',
|
||||
'Strings' => 'Cadea',
|
||||
'Binary' => 'Binario',
|
||||
'Lists' => 'Listas',
|
||||
'Editor' => 'Editor',
|
||||
'E-mail' => 'Email',
|
||||
'From' => 'De',
|
||||
'Subject' => 'Asunto',
|
||||
'Send' => 'Enviar',
|
||||
'%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'),
|
||||
'Webserver file %s' => 'Ficheiro de servidor web %s',
|
||||
'File does not exist.' => 'O ficheiro non existe.',
|
||||
'%d in total' => '%d en total',
|
||||
'Permanent login' => 'Permanecer conectado',
|
||||
'Databases have been dropped.' => 'Elimináronse as bases de datos.',
|
||||
'Search data in tables' => 'Buscar datos en táboas',
|
||||
'Schema' => 'Esquema',
|
||||
'Alter schema' => 'Modificar esquema',
|
||||
'Create schema' => 'Crear esquema',
|
||||
'Schema has been dropped.' => 'Eliminouse o esquema.',
|
||||
'Schema has been created.' => 'Creouse o esquema.',
|
||||
'Schema has been altered.' => 'Modificouse o esquema.',
|
||||
'Sequences' => 'Secuencias',
|
||||
'Create sequence' => 'Crear secuencias',
|
||||
'Alter sequence' => 'Modificar secuencia',
|
||||
'Sequence has been dropped.' => 'Eliminouse a secuencia.',
|
||||
'Sequence has been created.' => 'Creouse a secuencia.',
|
||||
'Sequence has been altered.' => 'Modificaouse a secuencia.',
|
||||
'User types' => 'Tipos definidos polo usuario',
|
||||
'Create type' => 'Crear tipo',
|
||||
'Alter type' => 'Modificar tipo',
|
||||
'Type has been dropped.' => 'Eliminouse o tipo.',
|
||||
'Type has been created.' => 'Creouse o tipo.',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+clic sobre o valor para editalo.',
|
||||
'Use edit link to modify this value.' => 'Use a ligazón de edición para modificar este valor.',
|
||||
'last' => 'último',
|
||||
'From server' => 'Desde o servidor',
|
||||
'System' => 'Sistema',
|
||||
'Select data' => 'Seleccionar datos',
|
||||
'Show structure' => 'Amosar estructura',
|
||||
'empty' => 'baleiro',
|
||||
'Network' => 'Rede',
|
||||
'Geometry' => 'Xeometría',
|
||||
'File exists.' => 'O ficheiro xa existe.',
|
||||
'Attachments' => 'Adxuntos',
|
||||
'%d query(s) executed OK.' => array('%d consulta executada correctamente.', '%d consultas executadas correctamente.'),
|
||||
'Show only errors' => 'Amosar só erros',
|
||||
'Refresh' => 'Refrescar',
|
||||
'Invalid schema.' => 'Esquema inválido.',
|
||||
'Please use one of the extensions %s.' => 'Por favor use unha das extensións %s.',
|
||||
'now' => 'agora',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'Copiáronse as táboas.',
|
||||
'Copy' => 'Copiar',
|
||||
'Permanent link' => 'Ligazón permanente',
|
||||
'Edit all' => 'Editar todo',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Tables have been optimized.' => 'Optimizáronse as táboas',
|
||||
'Materialized view' => 'Vista materializada',
|
||||
'Vacuum' => 'Baleirar',
|
||||
'Selected' => 'Selección',
|
||||
'File must be in UTF-8 encoding.' => 'O ficheiro ten que estar codificado con UTF-8',
|
||||
'Modify' => 'Modificar',
|
||||
'Loading' => 'Cargando',
|
||||
'Load more data' => 'Cargar máis datos',
|
||||
'%d / ' => array('%d / ','%d / '),
|
||||
'Limit rows' => 'Limitar filas',
|
||||
'Default value' => 'Valor por defecto',
|
||||
'Full table scan' => 'Escaneo completo da táboa',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Demasiados intentos de conexión, intentao de novo en %d minuto', 'Demasiados intentos de conexión, intentao de novo en %d minutos'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'O contrasinal principal caducou. <a href="https://www.adminer.org/en/extension/"%s>Implementa</a> o método %s para facelo permanente.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Se non enviaches esta petición dende o Adminer entón pecha esta páxina',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Podes subir un ficheiro SQL de gran tamaño vía FTP e importalo dende o servidor',
|
||||
'Size' => 'Tamaño',
|
||||
'Compute' => 'Calcular',
|
||||
'You are offline.' => 'Non tes conexión',
|
||||
'You have no privileges to update this table.' => 'Non tes privilexios para actualizar esta táboa',
|
||||
'Saving' => 'Gardando',
|
||||
'yes' => 'si',
|
||||
'no' => 'non',
|
||||
);
|
||||
293
adminer/lang/he.inc.php
Normal file
293
adminer/lang/he.inc.php
Normal file
@@ -0,0 +1,293 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'התחברות',
|
||||
'Logout successful.' => 'ההתחברות הצליחה',
|
||||
'Invalid credentials.' => 'פרטי התחברות שגויים',
|
||||
'Server' => 'שרת',
|
||||
'Username' => 'שם משתמש',
|
||||
'Password' => 'סיסמה',
|
||||
'Select database' => 'בחר מסד נתונים',
|
||||
'Invalid database.' => 'מסד נתונים שגוי',
|
||||
'Table has been dropped.' => 'הטבלה הושלכה',
|
||||
'Table has been altered.' => 'הטבלה שונתה',
|
||||
'Table has been created.' => 'הטבלה נוצרה',
|
||||
'Alter table' => 'שנה טבלה',
|
||||
'Create table' => 'צור טבלה',
|
||||
'Table name' => 'שם הטבלה',
|
||||
'engine' => 'מנוע',
|
||||
'collation' => 'קולקציה',
|
||||
'Column name' => 'שם עמודה',
|
||||
'Type' => 'סוג',
|
||||
'Length' => 'אורך',
|
||||
'Auto Increment' => 'הגדלה אוטומטית',
|
||||
'Options' => 'אפשרויות',
|
||||
'Save' => 'שמור',
|
||||
'Drop' => 'השלך',
|
||||
'Database has been created.' => 'מסד הנתונים נוצר',
|
||||
'Database has been renamed.' => 'שם מסד הנתונים שונה',
|
||||
'Database has been altered.' => 'מסד הנתונים שונה',
|
||||
'Alter database' => 'שנה מסד נתונים',
|
||||
'Create database' => 'צור מסד נתונים',
|
||||
'SQL command' => 'שאילתת SQL',
|
||||
'Logout' => 'התנתק',
|
||||
'database' => 'מסד נתונים',
|
||||
'Use' => 'השתמש',
|
||||
'No tables.' => 'אין טבלאות',
|
||||
'select' => 'בחר',
|
||||
'Item has been deleted.' => 'הפריט נמחק',
|
||||
'Item has been updated.' => 'הפריט עודכן',
|
||||
'Edit' => 'ערוך',
|
||||
'Insert' => 'הכנס',
|
||||
'Save and insert next' => 'שמור והמשך להכניס',
|
||||
'Delete' => 'מחק',
|
||||
'Database' => 'מסד נתונים',
|
||||
'Routines' => 'רוטינות',
|
||||
'Indexes have been altered.' => 'האינדקסים שונו',
|
||||
'Indexes' => 'אינדקסים',
|
||||
'Alter indexes' => 'שנה אינדקסים',
|
||||
'Add next' => 'הוסף הבא',
|
||||
'Language' => 'שפה',
|
||||
'Select' => 'בחר',
|
||||
'New item' => 'פריט חדש',
|
||||
'Search' => 'חפש',
|
||||
'Sort' => 'מיין',
|
||||
'descending' => 'סדר הפוך',
|
||||
'Limit' => 'הגבל',
|
||||
'No rows.' => 'אין שורות',
|
||||
'Action' => 'פעולות',
|
||||
'edit' => 'ערוך',
|
||||
'Page' => 'עמוד',
|
||||
'Query executed OK, %d row(s) affected.' => 'השאילתה בוצעה כהלכה, %d שורות הושפעו',
|
||||
'Error in query' => 'שגיאה בשאילתה',
|
||||
'Execute' => 'הרץ',
|
||||
'Table' => 'טבלה',
|
||||
'Foreign keys' => 'מפתחות זרים',
|
||||
'Triggers' => 'מפעילים',
|
||||
'View' => 'הצג',
|
||||
'Unable to select the table' => 'בחירת הטבלה נכשלה',
|
||||
'Invalid CSRF token. Send the form again.' => 'כשל באבטחת נתונים, שלח טופס שוב',
|
||||
'Comment' => 'הערה',
|
||||
'Default values' => 'ערכי ברירת מחדל',
|
||||
'%d byte(s)' => '%d בתים',
|
||||
'No commands to execute.' => 'לא נמצאו פקודות להרצה',
|
||||
'Unable to upload a file.' => 'העלאת הקובץ נכשלה',
|
||||
'File upload' => 'העלה קובץ',
|
||||
'File uploads are disabled.' => 'העלאת קבצים מבוטלת',
|
||||
'Routine has been called, %d row(s) affected.' => 'הרוטינה נקראה, %d שורות הושפעו',
|
||||
'Call' => 'קרא',
|
||||
'No extension' => 'אין תוסף',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'שום תוסף PHP (%s) זמין',
|
||||
'Session support must be enabled.' => 'חובה להפעיל תמיכה בסשן',
|
||||
'Session expired, please login again.' => 'תם זמן ההפעלה, אנא התחבר שוב',
|
||||
'Text length' => 'אורך הטקסט',
|
||||
'Foreign key has been dropped.' => 'המפתח הזר הושלך',
|
||||
'Foreign key has been altered.' => 'המפתח הזר שונה',
|
||||
'Foreign key has been created.' => 'המפתח הזר נוצר',
|
||||
'Foreign key' => 'מפתח זר',
|
||||
'Target table' => 'טבלת יעד',
|
||||
'Change' => 'שנה',
|
||||
'Source' => 'מקור',
|
||||
'Target' => 'יעד',
|
||||
'Add column' => 'הוסף עמודה',
|
||||
'Alter' => 'שנה',
|
||||
'Add foreign key' => 'הוסף מפתח זר',
|
||||
'ON DELETE' => 'בעת מחיקה',
|
||||
'ON UPDATE' => 'בעת עידכון',
|
||||
'Index Type' => 'סוג אינדקס',
|
||||
'Column (length)' => 'עמודה (אורך)',
|
||||
'View has been dropped.' => 'התצוגה הושלכה',
|
||||
'View has been altered.' => 'התצוגה שונתה',
|
||||
'View has been created.' => 'התצוגה נוצרה',
|
||||
'Alter view' => 'שנה תצוגה',
|
||||
'Create view' => 'צור תצוגה',
|
||||
'Name' => 'שם',
|
||||
'Process list' => 'רשימת תהליכים',
|
||||
'%d process(es) have been killed.' => '%d תהליכים חוסלו',
|
||||
'Kill' => 'חסל',
|
||||
'Parameter name' => 'שם הפרמטר',
|
||||
'Database schema' => 'סכמת מסד נתונים',
|
||||
'Create procedure' => 'צור פרוצדורה',
|
||||
'Create function' => 'צור פונקציה',
|
||||
'Routine has been dropped.' => 'הרוטינה הושלכה',
|
||||
'Routine has been altered.' => 'הרוטינה שונתה',
|
||||
'Routine has been created.' => 'הרוטינה נוצרה',
|
||||
'Alter function' => 'שנה פונקציה',
|
||||
'Alter procedure' => 'שנה פרוצדורה',
|
||||
'Return type' => 'סוג ערך מוחזר',
|
||||
'Add trigger' => 'הוסף טריגר',
|
||||
'Trigger has been dropped.' => 'הטריגר הושלך',
|
||||
'Trigger has been altered.' => 'הטריגר שונה',
|
||||
'Trigger has been created.' => 'הטריגר נוצר',
|
||||
'Alter trigger' => 'שנה טריגר',
|
||||
'Create trigger' => 'צור טריגר',
|
||||
'Time' => 'זמן',
|
||||
'Event' => 'אירוע',
|
||||
'%d row(s)' => '%d שורות',
|
||||
'Remove' => 'הסר',
|
||||
'Are you sure?' => 'האם אתה בטוח?',
|
||||
'Privileges' => 'פריווילגיות',
|
||||
'Create user' => 'צור משתמש',
|
||||
'User has been dropped.' => 'המשתמש הושלך',
|
||||
'User has been altered.' => 'המשתמש שונה',
|
||||
'User has been created.' => 'המשתמש נוצר',
|
||||
'Hashed' => 'הצפנה',
|
||||
'Column' => 'עמודה',
|
||||
'Routine' => 'רוטינה',
|
||||
'Grant' => 'הענק',
|
||||
'Revoke' => 'שלול',
|
||||
'%s version: %s through PHP extension %s' => '%s גרסה: %s דרך תוסף PHP %s',
|
||||
'Logged as: %s' => 'מחובר כ: %s',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'מידע גדול מידי נשלח ב-POST. הקטן את את המידע הוא הגדלת את הגדרות ה-%s',
|
||||
'Move up' => 'הזז למעלה',
|
||||
'Move down' => 'הזז למטה',
|
||||
'Export' => 'יצא',
|
||||
'Tables' => 'טבלאות',
|
||||
'Data' => 'נתונים',
|
||||
'Output' => 'פלט',
|
||||
'open' => 'פתח',
|
||||
'save' => 'שמור',
|
||||
'Format' => 'פורמט',
|
||||
'Functions' => 'פונקציות',
|
||||
'Aggregation' => 'צבירה',
|
||||
'Event has been dropped.' => 'האירוע הושלך',
|
||||
'Event has been altered.' => 'האירוע שונה',
|
||||
'Event has been created.' => 'האירוע נוצר',
|
||||
'Alter event' => 'שנה אירוע',
|
||||
'Create event' => 'צור אירוע',
|
||||
'Start' => 'התחלה',
|
||||
'End' => 'סיום',
|
||||
'Every' => 'כל',
|
||||
'Status' => 'סטטוס',
|
||||
'On completion preserve' => 'בעת סיום שמור',
|
||||
'Events' => 'אירועים',
|
||||
'Schedule' => 'תזמן',
|
||||
'At given time' => 'לפי זמן נתון',
|
||||
'Save and continue edit' => 'שמור והמשך לערוך',
|
||||
'original' => 'מקורי',
|
||||
'Tables have been truncated.' => 'הטבלה קוצרה',
|
||||
'Tables have been moved.' => 'הטבלה הועברה',
|
||||
'Tables have been dropped.' => 'הטבלה הושלכה',
|
||||
'Tables and views' => 'טבלאות ותצוגות',
|
||||
'Engine' => 'מנוע',
|
||||
'Collation' => 'קולקציה',
|
||||
'Data Length' => 'אורך נתונים',
|
||||
'Index Length' => 'אורך אינדקס',
|
||||
'Data Free' => 'נתונים משוחררים',
|
||||
'Rows' => 'שורות',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'נתח',
|
||||
'Optimize' => 'יעל',
|
||||
'Check' => 'בדוק',
|
||||
'Repair' => 'תקן',
|
||||
'Truncate' => 'קצר',
|
||||
'Move to other database' => 'העבר למסד נתונים אחר',
|
||||
'Move' => 'העבר',
|
||||
'%d item(s) have been affected.' => '%d פריטים הושפעו',
|
||||
'Whole result' => 'כל התוצאות',
|
||||
'Clone' => 'שכפל',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'הגעת למספר השדות המרבי. בבקשה הגדל את %s',
|
||||
'Partition by' => 'מחיצות ע"י',
|
||||
'Partitions' => 'מחיצות',
|
||||
'Partition name' => 'שם מחיצה',
|
||||
'Values' => 'ערכים',
|
||||
'%d row(s) have been imported.' => '%d שורות יובאו',
|
||||
'anywhere' => 'בכל מקום',
|
||||
'Import' => 'יבא',
|
||||
'Stop on error' => 'עצור בעת שגיאה',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||
'History' => 'היסטוריה',
|
||||
'Variables' => 'משתנים',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'על עמודות המקור והיעד להיות מאותו טיפוס נתונים, חובה שיהיה אינדקס בעמודת היעד ושהמידע המתאים יהיה קיים',
|
||||
'Relations' => 'הקשרים',
|
||||
'Run file' => 'הרץ קובץ',
|
||||
'Clear' => 'נקה',
|
||||
'Maximum allowed file size is %sB.' => 'גודל מקסימלאי להעלאה: %sB',
|
||||
'Numbers' => 'מספרים',
|
||||
'Date and time' => 'תאריך ושעה',
|
||||
'Strings' => 'מחרוזות',
|
||||
'Binary' => 'בינארי',
|
||||
'Lists' => 'רשימות',
|
||||
'Editor' => 'עורך',
|
||||
'E-mail' => 'דוא"ל',
|
||||
'From' => 'מ:',
|
||||
'Subject' => 'נושא',
|
||||
'Send' => 'שלח',
|
||||
'%d e-mail(s) have been sent.' => '%d הודעות דוא"ל נשלחו',
|
||||
'Webserver file %s' => 'קובץ השרת %s',
|
||||
'File does not exist.' => 'הקובץ אינו קיים',
|
||||
'%d in total' => '%d בסך הכל',
|
||||
'Permanent login' => 'התחבר לצמיתות',
|
||||
'Databases have been dropped.' => 'מסד הנתונים הושלך',
|
||||
'Database has been dropped.' => 'מסד הנתונים הושלך',
|
||||
'Search data in tables' => 'חפש מידע בטבלאות',
|
||||
'Schema' => 'סכמה',
|
||||
'Alter schema' => 'שנה סכמה',
|
||||
'Create schema' => 'צור סכמה',
|
||||
'Schema has been dropped.' => 'הסכמה הושלכה',
|
||||
'Schema has been created.' => 'הסכמה נוצרה',
|
||||
'Schema has been altered.' => 'הסכמה שונתה',
|
||||
'Sequences' => 'סדרות',
|
||||
'Create sequence' => 'צור סדרה',
|
||||
'Alter sequence' => 'שנה סדרה',
|
||||
'Sequence has been dropped.' => 'הסדרה הושלכה',
|
||||
'Sequence has been created.' => 'הסדרה נוצרה',
|
||||
'Sequence has been altered.' => 'הסדרה שונתה',
|
||||
'User types' => 'סוגי משתמשים',
|
||||
'Create type' => 'צור סוג',
|
||||
'Alter type' => 'שנה סוג',
|
||||
'Type has been dropped.' => 'הסוג הושלך',
|
||||
'Type has been created.' => 'הסוג נוצר',
|
||||
'Use edit link to modify this value.' => 'השתמש בקישור העריכה בשביל לשנות את הערך',
|
||||
'last' => 'אחרון',
|
||||
'From server' => 'משרת',
|
||||
'System' => 'מערכת',
|
||||
'Select data' => 'בחר נתונים',
|
||||
'Show structure' => 'הראה מבנה',
|
||||
'empty' => 'ריק',
|
||||
'Network' => 'רשת',
|
||||
'Geometry' => 'גיאומטריה',
|
||||
'File exists.' => 'קובץ קיים',
|
||||
'Attachments' => 'קבצים מצורפים',
|
||||
'Item%s has been inserted.' => 'הפריט %s הוזן בהצלחה',
|
||||
'now' => 'כעת',
|
||||
'%d query(s) executed OK.' => '%d שאילתות בוצעו בהצלחה',
|
||||
'Show only errors' => 'הראה שגיאות בלבד',
|
||||
'Refresh' => 'רענן',
|
||||
'Invalid schema.' => 'סכמה שגויה',
|
||||
'Please use one of the extensions %s.' => 'בבקשה השתמש באחד מהתוספים %s',
|
||||
'ltr' => 'rtl',
|
||||
'Tables have been copied.' => 'הטבלה הועתקה',
|
||||
'Copy' => 'העתק',
|
||||
'Permanent link' => 'קישור סופי',
|
||||
'Edit all' => 'ערוך הכל',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Tables have been optimized.' => 'הטבלאות עברו אופטימיזציה',
|
||||
'Materialized view' => 'תצוגת מימוש ',
|
||||
'Vacuum' => 'וואקום',
|
||||
'Selected' => 'נבחרים',
|
||||
'Ctrl+click on a value to modify it.' => 'לחץ ctrl + לחיצת עכבר לערוך ערך זה',
|
||||
'File must be in UTF-8 encoding.' => 'על הקובץ להיות בקידוד utf-8',
|
||||
'Modify' => 'ערוך',
|
||||
'Loading' => 'טוען',
|
||||
'Load more data' => 'טען נתונים נוספים',
|
||||
'ATTACH queries are not supported.' => 'שאילתת ATTACH אינה נתמכת',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'הגבל שורות',
|
||||
'Default value' => 'ערך ברירת מחדל',
|
||||
'Full table scan' => 'סריקה טבלה מלאה',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'יותר מידי נסיונות כניסה נכשלו, אנא נסה עוד %d דקות',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'תודה שהשתמש ב-adminer אנא שקול <a href="https://www.adminer.org/en/donation/">לתרום</a>.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'סיסמת המאסטר פגה <a href="https://www.adminer.org/en/extension/"%s>התקן תוסף</a> על מנת להפוך את זה לתמידי',
|
||||
'If you did not send this request from Adminer then close this page.' => 'אם לא אתה שלחת בקשה ל-Adminer הינך יכול לסגור חלון זה',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'ניתן לעלות קבצים ב-FTP ואז למשוך אותם מהשרת',
|
||||
'Size' => 'גודל',
|
||||
'Compute' => 'חישוב',
|
||||
'You are offline.' => 'הינך לא מקוון',
|
||||
'You have no privileges to update this table.' => 'אין לך ההרשאות המתאימות לעדכן טבלה זו',
|
||||
'Saving' => 'שומר',
|
||||
'yes' => 'כן',
|
||||
'no' => 'לא',
|
||||
);
|
||||
@@ -8,7 +8,6 @@ $translations = array(
|
||||
'Password' => 'Jelszó',
|
||||
'Select database' => 'Adatbázis kiválasztása',
|
||||
'Invalid database.' => 'Érvénytelen adatbázis.',
|
||||
'Create new database' => 'Új adatbázis',
|
||||
'Table has been dropped.' => 'A tábla eldobva.',
|
||||
'Table has been altered.' => 'A tábla módosult.',
|
||||
'Table has been created.' => 'A tábla létrejött.',
|
||||
@@ -31,13 +30,11 @@ $translations = array(
|
||||
'Alter database' => 'Adatbázis módosítása',
|
||||
'Create database' => 'Adatbázis létrehozása',
|
||||
'SQL command' => 'SQL parancs',
|
||||
'Dump' => 'Exportálás',
|
||||
'Logout' => 'Kilépés',
|
||||
'database' => 'adatbázis',
|
||||
'Use' => 'Használ',
|
||||
'No tables.' => 'Nincs tábla.',
|
||||
'select' => 'kiválasztás',
|
||||
'Create new table' => 'Új tábla',
|
||||
'Item has been deleted.' => 'A tétel törölve.',
|
||||
'Item has been updated.' => 'A tétel frissítve.',
|
||||
'Item%s has been inserted.' => '%s tétel beszúrva.',
|
||||
@@ -178,8 +175,9 @@ $translations = array(
|
||||
'Repair' => 'Javít',
|
||||
'Truncate' => 'Felszabadít',
|
||||
'Tables have been truncated.' => 'A tábla felszabadítva.',
|
||||
'Rows' => 'Oszlop',
|
||||
'Rows' => 'Sorok',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Táblák áthelyezve.',
|
||||
'Move to other database' => 'Áthelyezés másik adatbázisba',
|
||||
'Move' => 'Áthelyez',
|
||||
@@ -187,7 +185,7 @@ $translations = array(
|
||||
'Save and continue edit' => 'Mentés és szerkesztés folytatása',
|
||||
'original' => 'eredeti',
|
||||
'%d item(s) have been affected.' => array('%d tétel érintett.', '%d tétel érintett.', '%d tétel érintett.'),
|
||||
'whole result' => 'összes eredményt mutatása',
|
||||
'Whole result' => 'Összes eredményt mutatása',
|
||||
'Tables have been dropped.' => 'Táblák eldobva.',
|
||||
'Clone' => 'Klónoz',
|
||||
'Partition by' => 'Particionálás ezzel',
|
||||
@@ -199,7 +197,7 @@ $translations = array(
|
||||
'Show structure' => 'Struktúra',
|
||||
'Select data' => 'Tartalom',
|
||||
'Stop on error' => 'Hiba esetén megáll',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'A maximális mezőszámot elérted. Növeld meg ezeket: %s, %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'A maximális mezőszámot elérted. Növeld meg ezeket: %s.',
|
||||
'anywhere' => 'bárhol',
|
||||
'%.3f s' => '%.3f másodperc',
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
@@ -239,7 +237,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Séma eldobva.',
|
||||
'Schema has been created.' => 'Séma létrejött.',
|
||||
'Schema has been altered.' => 'Séma módosult.',
|
||||
'schema' => 'séma',
|
||||
'Schema' => 'Séma',
|
||||
'Sequences' => 'Sorozatok',
|
||||
'Create sequence' => 'Sorozat létrehozása',
|
||||
@@ -258,7 +255,6 @@ $translations = array(
|
||||
'now' => 'most',
|
||||
'%d query(s) executed OK.' => '%d sikeres lekérdezés.',
|
||||
'Show only errors' => 'Csak a hibák mutatása',
|
||||
'Last page' => 'Utolsó oldal',
|
||||
'Refresh' => 'Frissítés',
|
||||
'Invalid schema.' => 'Érvénytelen séma.',
|
||||
'Please use one of the extensions %s.' => 'Használja a(z) %s kiterjesztést.',
|
||||
|
||||
@@ -10,11 +10,11 @@ $translations = array(
|
||||
'Logout' => 'Keluar',
|
||||
'Logged as: %s' => 'Masuk sebagai: %s',
|
||||
'Logout successful.' => 'Berhasil keluar.',
|
||||
'Invalid credentials.' => 'Akses invalid.',
|
||||
'Invalid credentials.' => 'Akses tidak sah.',
|
||||
'Language' => 'Bahasa',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF invalid. Kirim ulang formulir.',
|
||||
'No extension' => 'Ekstensi tidak tersedia',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Ekstensi PHP yang didukung (%s) tidak tersedia.',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF tidak sah. Kirim ulang formulir.',
|
||||
'No extension' => 'Ekstensi tidak ada',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Ekstensi PHP yang didukung (%s) tidak ada.',
|
||||
'Session support must be enabled.' => 'Dukungan sesi harus aktif.',
|
||||
'Session expired, please login again.' => 'Sesi habis, silakan masuk lagi.',
|
||||
'%s version: %s through PHP extension %s' => 'Versi %s: %s dengan ekstensi PHP %s',
|
||||
@@ -44,29 +44,28 @@ $translations = array(
|
||||
'SQL command' => 'Perintah SQL',
|
||||
'%d query(s) executed OK.' => '%d kueri berhasil dijalankan.',
|
||||
'Query executed OK, %d row(s) affected.' => 'Kueri berhasil, %d baris terpengaruh.',
|
||||
'No commands to execute.' => 'Tiada perintah untuk dijalankan.',
|
||||
'Error in query' => 'Kesalahan dalam kueri',
|
||||
'No commands to execute.' => 'Tidak ada perintah untuk dijalankan.',
|
||||
'Error in query' => 'Galat dalam kueri',
|
||||
'Execute' => 'Jalankan',
|
||||
'Stop on error' => 'Hentikan pada kesalahan',
|
||||
'Show only errors' => 'Hanya tampilkan kesalahan',
|
||||
'Stop on error' => 'Hentikan jika galat',
|
||||
'Show only errors' => 'Hanya tampilkan galat',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Riwayat',
|
||||
'Clear' => 'Bersihkan',
|
||||
'Edit all' => 'Edit semua',
|
||||
|
||||
'Edit all' => 'Sunting semua',
|
||||
'File upload' => 'Unggah berkas',
|
||||
'From server' => 'Dari server',
|
||||
'Webserver file %s' => 'Berkas server web %s',
|
||||
'Run file' => 'Jalankan berkas',
|
||||
'File does not exist.' => 'Berkas tidak ditemukan.',
|
||||
'File does not exist.' => 'Berkas tidak ada.',
|
||||
'File uploads are disabled.' => 'Pengunggahan berkas dimatikan.',
|
||||
'Unable to upload a file.' => 'Tidak dapat mengunggah berkas.',
|
||||
'Maximum allowed file size is %sB.' => 'Besar berkas yang diizinkan adalah %s bita.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kurangi data atau perbesar pengarah konfigurasi %s.',
|
||||
'Maximum allowed file size is %sB.' => 'Besar berkas yang diizinkan adalah %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kurangi data atau perbesar direktif konfigurasi %s.',
|
||||
|
||||
'Export' => 'Ekspor',
|
||||
'Dump' => 'Ekspor',
|
||||
'Output' => 'Hasil',
|
||||
'open' => 'buka',
|
||||
'save' => 'simpan',
|
||||
@@ -77,22 +76,22 @@ $translations = array(
|
||||
'database' => 'basis data',
|
||||
'Use' => 'Gunakan',
|
||||
'Select database' => 'Pilih basis data',
|
||||
'Invalid database.' => 'Basis data invalid.',
|
||||
'Create new database' => 'Buat basis data baru',
|
||||
'Invalid database.' => 'Basis data tidak sah.',
|
||||
'Database has been dropped.' => 'Basis data berhasil dihapus.',
|
||||
'Databases have been dropped.' => 'Basis data berhasil dihapus.',
|
||||
'Database has been created.' => 'Basis data berhasil dibuat.',
|
||||
'Database has been renamed.' => 'Basis data berhasil diganti nama.',
|
||||
'Database has been renamed.' => 'Basis data berhasil diganti namanya.',
|
||||
'Database has been altered.' => 'Basis data berhasil diubah.',
|
||||
'Alter database' => 'Ubah basis data',
|
||||
'Create database' => 'Buat basis data',
|
||||
'Database schema' => 'Skema basis data',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Tautan permanen',
|
||||
'Permanent link' => 'Pranala permanen',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => '.',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Mesin',
|
||||
'Collation' => 'Kolasi',
|
||||
'Data Length' => 'Panjang Data',
|
||||
@@ -113,9 +112,9 @@ $translations = array(
|
||||
'Tables have been copied.' => 'Tabel berhasil disalin.',
|
||||
|
||||
'Routines' => 'Rutin',
|
||||
'Routine has been called, %d row(s) affected.' => array('Rutin telah dipanggil, %d baris terpengaruh.', 'Rutin telah dipanggil, %d baris terpengaruh'),
|
||||
'Routine has been called, %d row(s) affected.' => 'Rutin telah dipanggil, %d baris terpengaruh.',
|
||||
'Call' => 'Panggilan',
|
||||
'Parameter name' => 'Nama paramater',
|
||||
'Parameter name' => 'Nama parameter',
|
||||
'Create procedure' => 'Buat prosedur',
|
||||
'Create function' => 'Buat fungsi',
|
||||
'Routine has been dropped.' => 'Rutin berhasil dihapus.',
|
||||
@@ -123,14 +122,14 @@ $translations = array(
|
||||
'Routine has been created.' => 'Rutin berhasil dibuat.',
|
||||
'Alter function' => 'Ubah fungsi',
|
||||
'Alter procedure' => 'Ubah prosedur',
|
||||
'Return type' => 'Jenis balikan',
|
||||
'Return type' => 'Jenis pengembalian',
|
||||
|
||||
'Events' => 'Peristiwa',
|
||||
'Event has been dropped.' => 'Peristiwa berhasil dihapus.',
|
||||
'Event has been altered.' => 'Peristiwa berhasil diubah.',
|
||||
'Event has been created.' => 'Peristiwa berhasil dibuat.',
|
||||
'Alter event' => 'Ubah peristiwa',
|
||||
'Create event' => 'Buat peristiwa',
|
||||
'Events' => 'Even',
|
||||
'Event has been dropped.' => 'Even berhasil dihapus.',
|
||||
'Event has been altered.' => 'Even berhasil diubah.',
|
||||
'Event has been created.' => 'Even berhasil dibuat.',
|
||||
'Alter event' => 'Ubah even',
|
||||
'Create event' => 'Buat even',
|
||||
'At given time' => 'Pada waktu tertentu',
|
||||
'Every' => 'Setiap',
|
||||
'Schedule' => 'Jadwal',
|
||||
@@ -141,10 +140,9 @@ $translations = array(
|
||||
'Tables' => 'Tabel',
|
||||
'Tables and views' => 'Tabel dan tampilan',
|
||||
'Table' => 'Tabel',
|
||||
'No tables.' => 'Tiada tabel.',
|
||||
'No tables.' => 'Tidak ada tabel.',
|
||||
'Alter table' => 'Ubah tabel',
|
||||
'Create table' => 'Buat tabel',
|
||||
'Create new table' => 'Buat tabel baru',
|
||||
'Table has been dropped.' => 'Tabel berhasil dihapus.',
|
||||
'Tables have been dropped.' => 'Tabel berhasil dihapus.',
|
||||
'Tables have been optimized.' => 'Tabel berhasil dioptimalkan.',
|
||||
@@ -157,16 +155,16 @@ $translations = array(
|
||||
'Column name' => 'Nama kolom',
|
||||
'Type' => 'Jenis',
|
||||
'Length' => 'Panjang',
|
||||
'Auto Increment' => 'Kenaikan Otomatis',
|
||||
'Auto Increment' => 'Inkrementasi Otomatis',
|
||||
'Options' => 'Opsi',
|
||||
'Comment' => 'Komentar',
|
||||
'Default values' => 'Nilai bawaan',
|
||||
'Drop' => 'Hapus',
|
||||
'Are you sure?' => 'Anda yakin',
|
||||
'Are you sure?' => 'Anda yakin?',
|
||||
'Move up' => 'Naik',
|
||||
'Move down' => 'Turun',
|
||||
'Remove' => 'Hapus',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Jumlah ruas maksimum yang diizinkan dilewati. Harap naikkan %s dan %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Sudah lebih dumlah ruas maksimum yang diizinkan. Harap naikkan %s.',
|
||||
|
||||
'Partition by' => 'Partisi menurut',
|
||||
'Partitions' => 'Partisi',
|
||||
@@ -203,15 +201,15 @@ $translations = array(
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kolom sumber dan sasaran harus memiliki jenis data yang sama. Kolom sasaran harus memiliki indeks dan data rujukan harus ada.',
|
||||
|
||||
'Triggers' => 'Picu',
|
||||
'Add trigger' => 'Tambah picu',
|
||||
'Trigger has been dropped.' => 'Picu berhasil dihapus.',
|
||||
'Trigger has been altered.' => 'Picu berhasil diubah.',
|
||||
'Trigger has been created.' => 'Picu berhasil dibuat.',
|
||||
'Alter trigger' => 'Ubah picu',
|
||||
'Create trigger' => 'Buat picu',
|
||||
'Triggers' => 'Pemicu',
|
||||
'Add trigger' => 'Tambah pemicu',
|
||||
'Trigger has been dropped.' => 'Pemicu berhasil dihapus.',
|
||||
'Trigger has been altered.' => 'Pemicu berhasil diubah.',
|
||||
'Trigger has been created.' => 'Pemicu berhasil dibuat.',
|
||||
'Alter trigger' => 'Ubah pemicu',
|
||||
'Create trigger' => 'Buat pemicu',
|
||||
'Time' => 'Waktu',
|
||||
'Event' => 'Peristiwa',
|
||||
'Event' => 'Even',
|
||||
'Name' => 'Nama',
|
||||
|
||||
'select' => 'pilih',
|
||||
@@ -222,26 +220,25 @@ $translations = array(
|
||||
'Search' => 'Cari',
|
||||
'anywhere' => 'di mana pun',
|
||||
'Search data in tables' => 'Cari data dalam tabel',
|
||||
'Sort' => 'Urutan',
|
||||
'Sort' => 'Urutkan',
|
||||
'descending' => 'menurun',
|
||||
'Limit' => 'Limit',
|
||||
'Limit' => 'Batas',
|
||||
'Text length' => 'Panjang teks',
|
||||
'Action' => 'Tindakan',
|
||||
'Full table scan' => 'Pindai tabel lengkap',
|
||||
'Unable to select the table' => 'Gagal memilih tabel',
|
||||
'No rows.' => 'Tiada baris.',
|
||||
'No rows.' => 'Tidak ada baris.',
|
||||
'%d row(s)' => '%d baris',
|
||||
'Page' => 'Halaman',
|
||||
'last' => 'terakhir',
|
||||
'Last page' => 'Halaman terakhir',
|
||||
'whole result' => 'Seluruh hasil',
|
||||
'Whole result' => 'Seluruh hasil',
|
||||
'%d byte(s)' => '%d bita',
|
||||
|
||||
'Import' => 'Impor',
|
||||
'%d row(s) have been imported.' => '%d baris berhasil diimpor.',
|
||||
|
||||
// in-place editing in select
|
||||
'Use edit link to modify this value.' => 'Gunakan tautan edit untuk mengubah nilai ini.',
|
||||
'Use edit link to modify this value.' => 'Gunakan pranala suntingan untuk mengubah nilai ini.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Entri%s berhasil disisipkan.',
|
||||
@@ -249,30 +246,30 @@ $translations = array(
|
||||
'Item has been updated.' => 'Entri berhasil diperbarui.',
|
||||
'%d item(s) have been affected.' => '%d entri terpengaruh.',
|
||||
'New item' => 'Entri baru',
|
||||
'original' => 'orisinal',
|
||||
'original' => 'asli',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'kosong',
|
||||
'edit' => 'edit',
|
||||
'Edit' => 'Edit',
|
||||
'edit' => 'sunting',
|
||||
'Edit' => 'Sunting',
|
||||
'Insert' => 'Sisipkan',
|
||||
'Save' => 'Simpan',
|
||||
'Save and continue edit' => 'Simpan dan terus mengedit',
|
||||
'Save and insert next' => 'Simpan dan sisipkan yang lain',
|
||||
'Save and continue edit' => 'Simpan dan lanjut menyunting',
|
||||
'Save and insert next' => 'Simpan dan sisipkan berikutnya',
|
||||
'Clone' => 'Gandakan',
|
||||
'Delete' => 'Hapus',
|
||||
|
||||
'E-mail' => 'Surel',
|
||||
'From' => 'Dari',
|
||||
'Subject' => 'Subjek',
|
||||
'Subject' => 'Judul',
|
||||
'Attachments' => 'Lampiran',
|
||||
'Send' => 'Kirim',
|
||||
'%d e-mail(s) have been sent.' => array('%d surel berhasil dikirim.', '%d surel berhasil dikirim'),
|
||||
'%d e-mail(s) have been sent.' => '%d surel berhasil dikirim.',
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Angka',
|
||||
'Date and time' => 'Tanggal dan waktu',
|
||||
'Strings' => 'String',
|
||||
'Binary' => 'Biner',
|
||||
'Binary' => 'Binari',
|
||||
'Lists' => 'Daftar',
|
||||
'Network' => 'Jaringan',
|
||||
'Geometry' => 'Geometri',
|
||||
@@ -299,9 +296,8 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Skema berhasil dihapus.',
|
||||
'Schema has been created.' => 'Skema berhasil dibuat.',
|
||||
'Schema has been altered.' => 'Skema berhasil diubah.',
|
||||
'schema' => 'skema',
|
||||
'Schema' => 'Skema',
|
||||
'Invalid schema.' => 'Skema invalid.',
|
||||
'Invalid schema.' => 'Skema tidak sah.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Deret',
|
||||
|
||||
@@ -8,7 +8,6 @@ $translations = array(
|
||||
'Password' => 'Password',
|
||||
'Select database' => 'Seleziona database',
|
||||
'Invalid database.' => 'Database non valido.',
|
||||
'Create new database' => 'Crea nuovo database',
|
||||
'Table has been dropped.' => 'Tabella eliminata.',
|
||||
'Table has been altered.' => 'Tabella modificata.',
|
||||
'Table has been created.' => 'Tabella creata.',
|
||||
@@ -31,13 +30,11 @@ $translations = array(
|
||||
'Alter database' => 'Modifica database',
|
||||
'Create database' => 'Crea database',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Dump' => 'Dump',
|
||||
'Logout' => 'Esci',
|
||||
'database' => 'database',
|
||||
'Use' => 'Usa',
|
||||
'No tables.' => 'No tabelle.',
|
||||
'select' => 'seleziona',
|
||||
'Create new table' => 'Crea nuova tabella',
|
||||
'Item has been deleted.' => 'Elemento eliminato.',
|
||||
'Item has been updated.' => 'Elemento aggiornato.',
|
||||
'Item%s has been inserted.' => 'Elemento%s inserito.',
|
||||
@@ -180,6 +177,7 @@ $translations = array(
|
||||
'Data Free' => 'Dati liberi',
|
||||
'Rows' => 'Righe',
|
||||
',' => '.',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analizza',
|
||||
'Optimize' => 'Ottimizza',
|
||||
'Check' => 'Controlla',
|
||||
@@ -188,9 +186,9 @@ $translations = array(
|
||||
'Move to other database' => 'Sposta in altro database',
|
||||
'Move' => 'Sposta',
|
||||
'%d item(s) have been affected.' => array('Il risultato consiste in %d elemento.', 'Il risultato consiste in %d elementi.'),
|
||||
'whole result' => 'intero risultato',
|
||||
'Whole result' => 'Intero risultato',
|
||||
'Clone' => 'Clona',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Troppi campi. Per favore aumentare %s e %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Troppi campi. Per favore aumentare %s.',
|
||||
'Partition by' => 'Partiziona per',
|
||||
'Partitions' => 'Partizioni',
|
||||
'Partition name' => 'Nome partizione',
|
||||
@@ -226,7 +224,6 @@ $translations = array(
|
||||
'Permanent login' => 'Login permanente',
|
||||
'Databases have been dropped.' => 'Database eliminati.',
|
||||
'Search data in tables' => 'Cerca nelle tabelle',
|
||||
'schema' => 'schema',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'Modifica schema',
|
||||
'Create schema' => 'Crea schema',
|
||||
@@ -258,7 +255,6 @@ $translations = array(
|
||||
'Attachments' => 'Allegati',
|
||||
'%d query(s) executed OK.' => array('%d query eseguita con successo.', '%d query eseguite con successo.'),
|
||||
'Show only errors' => 'Mostra solo gli errori',
|
||||
'Last page' => 'Ultima pagina',
|
||||
'Refresh' => 'Aggiorna',
|
||||
'Invalid schema.' => 'Schema non valido.',
|
||||
'Please use one of the extensions %s.' => 'Usa una delle estensioni %s.',
|
||||
|
||||
@@ -8,7 +8,6 @@ $translations = array(
|
||||
'Password' => 'パスワード',
|
||||
'Select database' => 'データベースを選択してください',
|
||||
'Invalid database.' => '不正なデータベース',
|
||||
'Create new database' => '新規にデータベースを作成',
|
||||
'Table has been dropped.' => 'テーブルを削除しました',
|
||||
'Table has been altered.' => 'テーブルを変更しました',
|
||||
'Table has been created.' => 'テーブルを作成しました',
|
||||
@@ -31,13 +30,11 @@ $translations = array(
|
||||
'Alter database' => 'データベースを変更',
|
||||
'Create database' => 'データベースを作成',
|
||||
'SQL command' => 'SQLコマンド',
|
||||
'Dump' => 'ダンプ',
|
||||
'Logout' => 'ログアウト',
|
||||
'database' => 'データベース',
|
||||
'Use' => '使用',
|
||||
'No tables.' => 'テーブルがありません。',
|
||||
'select' => '選択',
|
||||
'Create new table' => 'テーブルを作成',
|
||||
'Item has been deleted.' => '項目を削除しました',
|
||||
'Item has been updated.' => '項目を更新しました',
|
||||
'Edit' => '編集',
|
||||
@@ -176,20 +173,21 @@ $translations = array(
|
||||
'Data Free' => '空き',
|
||||
'Rows' => '行数',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => '分析',
|
||||
'Optimize' => '最適化',
|
||||
'Check' => 'チェック',
|
||||
'Repair' => '修復',
|
||||
'Truncate' => 'Truncate',
|
||||
'Truncate' => '空にする',
|
||||
'Move to other database' => '別のデータベースへ移動',
|
||||
'Move' => '移動',
|
||||
'Save and continue edit' => '保存して継続',
|
||||
'original' => '元',
|
||||
'%d item(s) have been affected.' => '%d を更新しました',
|
||||
'whole result' => '全結果',
|
||||
'Whole result' => '全結果',
|
||||
'Tables have been dropped.' => 'テーブルを削除しました',
|
||||
'Clone' => 'クローン',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => '定義可能な最大フィールド数を越えました。%s と %s を増やしてください。',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '定義可能な最大フィールド数を越えました。%s を増やしてください。',
|
||||
'Partition by' => 'パーティション',
|
||||
'Partitions' => 'パーティション',
|
||||
'Partition name' => 'パーティション名',
|
||||
@@ -227,7 +225,6 @@ $translations = array(
|
||||
'Permanent login' => '永続的にログイン',
|
||||
'Databases have been dropped.' => 'データベースを削除しました',
|
||||
'Search data in tables' => 'データを検索する',
|
||||
'schema' => 'スキーマ',
|
||||
'Schema' => 'スキーマ',
|
||||
'Alter schema' => 'スキーマ変更',
|
||||
'Create schema' => 'スキーマ追加',
|
||||
@@ -258,7 +255,6 @@ $translations = array(
|
||||
'now' => '現在の日時',
|
||||
'%d query(s) executed OK.' => '%d クエリーを実行しました',
|
||||
'Show only errors' => 'エラーのみ表示',
|
||||
'Last page' => '最後のページ',
|
||||
'Refresh' => 'リフレッシュ',
|
||||
'Invalid schema.' => '無効なスキーマ',
|
||||
'Please use one of the extensions %s.' => 'いずれかの拡張機能を使ってください %s',
|
||||
@@ -268,4 +264,14 @@ $translations = array(
|
||||
'Permanent link' => 'パーマネントリンク',
|
||||
'Edit all' => 'すべて編集',
|
||||
'HH:MM:SS' => '時:分:秒',
|
||||
'Selected' => '選択済',
|
||||
'Modify' => '修正',
|
||||
'Load more data' => '続きを読み込み',
|
||||
'Loading' => '読み込み中',
|
||||
'Size' => 'サイズ',
|
||||
'Compute' => '算出',
|
||||
'Saving' => '保存中',
|
||||
'yes' => 'はい',
|
||||
'no' => 'いいえ',
|
||||
'Default value' => '既定値',
|
||||
);
|
||||
|
||||
303
adminer/lang/ka.inc.php
Normal file
303
adminer/lang/ka.inc.php
Normal file
@@ -0,0 +1,303 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'შესვლა',
|
||||
'Logout successful.' => 'გამოხვედით სისტემიდან.',
|
||||
'Invalid credentials.' => 'არასწორი მომხმარებელი ან პაროლი.',
|
||||
'Server' => 'სერვერი',
|
||||
'Username' => 'მომხმარებელი',
|
||||
'Password' => 'პაროლი',
|
||||
'Select database' => 'ბაზა',
|
||||
'Invalid database.' => 'არასწორი ბაზა.',
|
||||
'Table has been dropped.' => 'ცხრილი წაიშალა.',
|
||||
'Table has been altered.' => 'ცხრილი შეიცვალა.',
|
||||
'Table has been created.' => 'ცხრილი შეიქმნა.',
|
||||
'Alter table' => 'ცხრილის შეცვლა',
|
||||
'Create table' => 'ცხრილის შექმნა',
|
||||
'Table name' => 'სახელი',
|
||||
'engine' => 'სახეობა',
|
||||
'collation' => 'კოდირება',
|
||||
'Column name' => 'ველი',
|
||||
'Type' => 'სახეობა',
|
||||
'Length' => 'სიგრძე',
|
||||
'Auto Increment' => 'ავტომატურად გაზრდა',
|
||||
'Options' => 'მოქმედება',
|
||||
'Save' => 'შენახვა',
|
||||
'Drop' => 'წაშლა',
|
||||
'Database has been dropped.' => 'ბაზა წაიშალა.',
|
||||
'Database has been created.' => 'ბაზა შეიქმნა.',
|
||||
'Database has been renamed.' => 'ბაზას გადაერქვა.',
|
||||
'Database has been altered.' => 'ბაზა შეიცვალა.',
|
||||
'Alter database' => 'ბაზის შეცვლა',
|
||||
'Create database' => 'ბაზის შექმნა',
|
||||
'SQL command' => 'SQL-ბრძანება',
|
||||
'Logout' => 'გასვლა',
|
||||
'database' => 'ბაზა',
|
||||
'Use' => 'არჩევა',
|
||||
'No tables.' => 'ბაზაში ცხრილი არაა.',
|
||||
'select' => 'არჩევა',
|
||||
'Item has been deleted.' => 'ჩანაწერი წაიშალა.',
|
||||
'Item has been updated.' => 'ჩანაწერი განახლდა.',
|
||||
'Item%s has been inserted.' => 'ჩანაწერი%s ჩაჯდა.',
|
||||
'Edit' => 'შეცვლა',
|
||||
'Insert' => 'ჩასმა',
|
||||
'Save and insert next' => 'შენახვა და სხვის ჩასმა',
|
||||
'Delete' => 'წაშლა',
|
||||
'Database' => 'ბაზა',
|
||||
'Indexes have been altered.' => 'შეიცვალა ინდექსები.',
|
||||
'Indexes' => 'ინდექსები',
|
||||
'Alter indexes' => 'ინდექსის შეცვლა',
|
||||
'Add next' => 'კიდევ დამატება',
|
||||
'Language' => 'ენა',
|
||||
'Select' => 'არჩევა',
|
||||
'New item' => 'ახალი ჩანაწერი',
|
||||
'Search' => 'ძებნა',
|
||||
'Sort' => 'დალაგება',
|
||||
'descending' => 'კლებადობით',
|
||||
'Limit' => 'ზღვარი',
|
||||
'No rows.' => 'ჩანაწერი არაა.',
|
||||
'Action' => 'მოქმედება',
|
||||
'edit' => 'რედაქტირება',
|
||||
'Page' => 'გვერდი',
|
||||
'Query executed OK, %d row(s) affected.' => 'მოთხოვდა შესრულდა, შეიცვალა %d ჩანაწერი.',
|
||||
'Error in query' => 'შეცდომა მოთხოვნაში',
|
||||
'Execute' => 'შესრულება',
|
||||
'Table' => 'ცხრილი',
|
||||
'Foreign keys' => 'გარე გასაღები',
|
||||
'Triggers' => 'ტრიგერები',
|
||||
'View' => 'ნახვა',
|
||||
'Unable to select the table' => 'ცხრილიდან ინფორმაცია ვერ მოვიპოვე',
|
||||
'Invalid CSRF token. Send the form again.' => 'უმოქმედო CSRF-ტოკენი. ფორმის კიდევ ერთხელ გაგზავნა.',
|
||||
'Comment' => 'კომენტარები',
|
||||
'Default values' => 'სტანდარტული მნიშვნელობა',
|
||||
'%d byte(s)' => '%d ბაიტი',
|
||||
'No commands to execute.' => 'შესასრულებელი ბრძანება არაა.',
|
||||
'Unable to upload a file.' => 'ფაილი არ აიტვირთა სერვერზე.',
|
||||
'File upload' => 'ფაილის ატვირთვა სერვერზე',
|
||||
'File uploads are disabled.' => 'ფაილის სერვერზე ატვირთვა გათიშულია.',
|
||||
'Routine has been called, %d row(s) affected.' => 'გამოძახებულია პროცედურა, შეიცვალა %d ჩანაწერი.',
|
||||
'Call' => 'გამოძახეება',
|
||||
'No extension' => 'გაფართოება არაა',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'არც ერთი მხარდაჭერილი გაფართოება არ მოიძებნა (%s).',
|
||||
'Session support must be enabled.' => 'ჩართული უნდა იყოს სესია.',
|
||||
'Session expired, please login again.' => 'სესიის მოქმედების დრო ამოიწურა, გაიარეთ ხელახალი ავტორიზაცია.',
|
||||
'Text length' => 'ტექსტის სიგრძე',
|
||||
'Foreign key has been dropped.' => 'გარე გასაღები წაიშალა.',
|
||||
'Foreign key has been altered.' => 'გარე გასაღები შეიცვალა.',
|
||||
'Foreign key has been created.' => 'გარე გასაღები შეიქმნა.',
|
||||
'Foreign key' => 'გარე გასაღები',
|
||||
'Change' => 'შეცვლა',
|
||||
'Source' => 'წყარო',
|
||||
'Target' => 'სამიზნე',
|
||||
'Add column' => 'ველის დამატება',
|
||||
'Alter' => 'შეცვლა',
|
||||
'Add foreign key' => 'გარე გასაღები დამატება',
|
||||
'ON DELETE' => 'წაშლისას',
|
||||
'ON UPDATE' => 'განახლებისას',
|
||||
'Index Type' => 'ინდექსის სახეობა',
|
||||
'Column (length)' => 'ველი (სიგრძე)',
|
||||
'View has been dropped.' => 'წარმოდგენა წაიშალა.',
|
||||
'View has been altered.' => 'წარმოდგენა შეიცვალა.',
|
||||
'View has been created.' => 'წარმოდგენა შეიქმნა.',
|
||||
'Alter view' => 'წარმოდგენის შეცვლა',
|
||||
'Create view' => 'წარმოდგენის შექმნა',
|
||||
'Name' => 'სახელი',
|
||||
'Process list' => 'პროცესების სია',
|
||||
'%d process(es) have been killed.' => 'გაითიშა %d პროცესი.',
|
||||
'Kill' => 'დასრულება',
|
||||
'Parameter name' => 'პარამეტრი',
|
||||
'Database schema' => 'ბაზის სქემა',
|
||||
'Create procedure' => 'პროცედურის შექმნა',
|
||||
'Create function' => 'ფუნქციის შექმნა',
|
||||
'Routine has been dropped.' => 'პროცედურა წაიშალა.',
|
||||
'Routine has been altered.' => 'პროცედურა შეიცვალა.',
|
||||
'Routine has been created.' => 'პროცედურა შეიქმნა.',
|
||||
'Alter function' => 'ფუნქციის შეცვლა',
|
||||
'Alter procedure' => 'პროცედურის შეცვლა',
|
||||
'Return type' => 'დაბრუნების სახეობა',
|
||||
'Add trigger' => 'ტრიგერის დამატება',
|
||||
'Trigger has been dropped.' => 'ტრიგერი წაიშალა.',
|
||||
'Trigger has been altered.' => 'ტრიგერი შეიცვალა.',
|
||||
'Trigger has been created.' => 'ტრიგერი შეიქმნა.',
|
||||
'Alter trigger' => 'ტრიგერის შეცვლა',
|
||||
'Create trigger' => 'ტრიგერის შექმნა',
|
||||
'Time' => 'დრო',
|
||||
'Event' => 'ღონისძიება',
|
||||
'%s version: %s through PHP extension %s' => 'ვერსია %s: %s PHP-გაფართოება %s',
|
||||
'%d row(s)' => '%d რიგი',
|
||||
'Remove' => 'წაშლა',
|
||||
'Are you sure?' => 'ნამდვილად?',
|
||||
'Privileges' => 'უფლებამოსილება',
|
||||
'Create user' => 'მომხმარებლის შექმან',
|
||||
'User has been dropped.' => 'მომხმარებელი წაიშალა.',
|
||||
'User has been altered.' => 'მომხმარებელი შეიცვალა.',
|
||||
'User has been created.' => 'მომხმარებელი შეიქმნა.',
|
||||
'Hashed' => 'ჰეშირებული',
|
||||
'Column' => 'ველი',
|
||||
'Routine' => 'პროცედურა',
|
||||
'Grant' => 'დაშვება',
|
||||
'Revoke' => 'შეზღუდვა',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST ინფორმაცია ძალიან დიდია. შეამცირეთ ზომა ან გაზარდეს POST ინფორმაციის ზომა პარამეტრებიდან %s.',
|
||||
'Logged as: %s' => 'შესული ხართ როგორც: %s',
|
||||
'Move up' => 'ზემოთ ატანა',
|
||||
'Move down' => 'ქვემოთ ჩატანა',
|
||||
'Functions' => 'ფუნქციები',
|
||||
'Aggregation' => 'აგრეგაცია',
|
||||
'Export' => 'ექსპორტი',
|
||||
'Output' => 'გამომავალი ინფორმაცია',
|
||||
'open' => 'გახსნა',
|
||||
'save' => 'შენახვა',
|
||||
'Format' => 'ფორმატი',
|
||||
'Tables' => 'ცხრილები',
|
||||
'Data' => 'ინფორმაცია',
|
||||
'Event has been dropped.' => 'ღონისძიება წაიშალა.',
|
||||
'Event has been altered.' => 'ღონისძიება შეიცვალა.',
|
||||
'Event has been created.' => 'ღონისძიება შეიქმნა.',
|
||||
'Alter event' => 'ღონისძიების შეცვლა',
|
||||
'Create event' => 'ღონისძიების შექმნა',
|
||||
'At given time' => 'მოცემულ დროში',
|
||||
'Every' => 'ყოველ',
|
||||
'Events' => 'ღონისძიება',
|
||||
'Schedule' => 'განრიგი',
|
||||
'Start' => 'დასაწყისი',
|
||||
'End' => 'დასასრული',
|
||||
'Status' => 'მდგომარეობა',
|
||||
'On completion preserve' => 'შენახვა დასრულებისას',
|
||||
'Tables and views' => 'ცხრილები და წარმოდგენები',
|
||||
'Data Length' => 'ინფორმაციის მოცულობა',
|
||||
'Index Length' => 'ინდექსების მოცულობა',
|
||||
'Data Free' => 'თავისუფალი სივრცე',
|
||||
'Collation' => 'კოდირება',
|
||||
'Analyze' => 'ანალიზი',
|
||||
'Optimize' => 'ოპტიმიზაცია',
|
||||
'Check' => 'შემოწმება',
|
||||
'Repair' => 'გასწორება',
|
||||
'Truncate' => 'გასუფთავება',
|
||||
'Tables have been truncated.' => 'ცხრილი გასუფთავდა.',
|
||||
'Rows' => 'რიგი',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'ცხრილი გადაადგილდა.',
|
||||
'Move to other database' => 'გადატანა სხვა ბაზაში',
|
||||
'Move' => 'გადატანა',
|
||||
'Engine' => 'ძრავი',
|
||||
'Save and continue edit' => 'შენახვა და ცვლილების გაგრძელება',
|
||||
'original' => 'საწყისი',
|
||||
'%d item(s) have been affected.' => 'შეიცვალა %d ჩანაწერი.',
|
||||
'Whole result' => 'სრული შედეგი',
|
||||
'Tables have been dropped.' => 'ცხრილები წაიშალა.',
|
||||
'Clone' => 'კლონირება',
|
||||
'Partition by' => 'დაყოფა',
|
||||
'Partitions' => 'დანაყოფები',
|
||||
'Partition name' => 'დანაყოფის სახელი',
|
||||
'Values' => 'პარამეტრები',
|
||||
'%d row(s) have been imported.' => 'დაიმპორტდა %d რიგი.',
|
||||
'Import' => 'იმპორტი',
|
||||
'Stop on error' => 'გაჩერება შეცდომისას',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'მიღწეულია დაშვებული ველების მაქსიმალური რაოდენობა, გაზარდეთ %s.',
|
||||
'anywhere' => 'ნებისმიერ ადგილას',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5.$3.$1',
|
||||
'[yyyy]-mm-dd' => 'დდ.თთ.[წწწწ]',
|
||||
'History' => 'ისტორია',
|
||||
'Variables' => 'ცვლადები',
|
||||
'Relations' => 'ურთიერთობა',
|
||||
'Run file' => 'ფაილის გაშვება',
|
||||
'Clear' => 'გასუფთავება',
|
||||
'Maximum allowed file size is %sB.' => 'ფაილის მაქსიმალური ზომა - %sB.',
|
||||
'Numbers' => 'ციფრები',
|
||||
'Date and time' => 'დრო და თარიღი',
|
||||
'Binary' => 'ორობითი',
|
||||
'Lists' => 'სია',
|
||||
'Editor' => 'რედაქტორი',
|
||||
'E-mail' => 'ელ. ფოსტა',
|
||||
'From' => 'ავტორი:',
|
||||
'Subject' => 'თემა',
|
||||
'Send' => 'გაგზავნა',
|
||||
'%d e-mail(s) have been sent.' => 'გაიგზავნა %d წერილი.',
|
||||
'Webserver file %s' => 'ფაილი %s ვებსერვერზე',
|
||||
'File does not exist.' => 'ასეთი ფაილი არ არსებობს.',
|
||||
'%d in total' => 'სულ %d',
|
||||
'Permanent login' => 'სისტემაში დარჩენა',
|
||||
'Databases have been dropped.' => 'ბაზა წაიშალა.',
|
||||
'Search data in tables' => 'ცხრილებში ძებნა',
|
||||
'Schema' => 'სქემა',
|
||||
'Alter schema' => 'სქემის შეცვლა',
|
||||
'Create schema' => 'ახალი სქემა',
|
||||
'Schema has been dropped.' => 'სქემა წაიშალა.',
|
||||
'Schema has been created.' => 'შეიქმნა ახალი სქემა.',
|
||||
'Schema has been altered.' => 'სქემა შეიცვალა.',
|
||||
'Sequences' => 'მიმდევრობა',
|
||||
'Create sequence' => 'მიმდევრობის შექმნა',
|
||||
'Alter sequence' => 'მიმდევრობის შეცვლა',
|
||||
'Sequence has been dropped.' => 'მიმდევრობა წაიშალა.',
|
||||
'Sequence has been created.' => 'მიმდევრობა შეიქმნა.',
|
||||
'Sequence has been altered.' => 'მიმდევრობა შეიცვალა.',
|
||||
'User types' => 'მომხმარებლის სახეობა',
|
||||
'Create type' => 'სახეობის შექმნა',
|
||||
'Alter type' => 'სახეობის შეცვლა',
|
||||
'Type has been dropped.' => 'სახეობა წაიშალა.',
|
||||
'Type has been created.' => 'სახეობა შეიქმნა.',
|
||||
'Ctrl+click on a value to modify it.' => 'შესაცვლელად გამოიყენეთ Ctrl+თაგვის ღილაკი.',
|
||||
'Use edit link to modify this value.' => 'ამ მნიშვნელობის შესაცვლელად გამოიყენეთ ბმული «შეცვლა».',
|
||||
'last' => 'ბოლო',
|
||||
'From server' => 'სერვერიდან',
|
||||
'System' => 'სისტემა',
|
||||
'Select data' => 'არჩევა',
|
||||
'Show structure' => 'სტრუქტურის ჩვენება',
|
||||
'empty' => 'ცარიელი',
|
||||
'Network' => 'ქსელი',
|
||||
'Geometry' => 'გეომეტრია',
|
||||
'File exists.' => 'ფაილი უკვე არსებობს.',
|
||||
'Attachments' => 'მიმაგრებული ფაილები',
|
||||
'%d query(s) executed OK.' => '%d მოთხოვნა შესრულდა.',
|
||||
'Show only errors' => 'მხოლოდ შეცდომები',
|
||||
'Refresh' => 'განახლება',
|
||||
'Invalid schema.' => 'არასწორი სქემა.',
|
||||
'Please use one of the extensions %s.' => 'გამოიყენეთ ერთ-ერთი გაფართოება %s.',
|
||||
'now' => 'ახლა',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'ცხრილი დაკოპირდა.',
|
||||
'Copy' => 'კოპირება',
|
||||
'Permanent link' => 'მუდმივი ბმული',
|
||||
'Edit all' => 'ყველას შეცვლა',
|
||||
'HH:MM:SS' => 'სთ:წთ:წმ',
|
||||
'Tables have been optimized.' => 'ცხრილებს გაუკეთდა ოპტიმიზაცია.',
|
||||
'Materialized view' => 'მატერიალური ხედი',
|
||||
'Vacuum' => 'ვაკუუმი',
|
||||
'Selected' => 'არჩეული',
|
||||
'File must be in UTF-8 encoding.' => 'ფაილი უნდა იყოს კოდირებაში UTF-8.',
|
||||
'Modify' => 'შეცვლა',
|
||||
'Loading' => 'ჩატვირთვა',
|
||||
'Load more data' => 'მეტი ინფორმაციის ჩატვირთვა',
|
||||
'ATTACH queries are not supported.' => 'ATTACH-მოთხოვნები არაა მხარდაჭერილი.',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'რიგების შეზღუდვა',
|
||||
'Default value' => 'სტანდარტული მნიშვნელობა',
|
||||
'Full table scan' => 'სრული ცხრილის ანალიზი',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'ძალიან ბევრჯერ შეგეშალათ მომხმარებელი და პაროლი. სცადეთ %d წუთში.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'ძირითად პაროლს ვადა გაუვიდა. <a href="https://www.adminer.org/en/extension/"%s>გამოიყენეთ</a> მეთოდი %s, რათა ის მუდმივი გახადოთ.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'ეს მოთხოვნა თქვენ თუ არ გაგიგზავნაით Adminer-იდან, დახურეთ ეს ფანჯარა..',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'დიდი ფაილი უნდა ატვირტოთ FTP-თი და შემდეგ გაუკეთოთ იმპორტი სერვერიდან.',
|
||||
'Size' => 'ზომა',
|
||||
'Compute' => 'გამოთვლა',
|
||||
'You are offline.' => 'არ გაგივლიათ ავტორიზაცია.',
|
||||
'You have no privileges to update this table.' => 'ამ ცხრილის განახლების უფლება არ გაქვთ.',
|
||||
'Saving' => 'შენახვა',
|
||||
'yes' => 'კი',
|
||||
'no' => 'არა',
|
||||
'Routines' => 'რუტინები',
|
||||
'Target table' => 'მიზნობრივი ცხრილი',
|
||||
'Strings' => 'ველები',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'საწყისი და მიზნობრივი ველები უნდა იყოს ერთიდაიგივე სახეობის, მიზნობრივ ველზე უნდა იყოს ინდექსი და უნდა არსებობდეს შესაბამისი ინფორმაცია.',
|
||||
'Drop %s?' => 'წაიშალოს %s?',
|
||||
'Warnings' => 'გაფრთხილება',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'უპაროლო წვდომა ბაზასთან არაა დაშვებული Adminer-ში, მეტი ინფორმაციისთვის ეწვიეთ <a href="https://www.adminer.org/en/password/"%s>ბმულს</a>.',
|
||||
'DB' => 'ბაზა',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'მადლობას გიხდით Adminer-ით სარგებლობისთვის, გადახედეთ ბმულს <a href="https://www.adminer.org/en/donation/">შემოწირულობა</a>.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'მოქმედება შესრულდება იგივე მომხმარებლით წარმატებული ავტორიზაციის შემდეგ.',
|
||||
'Connecting to privileged ports is not allowed.' => 'პრივილეგირებულ პორტთან წვდომა დაუშვებელია.',
|
||||
'There is a space in the input password which might be the cause.' => 'პაროლში არის გამოტოვება, შეიძლება ეს ქმნის პრობლემას.',
|
||||
'Unknown error.' => 'უცნობი შეცდომა.',
|
||||
'Database does not support password.' => 'ბაზაში არაა მხარდაჭერილი პაროლი.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'გათიშეთ %s ან ჩართეთ %s ან %s გაფართოება.',
|
||||
);
|
||||
280
adminer/lang/ko.inc.php
Normal file
280
adminer/lang/ko.inc.php
Normal file
@@ -0,0 +1,280 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
'%.3f s' => '%.3f 초',
|
||||
'%d byte(s)' => '%d 바이트',
|
||||
'%d e-mail(s) have been sent.' => '%d개 메일을 보냈습니다.',
|
||||
'%d in total' => '총 %d개',
|
||||
'%d item(s) have been affected.' => '%d개 항목을 갱신했습니다.',
|
||||
'%d process(es) have been killed.' => '%d개 프로세스를 강제 종료하였습니다.',
|
||||
'%d query(s) executed OK.' => '%d개 쿼리를 잘 실행했습니다.',
|
||||
'%d row(s) have been imported.' => '%d개 행을 가져 왔습니다.',
|
||||
'%d row(s)' => '%d개 행',
|
||||
'%s version: %s through PHP extension %s' => '%s 버전 %s, PHP 확장 %s',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||
'Action' => '실행',
|
||||
'Add column' => '열 추가',
|
||||
'Add foreign key' => '외부 키를 추가',
|
||||
'Add next' => '다음 추가',
|
||||
'Add trigger' => '트리거 추가',
|
||||
'Aggregation' => '집합',
|
||||
'Alter database' => '데이터베이스 변경',
|
||||
'Alter event' => '이벤트 변경',
|
||||
'Alter function' => '함수 변경',
|
||||
'Alter indexes' => '색인 변경',
|
||||
'Alter procedure' => '시저 변경',
|
||||
'Alter schema' => '스키마 변경',
|
||||
'Alter sequence' => '순서 변경',
|
||||
'Alter table' => '테이블 변경',
|
||||
'Alter trigger' => '트리거 변경',
|
||||
'Alter type' => '형 변경',
|
||||
'Alter view' => '보기 변경',
|
||||
'Alter' => '변경',
|
||||
'Analyze' => '분석',
|
||||
'anywhere' => '모든',
|
||||
'Are you sure?' => '실행 하시겠습니까?',
|
||||
'At given time' => '지정 시간',
|
||||
'Attachments' => '첨부 파일',
|
||||
'Auto Increment' => '자동 증가',
|
||||
'Binary' => '이진',
|
||||
'Call' => '호출',
|
||||
'Change' => '변경',
|
||||
'Check' => '확인',
|
||||
'Clear' => '삭제',
|
||||
'Clone' => '복제',
|
||||
'collation' => '정렬',
|
||||
'Collation' => '정렬',
|
||||
'Column (length)' => '열 (길이)',
|
||||
'Column name' => '열 이름',
|
||||
'Column' => '열',
|
||||
'Comment' => '주석',
|
||||
'Compute' => '계산하기',
|
||||
'Copy' => '복사',
|
||||
'Create database' => '데이터베이스 만들기',
|
||||
'Create event' => '만들기',
|
||||
'Create function' => '함수 만들기',
|
||||
'Create procedure' => '시저 만들기',
|
||||
'Create schema' => '스키마 추가',
|
||||
'Create sequence' => '시퀀스 만들기',
|
||||
'Create table' => '테이블 만들기',
|
||||
'Create trigger' => '트리거 만들기',
|
||||
'Create type' => '사용자 정의 형식 만들기',
|
||||
'Create user' => '사용자 만들기',
|
||||
'Create view' => '뷰 만들기',
|
||||
'Data Free' => '데이터 여유',
|
||||
'Data Length' => '데이터 길이',
|
||||
'Data' => '데이터',
|
||||
'Database has been altered.' => '데이터베이스를 변경했습니다.',
|
||||
'Database has been created.' => '데이터베이스를 만들었습니다.',
|
||||
'Database has been dropped.' => '데이터베이스를 삭제했습니다.',
|
||||
'Database has been renamed.' => '데이터베이스의 이름을 바꾸었습니다.',
|
||||
'Database schema' => '데이터베이스 구조',
|
||||
'database' => '데이터베이스',
|
||||
'Database' => '데이터베이스',
|
||||
'Databases have been dropped.' => '데이터베이스를 삭제했습니다.',
|
||||
'Date and time' => '시간',
|
||||
'Default values' => '기본값',
|
||||
'Delete' => '삭제',
|
||||
'descending' => '역순',
|
||||
'Drop' => '삭제',
|
||||
'E-mail' => '메일',
|
||||
'Edit all' => '모두 편집',
|
||||
'Edit' => '편집',
|
||||
'edit' => '편집',
|
||||
'Editor' => '에디터',
|
||||
'empty' => '비어있음',
|
||||
'End' => '종료',
|
||||
'engine' => '엔진',
|
||||
'Engine' => '엔진',
|
||||
'Error in query' => '쿼리의 오류',
|
||||
'Event has been altered.' => '변경했습니다.',
|
||||
'Event has been created.' => '만들었습니다.',
|
||||
'Event has been dropped.' => '삭제했습니다.',
|
||||
'Event' => '이벤트',
|
||||
'Events' => '이벤트',
|
||||
'Every' => '매 번',
|
||||
'Execute' => '실행',
|
||||
'Export' => '내보내기',
|
||||
'File does not exist.' => '파일이 존재하지 않습니다.',
|
||||
'File exists.' => '파일이 이미 있습니다.',
|
||||
'File upload' => '파일 올리기',
|
||||
'File uploads are disabled.' => '파일 업로드가 잘못되었습니다.',
|
||||
'Foreign key has been altered.' => '외부 키를 변경했습니다.',
|
||||
'Foreign key has been created.' => '외부 키를 만들었습니다.',
|
||||
'Foreign key has been dropped.' => '외부 키를 제거했습니다.',
|
||||
'Foreign key' => '외부 키',
|
||||
'Foreign keys' => '외부 키',
|
||||
'Format' => '형식',
|
||||
'From server' => '서버에서 실행',
|
||||
'From' => '보낸 사람',
|
||||
'Functions' => '함수',
|
||||
'Geometry' => '기하 형',
|
||||
'Grant' => '권한 부여',
|
||||
'Hashed' => 'Hashed',
|
||||
'HH:MM:SS' => '시:분:초',
|
||||
'History' => '이력',
|
||||
'Import' => '가져 오기',
|
||||
'Index Length' => '색인 길이',
|
||||
'Index Type' => '색인 형',
|
||||
'Indexes have been altered.' => '색인을 변경했습니다.',
|
||||
'Indexes' => '색인',
|
||||
'Insert' => '삽입',
|
||||
'Invalid credentials.' => '잘못된 로그인',
|
||||
'Invalid CSRF token. Send the form again.' => '잘못된 CSRF 토큰입니다. 다시 보내주십시오.',
|
||||
'Invalid database.' => '잘못된 데이터베이스입니다.',
|
||||
'Invalid schema.' => '잘못된 스키마입니다.',
|
||||
'Item has been deleted.' => '항목을 삭제했습니다.',
|
||||
'Item has been updated.' => '항목을 갱신했습니다.',
|
||||
'Item%s has been inserted.' => '%s 항목을 삽입했습니다.',
|
||||
'Kill' => '강제 종료',
|
||||
'Language' => '언어',
|
||||
'last' => '마지막',
|
||||
'Length' => '길이',
|
||||
'Limit rows' => '행 제약',
|
||||
'Limit' => '제약',
|
||||
'Lists' => '목록',
|
||||
'Load more data' => '더 많은 데이터 부르기',
|
||||
'Loading' => '부르는 중',
|
||||
'Logged as: %s' => '다음으로 로그인했습니다: %s',
|
||||
'Login' => '로그인',
|
||||
'Logout successful.' => '로그아웃을 성공했습니다.',
|
||||
'Logout' => '로그아웃',
|
||||
'ltr' => 'ltr',
|
||||
'Maximum allowed file size is %sB.' => '파일의 최대 크기 %sB',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '정의 가능한 최대 필드 수를 초과했습니다. %s(을)를 늘리십시오.',
|
||||
'Modify' => '수정',
|
||||
'Move down' => '아래로',
|
||||
'Move to other database' => '다른 데이터베이스로 이동',
|
||||
'Move up' => '위로',
|
||||
'Move' => '이동',
|
||||
'Name' => '이름',
|
||||
'Network' => '네트워크 형',
|
||||
'New item' => '항목 만들기',
|
||||
'No commands to execute.' => '실행할 수 있는 명령이 없습니다.',
|
||||
'No extension' => '확장이 없습니다.',
|
||||
'No rows.' => '행이 없습니다.',
|
||||
'No tables.' => '테이블이 없습니다.',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'PHP 확장(%s)이 설치되어 있지 않습니다.',
|
||||
'now' => '현재 시간',
|
||||
'Numbers' => '숫자',
|
||||
'On completion preserve' => '완성 후 저장',
|
||||
'ON DELETE' => '지울 때',
|
||||
'ON UPDATE' => '업데이트할 때',
|
||||
'open' => '열',
|
||||
'Optimize' => '최적화',
|
||||
'Options' => '설정',
|
||||
'original' => '원본',
|
||||
'Output' => '출력',
|
||||
'overwrite' => '덮어쓰기',
|
||||
'Page' => '페이지',
|
||||
'Parameter name' => '매개변수 이름',
|
||||
'Partition by' => '파티션',
|
||||
'Partition name' => '파티션 이름',
|
||||
'Partitions' => '파티션',
|
||||
'Password' => '비밀번호',
|
||||
'Permanent link' => '영구적으로 링크',
|
||||
'Permanent login' => '영구적으로 로그인',
|
||||
'Please use one of the extensions %s.' => '확장 %s 중 하나를 사용하십시오.',
|
||||
'Privileges' => '권한',
|
||||
'Process list' => '프로세스 목록',
|
||||
'Query executed OK, %d row(s) affected.' => '쿼리를 잘 실행했습니다. %d행을 변경했습니다.',
|
||||
'Refresh' => '새로 고침',
|
||||
'Relations' => '관계',
|
||||
'Remove' => '제거',
|
||||
'Repair' => '복구',
|
||||
'Return type' => '반환 형식',
|
||||
'Revoke' => '권한 취소',
|
||||
'Routine has been altered.' => '루틴을 변경했습니다.',
|
||||
'Routine has been called, %d row(s) affected.' => '루틴을 호출했습니다. %d 행을 변경했습니다.',
|
||||
'Routine has been created.' => '루틴을 추가했습니다.',
|
||||
'Routine has been dropped.' => '루틴을 제거했습니다.',
|
||||
'Routine' => '루틴',
|
||||
'Routines' => '루틴',
|
||||
'Rows' => '행',
|
||||
'Run file' => '파일을 실행',
|
||||
'Save and continue edit' => '저장하고 계속 편집하기',
|
||||
'Save and insert next' => '저장하고 다음에 추가',
|
||||
'Save' => '저장',
|
||||
'save' => '저장',
|
||||
'Schedule' => '예약',
|
||||
'Schema has been altered.' => '스키마를 변경했습니다.',
|
||||
'Schema has been created.' => '스키마를 추가했습니다.',
|
||||
'Schema has been dropped.' => '스키마를 삭제했습니다.',
|
||||
'Schema' => '스키마',
|
||||
'Search data in tables' => '테이블 내 데이터 검색',
|
||||
'Search' => '검색',
|
||||
'Select data' => '데이터를 선택하십시오.',
|
||||
'Select database' => '데이터베이스를 선택하십시오.',
|
||||
'Select' => '선택',
|
||||
'select' => '선택',
|
||||
'Selected' => '선택됨',
|
||||
'Send' => '보내기',
|
||||
'Sequence has been altered.' => '시퀀스를 변경했습니다.',
|
||||
'Sequence has been created.' => '시퀀스를 추가했습니다.',
|
||||
'Sequence has been dropped.' => '시퀀스를 제거했습니다.',
|
||||
'Sequences' => '시퀀스',
|
||||
'Server' => '서버',
|
||||
'Session expired, please login again.' => '세션이 만료되었습니다. 다시 로그인하십시오.',
|
||||
'Session support must be enabled.' => '세션 지원을 사용해야만 합니다.',
|
||||
'Show only errors' => '오류 만 표시',
|
||||
'Show structure' => '구조 표시',
|
||||
'Size' => '크기',
|
||||
'Sort' => '정렬',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '원본과 대상 열은 동일한 데이터 형식이어야만 합니다. 목표 열에 색인과 데이터가 존재해야만 합니다.',
|
||||
'Source' => '소스',
|
||||
'SQL command' => 'SQL 명령',
|
||||
'Start' => '시작',
|
||||
'Status' => '상태',
|
||||
'Stop on error' => '오류의 경우 중지',
|
||||
'Strings' => '문자열',
|
||||
'Subject' => '제목',
|
||||
'System' => '데이터베이스 형식',
|
||||
'Table has been altered.' => '테이블을 변경했습니다.',
|
||||
'Table has been created.' => '테이블을 만들었습니다.',
|
||||
'Table has been dropped.' => '테이블을 삭제했습니다.',
|
||||
'Table name' => '테이블 이름',
|
||||
'Table' => '테이블',
|
||||
'Tables and views' => '테이블과 뷰',
|
||||
'Tables have been copied.' => '테이블을 복사했습니다',
|
||||
'Tables have been dropped.' => '테이블을 삭제했습니다.',
|
||||
'Tables have been moved.' => '테이블을 옮겼습니다.',
|
||||
'Tables have been truncated.' => '테이블의 데이터 내용만 지웠습니다.',
|
||||
'Tables' => '테이블',
|
||||
'Target table' => '테이블',
|
||||
'Target' => '타겟',
|
||||
'Text length' => '문자열의 길이',
|
||||
'Time' => '시간',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 데이터가 너무 큽니다. 데이터 크기를 줄이거나 %s 설정을 늘리십시오.',
|
||||
'Trigger has been altered.' => '트리거를 변경했습니다.',
|
||||
'Trigger has been created.' => '트리거를 추가했습니다.',
|
||||
'Trigger has been dropped.' => '트리거를 제거했습니다.',
|
||||
'Triggers' => '트리거',
|
||||
'Truncate' => '데이터 내용만 지우기',
|
||||
'Type has been created.' => '유형을 추가했습니다.',
|
||||
'Type has been dropped.' => '유형을 삭제했습니다.',
|
||||
'Type' => '형',
|
||||
'Unable to select the table' => '테이블을 선택할 수 없습니다.',
|
||||
'Unable to upload a file.' => '파일을 업로드 할 수 없습니다.',
|
||||
'Use edit link to modify this value.' => '이 값을 수정하려면 편집 링크를 사용하십시오.',
|
||||
'Use' => '사용',
|
||||
'User has been altered.' => '사용자를 변경했습니다.',
|
||||
'User has been created.' => '사용자를 만들었습니다.',
|
||||
'User has been dropped.' => '사용자를 제거했습니다.',
|
||||
'Username' => '사용자이름',
|
||||
'Vacuum' => '청소',
|
||||
'Values' => '값',
|
||||
'Variables' => '변수',
|
||||
'View has been altered.' => '보기를 변경했습니다.',
|
||||
'View has been created.' => '보기를 만들었습니다.',
|
||||
'View has been dropped.' => '보기를 삭제했습니다.',
|
||||
'View' => '보기',
|
||||
'Warnings' => '경고',
|
||||
'Webserver file %s' => '웹서버 파일 %s',
|
||||
'Whole result' => '모든 결과',
|
||||
'yes' => '네',
|
||||
'You are offline.' => '오프라인입니다.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => '큰 SQL 파일은 FTP를 통하여 업로드하여 서버에서 가져올 수 있습니다.',
|
||||
'You have no privileges to update this table.' => '이 테이블을 업데이트할 권한이 없습니다.',
|
||||
);
|
||||
@@ -66,7 +66,6 @@ $translations = array(
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Per daug POST duomenų. Sumažinkite duomenų kiekį arba padidinkite konfigūracijos nustatymą %s.',
|
||||
|
||||
'Export' => 'Eksportas',
|
||||
'Dump' => 'Eksportuoti',
|
||||
'Output' => 'Išvestis',
|
||||
'open' => 'atidaryti',
|
||||
'save' => 'išsaugoti',
|
||||
@@ -78,7 +77,6 @@ $translations = array(
|
||||
'Use' => 'Naudoti',
|
||||
'Select database' => 'Pasirinkti duomenų bazę',
|
||||
'Invalid database.' => 'Neteisinga duomenų bazė.',
|
||||
'Create new database' => 'Sukurti naują duomenų bazę',
|
||||
'Database has been dropped.' => 'Duomenų bazė panaikinta.',
|
||||
'Databases have been dropped.' => 'Duomenų bazės panaikintos.',
|
||||
'Database has been created.' => 'Duomenų bazė sukurta.',
|
||||
@@ -93,6 +91,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Variklis',
|
||||
'Collation' => 'Lyginimas',
|
||||
'Data Length' => 'Duomenų ilgis',
|
||||
@@ -144,7 +143,6 @@ $translations = array(
|
||||
'No tables.' => 'Nėra lentelių.',
|
||||
'Alter table' => 'Redaguoti lentelę',
|
||||
'Create table' => 'Sukurti lentelę',
|
||||
'Create new table' => 'Sukurti naują lentelę',
|
||||
'Table has been dropped.' => 'Lentelė pašalinta.',
|
||||
'Tables have been dropped.' => 'Lentelės pašalintos.',
|
||||
'Table has been altered.' => 'Lentelė pakeista.',
|
||||
@@ -165,7 +163,7 @@ $translations = array(
|
||||
'Move up' => 'Perkelti į viršų',
|
||||
'Move down' => 'Perkelti žemyn',
|
||||
'Remove' => 'Pašalinti',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Viršytas maksimalus leidžiamų stulpelių kiekis. Padidinkite %s ir %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Viršytas maksimalus leidžiamų stulpelių kiekis. Padidinkite %s.',
|
||||
|
||||
'Partition by' => 'Skirstyti pagal',
|
||||
'Partitions' => 'Skirsniai',
|
||||
@@ -231,8 +229,7 @@ $translations = array(
|
||||
'%d row(s)' => array('%d įrašas', '%d įrašai', '%d įrašų'),
|
||||
'Page' => 'Puslapis',
|
||||
'last' => 'paskutinis',
|
||||
'Last page' => 'Paskutinis puslapis',
|
||||
'whole result' => 'visas rezultatas',
|
||||
'Whole result' => 'Visas rezultatas',
|
||||
'%d byte(s)' => array('%d baitas', '%d baigai', '%d baitų'),
|
||||
|
||||
'Import' => 'Importas',
|
||||
@@ -295,7 +292,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Schema pašalinta.',
|
||||
'Schema has been created.' => 'Schema sukurta.',
|
||||
'Schema has been altered.' => 'Schema pakeista.',
|
||||
'schema' => 'schema',
|
||||
'Schema' => 'Schema',
|
||||
'Invalid schema.' => 'Neteisinga schema.',
|
||||
|
||||
|
||||
340
adminer/lang/ms.inc.php
Normal file
340
adminer/lang/ms.inc.php
Normal file
@@ -0,0 +1,340 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'Sistem',
|
||||
'Server' => 'Pelayan',
|
||||
'Username' => 'Nama pengguna',
|
||||
'Password' => 'Kata laluan',
|
||||
'Permanent login' => 'Log masuk kekal',
|
||||
'Login' => 'Log masuk',
|
||||
'Logout' => 'Log keluar',
|
||||
'Logged as: %s' => 'Log masuk sebagai: %s',
|
||||
'Logout successful.' => 'Log keluar berjaya.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Terima kasih kerana menggunakan Adminer, pertimbangkan untuk <a href="https://www.adminer.org/en/donation/">menderma</a>.',
|
||||
'Invalid credentials.' => 'Akses tidak sah.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'Terlalu banyak percubaan log masuk yang gagal, sila cuba lagi dalam masa %d minit.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Kata laluan utama telah luput. <a href="https://www.adminer.org/en/extension/"%s>Gunakan</a> cara %s untuk mengekalkannya.',
|
||||
'Language' => 'Bahasa',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF tidak sah. Sila hantar borang sekali lagi.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Jika anda tidak menghantar permintaan ini dari Adminer sila tutup halaman ini.',
|
||||
'No extension' => 'Tiada sambungan',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Sambungan PHP yang (%s) disokong tidak wujud.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Penyambungan ke port yang istimewa tidak dibenarkan.',
|
||||
'Session support must be enabled.' => 'Sokongan sesi perlu diaktifkan.',
|
||||
'Session expired, please login again.' => 'Sesi telah luput, sila log masuk kembali.',
|
||||
'%s version: %s through PHP extension %s' => 'Versi %s: %s melalui sambungan PHP %s',
|
||||
'Refresh' => 'Segar kembali',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Keistimewaan',
|
||||
'Create user' => 'Bina pengguna',
|
||||
'User has been dropped.' => 'Pengguna telah dijatuhkan.',
|
||||
'User has been altered.' => 'Pengguna telah diubah.',
|
||||
'User has been created.' => 'Pengguna telah dibuat.',
|
||||
'Hashed' => 'Hashed',
|
||||
'Column' => 'Kolum',
|
||||
'Routine' => 'Rutin',
|
||||
'Grant' => 'Beri',
|
||||
'Revoke' => 'Batal',
|
||||
|
||||
'Process list' => 'Senarai proses',
|
||||
'%d process(es) have been killed.' => '%d proses telah dihentikan.',
|
||||
'Kill' => 'Henti',
|
||||
|
||||
'Variables' => 'Pembolehubah',
|
||||
'Status' => 'Status',
|
||||
|
||||
'SQL command' => 'Arahan SQL',
|
||||
'%d query(s) executed OK.' => '%d query berjaya dilaksanakan.',
|
||||
'Query executed OK, %d row(s) affected.' => 'Query berjaya dilaksanakan, %d baris terjejas.',
|
||||
'No commands to execute.' => 'Tiada arahan untuk dilaksanakan.',
|
||||
'Error in query' => 'Ralat pada query',
|
||||
'ATTACH queries are not supported.' => 'Query berikut tidak disokong.',
|
||||
'Execute' => 'Laksana',
|
||||
'Stop on error' => 'Berhenti jika ralat',
|
||||
'Show only errors' => 'Paparkan jika ralat',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Sejarah',
|
||||
'Clear' => 'Bersih',
|
||||
'Edit all' => 'Ubah semua',
|
||||
|
||||
'File upload' => 'Muat naik fail',
|
||||
'From server' => 'Dari pelayan',
|
||||
'Webserver file %s' => 'Fail pelayan sesawang %s',
|
||||
'Run file' => 'Jalankan fail',
|
||||
'File does not exist.' => 'Fail tidak wujud.',
|
||||
'File uploads are disabled.' => 'Muat naik fail dihalang.',
|
||||
'Unable to upload a file.' => 'Muat naik fail gagal.',
|
||||
'Maximum allowed file size is %sB.' => 'Saiz fail maksimum yang dibenarkan adalah %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Data POST terlalu besar. Kecilkan data atau tingkatkan tetapan %s.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Anda boleh muat naik fail SQL yang besar melalui FTP dan import melalui pelayan.',
|
||||
'You are offline.' => 'Anda sedang offline.',
|
||||
|
||||
'Export' => 'Eksport',
|
||||
'Output' => 'Pengeluaran',
|
||||
'open' => 'buka',
|
||||
'save' => 'simpan',
|
||||
'Saving' => 'Menyimpan',
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Data',
|
||||
|
||||
'Database' => 'Pangkalan data',
|
||||
'database' => 'pangkalan data',
|
||||
'Use' => 'Guna',
|
||||
'Select database' => 'Pilih pangkalan data',
|
||||
'Invalid database.' => 'Pangkalan data tidak sah.',
|
||||
'Database has been dropped.' => 'Pangkalan data telah dijatuhkan.',
|
||||
'Databases have been dropped.' => 'Pangkalan data telah dijatuhkan.',
|
||||
'Database has been created.' => 'Pangkalan data telah dibuat.',
|
||||
'Database has been renamed.' => 'Pangkalan data telah ditukar nama.',
|
||||
'Database has been altered.' => 'Pangkalan data telah diubah.',
|
||||
'Alter database' => 'Ubah pangkalan data',
|
||||
'Create database' => 'Bina pangkalan data',
|
||||
'Database schema' => 'Skema pangkalan data',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Pautan kekal',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Enjin',
|
||||
'Collation' => 'Collation',
|
||||
'Data Length' => 'Panjang Data',
|
||||
'Index Length' => 'Panjang Indeks',
|
||||
'Data Free' => 'Data Free',
|
||||
'Rows' => 'Baris',
|
||||
'%d in total' => '%d secara keseluruhan',
|
||||
'Analyze' => 'Menganalisis',
|
||||
'Optimize' => 'Mengoptimum',
|
||||
'Vacuum' => 'Vacuum',
|
||||
'Check' => 'Periksa',
|
||||
'Repair' => 'Baiki',
|
||||
'Truncate' => 'Memangkas',
|
||||
'Tables have been truncated.' => 'Jadual telah dimangkaskan.',
|
||||
'Move to other database' => 'Pindahkan ke pangkalan data yang lain',
|
||||
'Move' => 'Pindah',
|
||||
'Tables have been moved.' => 'Jadual telah dipindahkan.',
|
||||
'Copy' => 'Salin',
|
||||
'Tables have been copied.' => 'Jadual telah disalin.',
|
||||
|
||||
'Routines' => 'Rutin',
|
||||
'Routine has been called, %d row(s) affected.' => 'Rutin telah dipanggil, %d baris terjejas.',
|
||||
'Call' => 'Panggil',
|
||||
'Parameter name' => 'Nama pembolehubah',
|
||||
'Create procedure' => 'Bina prosedur',
|
||||
'Create function' => 'Bina fungsi',
|
||||
'Routine has been dropped.' => 'Rutin telah dijatuhkan.',
|
||||
'Routine has been altered.' => 'Rutin telah diubah.',
|
||||
'Routine has been created.' => 'Rutin telah dibuat.',
|
||||
'Alter function' => 'Ubah fungsi',
|
||||
'Alter procedure' => 'Ubah prosedur',
|
||||
'Return type' => 'Jenis Return',
|
||||
|
||||
'Events' => 'Peristiwa',
|
||||
'Event has been dropped.' => 'Peristiwa telah dijatuhkan.',
|
||||
'Event has been altered.' => 'Peristiwa telah diubah.',
|
||||
'Event has been created.' => 'Peristiwa telah dibuat.',
|
||||
'Alter event' => 'Ubah peristiwa',
|
||||
'Create event' => 'Bina peristiwa',
|
||||
'At given time' => 'Pada masa tersebut',
|
||||
'Every' => 'Setiap',
|
||||
'Schedule' => 'Jadual',
|
||||
'Start' => 'Mula',
|
||||
'End' => 'Habis',
|
||||
'On completion preserve' => 'Dalam melestarikan penyelesaian',
|
||||
|
||||
'Tables' => 'Jadual',
|
||||
'Tables and views' => 'Jadual dan pandangan',
|
||||
'Table' => 'Jadual',
|
||||
'No tables.' => 'Tiada jadual.',
|
||||
'Alter table' => 'Ubah jadual',
|
||||
'Create table' => 'Bina jadual',
|
||||
'Table has been dropped.' => 'Jadual telah dijatuhkan.',
|
||||
'Tables have been dropped.' => 'Jadual telah dijatuhkan.',
|
||||
'Tables have been optimized.' => 'Jadual telah dioptimumkan.',
|
||||
'Table has been altered.' => 'Jadual telah diubah.',
|
||||
'Table has been created.' => 'Jadual telah dibuat.',
|
||||
'Table name' => 'Nama jadual',
|
||||
'Show structure' => 'Paparkan struktur',
|
||||
'engine' => 'enjin',
|
||||
'collation' => 'collation',
|
||||
'Column name' => 'Nama kolum',
|
||||
'Type' => 'Jenis',
|
||||
'Length' => 'Kepanjangan',
|
||||
'Auto Increment' => 'Kenaikan Auto',
|
||||
'Options' => 'Pilihan',
|
||||
'Comment' => 'Komen',
|
||||
'Default value' => 'Nilai lalai',
|
||||
'Default values' => 'Nilai lalai',
|
||||
'Drop' => 'Jatuh',
|
||||
'Drop %s?' => 'Jatuhkan %s?',
|
||||
'Are you sure?' => 'Anda pasti?',
|
||||
'Size' => 'Saiz',
|
||||
'Compute' => 'Kira',
|
||||
'Move up' => 'Gerak ke atas',
|
||||
'Move down' => 'Gerak ke bawah',
|
||||
'Remove' => 'Buang',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Bilangan medan telah melebihi had yang dibenarkan. Sila tingkatkan %s.',
|
||||
|
||||
'Partition by' => 'Partition mengikut',
|
||||
'Partitions' => 'Partition',
|
||||
'Partition name' => 'Nama partition',
|
||||
'Values' => 'Nilai',
|
||||
|
||||
'View' => 'Papar',
|
||||
'Materialized view' => 'Paparan yang menjadi kenyataan',
|
||||
'View has been dropped.' => 'Paparan telah dijatuhkan.',
|
||||
'View has been altered.' => 'Paparan telah diubah.',
|
||||
'View has been created.' => 'Paparan telah dibuat.',
|
||||
'Alter view' => 'Ubah paparan',
|
||||
'Create view' => 'Bina paparan',
|
||||
|
||||
'Indexes' => 'Indeks',
|
||||
'Indexes have been altered.' => 'Indeks telah diubah.',
|
||||
'Alter indexes' => 'Ubah indeks',
|
||||
'Add next' => 'Tambah yang seterusnya',
|
||||
'Index Type' => 'Jenis Indeks',
|
||||
'Column (length)' => 'Kolum (kepanjangan)',
|
||||
|
||||
'Foreign keys' => 'Kunci asing',
|
||||
'Foreign key' => 'Kunci asing',
|
||||
'Foreign key has been dropped.' => 'Kunci asing telah dijatuhkan.',
|
||||
'Foreign key has been altered.' => 'Kunci asing telah diubah.',
|
||||
'Foreign key has been created.' => 'Kunci asing telah dibuat.',
|
||||
'Target table' => 'Jadual sasaran',
|
||||
'Change' => 'Tukar',
|
||||
'Source' => 'Sumber',
|
||||
'Target' => 'Sasaran',
|
||||
'Add column' => 'Tambah kolum',
|
||||
'Alter' => 'Ubah',
|
||||
'Add foreign key' => 'Tambah kunci asing',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kolum sumber dan sasaran perlu mempunyai jenis data yang sama, indeks diperlukan pada kolum sasaran dan data yang dirujuk wujud.',
|
||||
|
||||
'Triggers' => ' Pencetus',
|
||||
'Add trigger' => 'Tambah pencetus',
|
||||
'Trigger has been dropped.' => 'Pencetus telah dijatuhkan.',
|
||||
'Trigger has been altered.' => 'Pencetus telah diubah.',
|
||||
'Trigger has been created.' => 'Pencetus telah dibuat.',
|
||||
'Alter trigger' => 'Ubah pencetus',
|
||||
'Create trigger' => 'Buat pencetus',
|
||||
'Time' => 'Masa',
|
||||
'Event' => 'Peristiwa',
|
||||
'Name' => 'Nama',
|
||||
|
||||
'select' => 'pilih',
|
||||
'Select' => 'Pilih',
|
||||
'Select data' => 'Pilih data',
|
||||
'Functions' => 'Fungsi',
|
||||
'Aggregation' => 'Pengagregatan',
|
||||
'Search' => 'Cari',
|
||||
'anywhere' => 'di mana-mana',
|
||||
'Search data in tables' => 'Cari data dalam jadual',
|
||||
'Sort' => 'Susun',
|
||||
'descending' => 'menurun',
|
||||
'Limit' => 'Had',
|
||||
'Limit rows' => 'Had baris',
|
||||
'Text length' => 'Kepanjangan teks',
|
||||
'Action' => 'Aksi',
|
||||
'Full table scan' => 'Imbasan penuh jadual',
|
||||
'Unable to select the table' => 'Pemilihan jadual tidak berjaya',
|
||||
'No rows.' => 'Tiada baris.',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => '%d baris',
|
||||
'Page' => 'Halaman',
|
||||
'last' => 'akhir',
|
||||
'Load more data' => 'Load lebih data',
|
||||
'Loading' => 'Loading',
|
||||
'Whole result' => 'Keputusan keseluruhan',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
|
||||
'Import' => 'Import',
|
||||
'%d row(s) have been imported.' => '%d baris telah diimport.',
|
||||
'File must be in UTF-8 encoding.' => 'Fail mesti dalam pengekodan UTF-8.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Pinda',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+click pada nilai untuk meminda.',
|
||||
'Use edit link to modify this value.' => 'Guna pautan ubah untuk meminda nilai ini.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Item%s telah dimasukkan.',
|
||||
'Item has been deleted.' => 'Item telah dipadamkan.',
|
||||
'Item has been updated.' => 'Item telah dikemaskini.',
|
||||
'%d item(s) have been affected.' => '%d item telah terjejas.',
|
||||
'New item' => 'Item baru',
|
||||
'original' => 'asli',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'kosong',
|
||||
'edit' => 'ubah',
|
||||
'Edit' => 'Ubah',
|
||||
'Insert' => 'Masukkan',
|
||||
'Save' => 'Simpan',
|
||||
'Save and continue edit' => 'Simpan dan sambung ubah',
|
||||
'Save and insert next' => 'Simpan dan masukkan seterusnya',
|
||||
'Selected' => 'Terpilih',
|
||||
'Clone' => 'Klon',
|
||||
'Delete' => 'Padam',
|
||||
'You have no privileges to update this table.' => 'Anda tidak mempunyai keistimewaan untuk mengemaskini jadual ini.',
|
||||
|
||||
'E-mail' => 'Emel',
|
||||
'From' => 'Dari',
|
||||
'Subject' => 'Subjek',
|
||||
'Attachments' => 'Lampiran',
|
||||
'Send' => 'Hantar',
|
||||
'%d e-mail(s) have been sent.' => '%d emel telah dihantar.',
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Nombor',
|
||||
'Date and time' => 'Tarikh dan masa',
|
||||
'Strings' => 'String',
|
||||
'Binary' => 'Binari',
|
||||
'Lists' => 'Senarai',
|
||||
'Network' => 'Rangkaian',
|
||||
'Geometry' => 'Geometri',
|
||||
'Relations' => 'Hubungan',
|
||||
|
||||
'Editor' => 'Editor',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'sekarang',
|
||||
'yes' => 'ya',
|
||||
'no' => 'tidak',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Fail wujud.',
|
||||
'Please use one of the extensions %s.' => 'Sila guna salah satu sambungan %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Ubah skema',
|
||||
'Create schema' => 'Buat skema',
|
||||
'Schema has been dropped.' => 'Skema telah dijatuhkan.',
|
||||
'Schema has been created.' => 'Skema telah dibuat.',
|
||||
'Schema has been altered.' => 'Skema telah diubah.',
|
||||
'Schema' => 'Skema',
|
||||
'Invalid schema.' => 'Skema tidak sah.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Turutan',
|
||||
'Create sequence' => 'Buat turutan',
|
||||
'Sequence has been dropped.' => 'Turutan telah dijatuhkan.',
|
||||
'Sequence has been created.' => 'Turutan telah dibuat.',
|
||||
'Sequence has been altered.' => 'Turutan telah diubah.',
|
||||
'Alter sequence' => 'Ubah turutan',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Jenis pengguna',
|
||||
'Create type' => 'Buat jenis',
|
||||
'Type has been dropped.' => 'Jenis telah dijatuhkan.',
|
||||
'Type has been created.' => 'Jenis telah dibuat.',
|
||||
'Alter type' => 'Ubah jenis',
|
||||
);
|
||||
@@ -8,7 +8,6 @@ $translations = array(
|
||||
'Password' => 'Wachtwoord',
|
||||
'Select database' => 'Database selecteren',
|
||||
'Invalid database.' => 'Ongeldige database.',
|
||||
'Create new database' => 'Nieuwe database',
|
||||
'Table has been dropped.' => 'Tabel verwijderd.',
|
||||
'Table has been altered.' => 'Tabel aangepast.',
|
||||
'Table has been created.' => 'Tabel aangemaakt.',
|
||||
@@ -32,13 +31,11 @@ $translations = array(
|
||||
'Alter database' => 'Database aanpassen',
|
||||
'Create database' => 'Database aanmaken',
|
||||
'SQL command' => 'SQL opdracht',
|
||||
'Dump' => 'Exporteer',
|
||||
'Logout' => 'Uitloggen',
|
||||
'database' => 'database',
|
||||
'Use' => 'Gebruik',
|
||||
'No tables.' => 'Geen tabellen.',
|
||||
'select' => 'kies',
|
||||
'Create new table' => 'Nieuwe tabel',
|
||||
'Item has been deleted.' => 'Item verwijderd.',
|
||||
'Item has been updated.' => 'Item aangepast.',
|
||||
'Item%s has been inserted.' => 'Item%s toegevoegd.',
|
||||
@@ -63,7 +60,7 @@ $translations = array(
|
||||
'Action' => 'Acties',
|
||||
'edit' => 'bewerk',
|
||||
'Page' => 'Pagina',
|
||||
'Query executed OK, %d row(s) affected.' => array('Query uitgevoerd, %d rij geraakt.', 'Query uitgevoerd, %d rijen geraakt.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Query uitgevoerd, %d rij geraakt.', 'Query uitgevoerd, %d rijen beïnvloed.'),
|
||||
'Error in query' => 'Fout in query',
|
||||
'Execute' => 'Uitvoeren',
|
||||
'Table' => 'Tabel',
|
||||
@@ -181,6 +178,7 @@ $translations = array(
|
||||
'Data Free' => 'Data Vrij',
|
||||
'Rows' => 'Rijen',
|
||||
',' => '.',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analyseer',
|
||||
'Optimize' => 'Optimaliseer',
|
||||
'Check' => 'Controleer',
|
||||
@@ -189,9 +187,9 @@ $translations = array(
|
||||
'Move to other database' => 'Verplaats naar andere database',
|
||||
'Move' => 'Verplaats',
|
||||
'%d item(s) have been affected.' => array('%d item aangepast.', '%d items aangepast.'),
|
||||
'whole result' => 'volledig resultaat',
|
||||
'Whole result' => 'Volledig resultaat',
|
||||
'Clone' => 'Dupliceer',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Maximum aantal velden bereikt. Verhoog %s en %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maximum aantal velden bereikt. Verhoog %s.',
|
||||
'Partition by' => 'Partitioneren op',
|
||||
'Partitions' => 'Partities',
|
||||
'Partition name' => 'Partitie naam',
|
||||
@@ -226,7 +224,6 @@ $translations = array(
|
||||
'%d in total' => '%d in totaal',
|
||||
'Permanent login' => 'Blijf aangemeld',
|
||||
'Search data in tables' => 'Zoeken in database',
|
||||
'schema' => 'schema',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'Schema wijzigen',
|
||||
'Create schema' => 'Schema maken',
|
||||
@@ -258,7 +255,6 @@ $translations = array(
|
||||
'Attachments' => 'Bijlagen',
|
||||
'%d query(s) executed OK.' => array('%d query succesvol uitgevoerd.', '%d querys succesvol uitgevoerd'),
|
||||
'Show only errors' => 'Enkel fouten tonen',
|
||||
'Last page' => 'Laatste pagina',
|
||||
'Refresh' => 'Vernieuwen',
|
||||
'Invalid schema.' => 'Ongeldig schema.',
|
||||
'Please use one of the extensions %s.' => 'Gebruik 1 van volgende extensies: %s.',
|
||||
|
||||
282
adminer/lang/no.inc.php
Normal file
282
adminer/lang/no.inc.php
Normal file
@@ -0,0 +1,282 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'System' => 'System',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Brukernavn',
|
||||
'Password' => 'Passord',
|
||||
'Permanent login' => 'Permanent login',
|
||||
'Login' => 'Logg inn',
|
||||
'Logout' => 'Logg ut',
|
||||
'Logged as: %s' => 'Logget inn som: %s',
|
||||
'Logout successful.' => 'Utlogging vellykket.',
|
||||
'Invalid credentials.' => 'Ugylding innloggingsinformasjon.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Master-passord er utløpt. <a href="https://www.adminer.org/en/extension/"%s>Implementer</a> en metode for %s for å gjøre det permanent.',
|
||||
'Language' => 'Språk',
|
||||
'Invalid CSRF token. Send the form again.' => 'Ugylding CSRF-token - Send inn skjemaet igjen.',
|
||||
'No extension' => 'Ingen utvidelse',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Ingen av de støttede PHP-utvidelsene (%s) er tilgjengelige.',
|
||||
'Session support must be enabled.' => 'Økt-støtte må være skrudd på.',
|
||||
'Session expired, please login again.' => 'Økt utløpt - vennligst logg inn på nytt.',
|
||||
'%s version: %s through PHP extension %s' => '%s versjon: %s via PHP-utvidelse %s',
|
||||
'Refresh' => 'Gjenoppfrisk',
|
||||
'ltr' => 'venstre-til-høyre',
|
||||
'Privileges' => 'Privilegier',
|
||||
'Create user' => 'Lag bruker',
|
||||
'User has been dropped.' => 'Bruker slettet.',
|
||||
'User has been altered.' => 'Bruker endret.',
|
||||
'User has been created.' => 'Bruker opprettet.',
|
||||
'Hashed' => 'Hashet',
|
||||
'Column' => 'Kolonne',
|
||||
'Routine' => 'Rutine',
|
||||
'Grant' => 'Gi privilegier',
|
||||
'Revoke' => 'Trekk tilbake',
|
||||
'Process list' => 'Prosessliste',
|
||||
'%d process(es) have been killed.' => array('%d prosess avsluttet.', '%d prosesser avsluttet.'),
|
||||
'Kill' => 'Avslutt',
|
||||
'Variables' => 'Variabler',
|
||||
'Status' => 'Status',
|
||||
'SQL command' => 'SQL-kommando',
|
||||
'%d query(s) executed OK.' => array('%d kall utført OK.', '%d kall utført OK.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Kall utført OK, %d rad påvirket.', 'Kall utført OK, %d rader påvirket.'),
|
||||
'No commands to execute.' => 'Ingen kommandoer å utføre.',
|
||||
'Error in query' => 'Feil i forespørsel',
|
||||
'Execute' => 'Kjør',
|
||||
'Stop on error' => 'Stopp ved feil',
|
||||
'Show only errors' => 'Vis bare feil',
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Historie',
|
||||
'Clear' => 'Tøm skjema',
|
||||
'Edit all' => 'Rediger alle',
|
||||
'File upload' => 'Filopplasting',
|
||||
'From server' => 'Fra server',
|
||||
'Webserver file %s' => 'Webserver-fil %s',
|
||||
'Run file' => 'Kjør fil',
|
||||
'File does not exist.' => 'Filen eksisterer ikke.',
|
||||
'File uploads are disabled.' => 'Filopplastinger ikke tillatt.',
|
||||
'Unable to upload a file.' => 'Kunne ikke laste opp fil.',
|
||||
'Maximum allowed file size is %sB.' => 'Maksimum tillatte filstørrelse er %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'For stor datamengde i skjemaet. Reduser datamengden, eller øk størrelsen på %s-konfigurasjonsdirektivet.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Du kan laste opp en stor SQL-fil via FTP og importere den fra serveren.',
|
||||
'Export' => 'Eksport',
|
||||
'Output' => 'Resultat',
|
||||
'open' => 'åpne',
|
||||
'save' => 'lagre',
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Data',
|
||||
'Database' => 'Database',
|
||||
'database' => 'database',
|
||||
'Use' => 'Bruk',
|
||||
'Select database' => 'Velg database',
|
||||
'Invalid database.' => 'Ugyldig database.',
|
||||
'Database has been dropped.' => 'Databasen har blitt slettet.',
|
||||
'Databases have been dropped.' => 'Databasene har blitt slettet.',
|
||||
'Database has been created.' => 'Databasen er opprettet.',
|
||||
'Database has been renamed.' => 'Databasen har fått nytt navn.',
|
||||
'Database has been altered.' => 'Databasen er endret.',
|
||||
'Alter database' => 'Endre database',
|
||||
'Create database' => 'Opprett database',
|
||||
'Database schema' => 'Databaseskjema',
|
||||
'Permanent link' => 'Permanent lenke',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Motor',
|
||||
'Collation' => 'Tekstsortering',
|
||||
'Data Length' => 'Datalengde',
|
||||
'Index Length' => 'Indekslengde',
|
||||
'Data Free' => 'Frie data',
|
||||
'Rows' => 'Rader',
|
||||
'%d in total' => '%d totalt',
|
||||
'Analyze' => 'Analyser',
|
||||
'Optimize' => 'Optimaliser',
|
||||
'Vacuum' => 'Støvsug',
|
||||
'Check' => 'Sjekk',
|
||||
'Repair' => 'Reparer',
|
||||
'Truncate' => 'Avkort',
|
||||
'Tables have been truncated.' => 'Tabellene har blitt avkortet.',
|
||||
'Move to other database' => 'Flytt til annen database',
|
||||
'Move' => 'Flytt',
|
||||
'Tables have been moved.' => 'Tabellene har blitt flyttet.',
|
||||
'Copy' => 'Kopier',
|
||||
'Tables have been copied.' => 'Tabellene har blitt kopiert.',
|
||||
'Routines' => 'Rutiner',
|
||||
'Routine has been called, %d row(s) affected.' => array('Rutinen er utført, %d rad påvirket.', 'Rutinen er utført, %d rader påvirket.'),
|
||||
'Call' => 'Kall',
|
||||
'Parameter name' => 'Parameternavn',
|
||||
'Create procedure' => 'Opprett prosedyre',
|
||||
'Create function' => 'Opprett funksjon',
|
||||
'Routine has been dropped.' => 'Rutinen er slettet.',
|
||||
'Routine has been altered.' => 'Rutinen er endret.',
|
||||
'Routine has been created.' => 'Rutinen er opprettet.',
|
||||
'Alter function' => 'Endre funksjon',
|
||||
'Alter procedure' => 'Endre prosedyre',
|
||||
'Return type' => 'Returtype',
|
||||
'Events' => 'Eventer',
|
||||
'Event has been dropped.' => 'Eventen er slettet.',
|
||||
'Event has been altered.' => 'Eventen er endret.',
|
||||
'Event has been created.' => 'Eventen er opprettet.',
|
||||
'Alter event' => 'Endre event',
|
||||
'Create event' => 'Opprett event',
|
||||
'At given time' => 'På gitte tid',
|
||||
'Every' => 'Hver',
|
||||
'Schedule' => 'Tidsplan',
|
||||
'Start' => 'Start',
|
||||
'End' => 'Slutt',
|
||||
'On completion preserve' => 'Ved fullførelse bevar',
|
||||
'Tables' => 'Tabeller',
|
||||
'Tables and views' => 'Tabeller og views',
|
||||
'Table' => 'Tabell',
|
||||
'No tables.' => 'Ingen tabeller.',
|
||||
'Alter table' => 'Endre tabell',
|
||||
'Create table' => 'Opprett tabell',
|
||||
'Table has been dropped.' => 'Tabellen er slettet.',
|
||||
'Tables have been dropped.' => 'Tabellene er slettet.',
|
||||
'Tables have been optimized.' => 'Tabellene er blitt optimalisert.',
|
||||
'Table has been altered.' => 'Tabellen er endret.',
|
||||
'Table has been created.' => 'Tabellen er opprettet.',
|
||||
'Table name' => 'Tabellnavn',
|
||||
'Show structure' => 'Vis struktur',
|
||||
'engine' => 'mottor',
|
||||
'collation' => 'sortering',
|
||||
'Column name' => 'Kolonnenavn',
|
||||
'Type' => 'Type',
|
||||
'Length' => 'Lengde',
|
||||
'Auto Increment' => 'Autoinkrement',
|
||||
'Options' => 'Valg',
|
||||
'Comment' => 'Kommentarer',
|
||||
'Default values' => 'Standardverdier',
|
||||
'Drop' => 'Dropp',
|
||||
'Are you sure?' => 'Er du sikker?',
|
||||
'Move up' => 'Flytt opp',
|
||||
'Move down' => 'Flytt ned',
|
||||
'Remove' => 'Fjern',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Maksimum antall feltnavn overskredet - venligst øk %s.',
|
||||
'Partition by' => 'Partisjoner ved',
|
||||
'Partitions' => 'Partisjoner',
|
||||
'Partition name' => 'Partisjonsnavn',
|
||||
'Values' => 'Verdier',
|
||||
'View' => 'View',
|
||||
'View has been dropped.' => 'Viewet er slettet.',
|
||||
'View has been altered.' => 'Viewet er endret.',
|
||||
'View has been created.' => 'Viewet er opprettet.',
|
||||
'Alter view' => 'Endre view',
|
||||
'Create view' => 'Lag nytt view',
|
||||
'Indexes' => 'Indekser',
|
||||
'Indexes have been altered.' => 'Indeksene er endret.',
|
||||
'Alter indexes' => 'Endre indekser',
|
||||
'Add next' => 'Legg til neste',
|
||||
'Index Type' => 'Indekstype',
|
||||
'Column (length)' => 'Kolonne (lengde)',
|
||||
'Foreign keys' => 'Fremmednøkler',
|
||||
'Foreign key' => 'Fremmednøkkel',
|
||||
'Foreign key has been dropped.' => 'Fremmednøkkelen er slettet.',
|
||||
'Foreign key has been altered.' => 'Fremmednøkkelen er endret.',
|
||||
'Foreign key has been created.' => 'Fremmednøkkelen er opprettet.',
|
||||
'Target table' => 'Måltabell',
|
||||
'Change' => 'Endre',
|
||||
'Source' => 'Kilde',
|
||||
'Target' => 'Mål',
|
||||
'Add column' => 'Legg til kolonne',
|
||||
'Alter' => 'Endre',
|
||||
'Add foreign key' => 'Legg til fremmednøkkel',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Kilde- og mål-kolonner må ha samme datatype, det må være en indeks på mål-kolonnen, og dataene som refereres til må eksistere.',
|
||||
'Triggers' => 'Triggere',
|
||||
'Add trigger' => 'Legg til trigger',
|
||||
'Trigger has been dropped.' => 'Triggeren er slettet.',
|
||||
'Trigger has been altered.' => 'Triggeren er endret.',
|
||||
'Trigger has been created.' => 'Triggeren er opprettet.',
|
||||
'Alter trigger' => 'Endre trigger',
|
||||
'Create trigger' => 'Opprett trigger',
|
||||
'Time' => 'Tid',
|
||||
'Event' => 'Hendelse',
|
||||
'Name' => 'Navn',
|
||||
'select' => 'Vis',
|
||||
'Select' => 'Velg',
|
||||
'Select data' => 'Velg data',
|
||||
'Functions' => 'Funksjoner',
|
||||
'Aggregation' => 'Sammenfatning',
|
||||
'Search' => 'Søk',
|
||||
'anywhere' => 'hvorsomhelst',
|
||||
'Search data in tables' => 'Søk data i tabeller',
|
||||
'Sort' => 'Sorter',
|
||||
'descending' => 'minkende',
|
||||
'Limit' => 'Skranke',
|
||||
'Text length' => 'Tekstlengde',
|
||||
'Action' => 'Handling',
|
||||
'Full table scan' => 'Full tabell-scan',
|
||||
'Unable to select the table' => 'Kan ikke velge tabellen',
|
||||
'No rows.' => 'Ingen rader.',
|
||||
'%d row(s)' => array('%d rad', '%d rader'),
|
||||
'Page' => 'Side',
|
||||
'last' => 'siste',
|
||||
'Load more data' => 'Last mer data',
|
||||
'Loading' => 'Laster',
|
||||
'Whole result' => 'Hele resultatet',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'Import' => 'Importer',
|
||||
'%d row(s) have been imported.' => array('%d rad er importert.', '%d rader er importert.'),
|
||||
'File must be in UTF-8 encoding.' => 'Filen må være i UTF8-tegnkoding.',
|
||||
'Modify' => 'Endre',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klikk på en verdi for å endre den.',
|
||||
'Use edit link to modify this value.' => 'Bruk rediger-lengde for å endre dennne verdien.',
|
||||
'Item%s has been inserted.' => 'Rad%s er satt inn.',
|
||||
'Item has been deleted.' => 'Raden er slettet.',
|
||||
'Item has been updated.' => 'Raden er oppdatert.',
|
||||
'%d item(s) have been affected.' => array('%d rad påvirket.', '%d rader påvirket.'),
|
||||
'New item' => 'Ny rad',
|
||||
'original' => 'original',
|
||||
'empty' => 'tom',
|
||||
'edit' => 'rediger',
|
||||
'Edit' => 'Rediger',
|
||||
'Insert' => 'Sett inn',
|
||||
'Save' => 'Lagre',
|
||||
'Save and continue edit' => 'Lagre og fortsett å redigere',
|
||||
'Save and insert next' => 'Lagre og sett inn neste',
|
||||
'Selected' => 'Valgt',
|
||||
'Clone' => 'Klon',
|
||||
'Delete' => 'Slett',
|
||||
'You have no privileges to update this table.' => 'Du mangler rettighetene som trengs for å endre denne tabellen.',
|
||||
'E-mail' => 'E-post',
|
||||
'From' => 'Fra',
|
||||
'Subject' => 'Tittel',
|
||||
'Attachments' => 'Vedlegg',
|
||||
'Send' => 'Send',
|
||||
'%d e-mail(s) have been sent.' => array('%d epost sendt.', '%d eposter sendt.'),
|
||||
'Numbers' => 'Nummer',
|
||||
'Date and time' => 'Dato og tid',
|
||||
'Strings' => 'Strenger',
|
||||
'Binary' => 'Binære',
|
||||
'Lists' => 'Lister',
|
||||
'Network' => 'Nettverk',
|
||||
'Geometry' => 'Geometri',
|
||||
'Relations' => 'Relasjoner',
|
||||
'Editor' => 'Redigering',
|
||||
'$1-$3-$5' => '$6/$4 $1',
|
||||
'[yyyy]-mm-dd' => 'd/m [åååå]',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'nå',
|
||||
'yes' => 'ja',
|
||||
'no' => 'nei',
|
||||
'File exists.' => 'Filen finnes.',
|
||||
'Please use one of the extensions %s.' => 'Vennligst bruk en av filendelsene %s.',
|
||||
'Alter schema' => 'Endre skjema',
|
||||
'Create schema' => 'Opprett skjema',
|
||||
'Schema has been dropped.' => 'Skjemaet er slettet.',
|
||||
'Schema has been created.' => 'Skjemaet er opprettet.',
|
||||
'Schema has been altered.' => 'Skjemaet er endret.',
|
||||
'Schema' => 'Skjema',
|
||||
'Invalid schema.' => 'Ugylding skjema.',
|
||||
'Sequences' => 'Sekvenser',
|
||||
'Create sequence' => 'Opprett sekvens',
|
||||
'Sequence has been dropped.' => 'Sekvensen er slettet.',
|
||||
'Sequence has been created.' => 'Sekvensen er opprettet.',
|
||||
'Sequence has been altered.' => 'Sekvensen er endret.',
|
||||
'Alter sequence' => 'Endre sekvens',
|
||||
'User types' => 'Brukertyper',
|
||||
'Create type' => 'Opprett type',
|
||||
'Type has been dropped.' => 'Type er slettet.',
|
||||
'Type has been created.' => 'Type er opprettet.',
|
||||
'Alter type' => 'Endre type',
|
||||
'Saving' => 'Lagrer',
|
||||
);
|
||||
@@ -10,11 +10,16 @@ $translations = array(
|
||||
'Logout' => 'Wyloguj',
|
||||
'Logged as: %s' => 'Zalogowany jako: %s',
|
||||
'Logout successful.' => 'Wylogowano pomyślnie.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Dziękujemy za używanie Adminera, rozważ proszę <a href="https://www.adminer.org/pl/donation/">dotację</a>.',
|
||||
'Invalid credentials.' => 'Nieprawidłowe dane logowania.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Za dużo nieudanych prób logowania, spróbuj ponownie za %d minutę.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minuty.', 'Za dużo nieudanych prób logowania, spróbuj ponownie za %d minut.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ważność hasła głównego wygasła. <a href="https://www.adminer.org/pl/extension/"%s>Zaimplementuj</a> własną metodę %s, aby ustawić je na stałe.',
|
||||
'Language' => 'Język',
|
||||
'Invalid CSRF token. Send the form again.' => 'Nieprawidłowy token CSRF. Spróbuj wysłać formularz ponownie.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Jeżeli nie wywołałeś tej strony z Adminera, zamknij to okno.',
|
||||
'No extension' => 'Brak rozszerzenia',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Żadne z rozszerzeń PHP umożliwiających połączenie się z bazą danych (%s) nie jest dostępne.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Łączenie do portów uprzywilejowanych jest niedozwolone.',
|
||||
'Session support must be enabled.' => 'Wymagana jest obsługa sesji w PHP.',
|
||||
'Session expired, please login again.' => 'Sesja wygasła, zaloguj się ponownie.',
|
||||
'%s version: %s through PHP extension %s' => 'Wersja %s: %s za pomocą %s',
|
||||
@@ -46,6 +51,7 @@ $translations = array(
|
||||
'Query executed OK, %d row(s) affected.' => array('Zapytanie wykonane pomyślnie, zmieniono %d rekord.', 'Zapytanie wykonane pomyślnie, zmieniono %d rekordy.', 'Zapytanie wykonane pomyślnie, zmieniono %d rekordów.'),
|
||||
'No commands to execute.' => 'Nic do wykonania.',
|
||||
'Error in query' => 'Błąd w zapytaniu',
|
||||
'ATTACH queries are not supported.' => 'Zapytania ATTACH są niewspierane.',
|
||||
'Execute' => 'Wykonaj',
|
||||
'Stop on error' => 'Zatrzymaj w przypadku błędu',
|
||||
'Show only errors' => 'Pokaż tylko błędy',
|
||||
@@ -64,9 +70,10 @@ $translations = array(
|
||||
'Unable to upload a file.' => 'Wgranie pliku było niemożliwe.',
|
||||
'Maximum allowed file size is %sB.' => 'Maksymalna wielkość pliku to %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Przesłano zbyt dużo danych. Zmniejsz objętość danych lub zwiększ zmienną konfiguracyjną %s.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Większe pliki SQL możesz wgrać na serwer poprzez FTP przed zaimportowaniem.',
|
||||
'You are offline.' => 'Jesteś offline.',
|
||||
|
||||
'Export' => 'Eksport',
|
||||
'Dump' => 'Eksport',
|
||||
'Output' => 'Rezultat',
|
||||
'open' => 'otwórz',
|
||||
'save' => 'zapisz',
|
||||
@@ -78,7 +85,6 @@ $translations = array(
|
||||
'Use' => 'Wybierz',
|
||||
'Select database' => 'Wybierz bazę danych',
|
||||
'Invalid database.' => 'Nie znaleziono bazy danych.',
|
||||
'Create new database' => 'Utwórz nową bazę danych',
|
||||
'Database has been dropped.' => 'Baza danych została usunięta.',
|
||||
'Databases have been dropped.' => 'Bazy danych zostały usunięte.',
|
||||
'Database has been created.' => 'Baza danych została utworzona.',
|
||||
@@ -93,6 +99,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Składowanie',
|
||||
'Collation' => 'Porównywanie znaków',
|
||||
'Data Length' => 'Rozmiar danych',
|
||||
@@ -102,6 +109,7 @@ $translations = array(
|
||||
'%d in total' => '%d w sumie',
|
||||
'Analyze' => 'Analizuj',
|
||||
'Optimize' => 'Optymalizuj',
|
||||
'Vacuum' => 'Wyczyść',
|
||||
'Check' => 'Sprawdź',
|
||||
'Repair' => 'Napraw',
|
||||
'Truncate' => 'Opróżnij',
|
||||
@@ -144,7 +152,6 @@ $translations = array(
|
||||
'No tables.' => 'Brak tabel.',
|
||||
'Alter table' => 'Zmień tabelę',
|
||||
'Create table' => 'Utwórz tabelę',
|
||||
'Create new table' => 'Utwórz nową tabelę',
|
||||
'Table has been dropped.' => 'Tabela została usunięta.',
|
||||
'Tables have been dropped.' => 'Tabele zostały usunięte.',
|
||||
'Tables have been optimized.' => 'Tabele zostały zoptymalizowane.',
|
||||
@@ -160,13 +167,17 @@ $translations = array(
|
||||
'Auto Increment' => 'Auto Increment',
|
||||
'Options' => 'Opcje',
|
||||
'Comment' => 'Komentarz',
|
||||
'Default value' => 'Wartość domyślna',
|
||||
'Default values' => 'Wartości domyślne',
|
||||
'Drop' => 'Usuń',
|
||||
'Drop %s?' => 'Usunąć %s?',
|
||||
'Are you sure?' => 'Czy jesteś pewien?',
|
||||
'Size' => 'Wielkość',
|
||||
'Compute' => 'Oblicz',
|
||||
'Move up' => 'Przesuń w górę',
|
||||
'Move down' => 'Przesuń w dół',
|
||||
'Remove' => 'Usuń',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Przekroczono maksymalną liczbę pól. Zwiększ %s i %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Przekroczono maksymalną liczbę pól. Zwiększ %s.',
|
||||
|
||||
'Partition by' => 'Partycjonowanie',
|
||||
'Partitions' => 'Partycje',
|
||||
@@ -174,6 +185,7 @@ $translations = array(
|
||||
'Values' => 'Wartości',
|
||||
|
||||
'View' => 'Perspektywa',
|
||||
'Materialized view' => 'Zmaterializowana perspektywa',
|
||||
'View has been dropped.' => 'Perspektywa została usunięta.',
|
||||
'View has been altered.' => 'Perspektywa została zmieniona.',
|
||||
'View has been created.' => 'Perspektywa została utworzona.',
|
||||
@@ -225,21 +237,27 @@ $translations = array(
|
||||
'Sort' => 'Sortuj',
|
||||
'descending' => 'malejąco',
|
||||
'Limit' => 'Limit',
|
||||
'Limit rows' => 'Limit rekordów',
|
||||
'Text length' => 'Długość tekstu',
|
||||
'Action' => 'Czynność',
|
||||
'Full table scan' => 'Wymaga pełnego przeskanowania tabeli',
|
||||
'Unable to select the table' => 'Nie udało się pobrać danych z tabeli',
|
||||
'No rows.' => 'Brak rekordów.',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d rekord', '%d rekordy', '%d rekordów'),
|
||||
'Page' => 'Strona',
|
||||
'last' => 'ostatni',
|
||||
'Last page' => 'Ostatnia strona',
|
||||
'whole result' => 'wybierz wszystkie',
|
||||
'Load more data' => 'Wczytaj więcej danych',
|
||||
'Loading' => 'Wczytywanie',
|
||||
'Whole result' => 'Wybierz wszystkie',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajty', '%d bajtów'),
|
||||
|
||||
'Import' => 'Import',
|
||||
'%d row(s) have been imported.' => array('%d rekord został zaimportowany.', '%d rekordy zostały zaimportowane.', '%d rekordów zostało zaimportowanych.'),
|
||||
'File must be in UTF-8 encoding.' => 'Kodowanie pliku musi być ustawione na UTF-8.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Zmień',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+kliknij wartość, aby ją edytować.',
|
||||
'Use edit link to modify this value.' => 'Użyj linku edycji aby zmienić tę wartość.',
|
||||
|
||||
@@ -256,10 +274,13 @@ $translations = array(
|
||||
'Edit' => 'Edytuj',
|
||||
'Insert' => 'Dodaj',
|
||||
'Save' => 'Zapisz zmiany',
|
||||
'Saving' => 'Zapisywanie',
|
||||
'Save and continue edit' => 'Zapisz i kontynuuj edycję',
|
||||
'Save and insert next' => 'Zapisz i dodaj następny',
|
||||
'Selected' => 'Zaznaczone',
|
||||
'Clone' => 'Duplikuj',
|
||||
'Delete' => 'Usuń',
|
||||
'You have no privileges to update this table.' => 'Brak uprawnień do edycji tej tabeli',
|
||||
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'Nadawca',
|
||||
@@ -299,7 +320,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Schemat został usunięty.',
|
||||
'Schema has been created.' => 'Schemat został utworzony.',
|
||||
'Schema has been altered.' => 'Schemat został zmieniony.',
|
||||
'schema' => 'schemat',
|
||||
'Schema' => 'Schemat',
|
||||
'Invalid schema.' => 'Nieprawidłowy schemat.',
|
||||
|
||||
|
||||
263
adminer/lang/pt-br.inc.php
Normal file
263
adminer/lang/pt-br.inc.php
Normal file
@@ -0,0 +1,263 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Entrar',
|
||||
'Logout successful.' => 'Saída bem sucedida.',
|
||||
'Invalid credentials.' => 'Identificação inválida.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Usuário',
|
||||
'Password' => 'Senha',
|
||||
'Select database' => 'Selecionar Base de dados',
|
||||
'Invalid database.' => 'Base de dados inválida.',
|
||||
'Table has been dropped.' => 'A Tabela foi eliminada.',
|
||||
'Table has been altered.' => 'A Tabela foi alterada.',
|
||||
'Table has been created.' => 'A Tabela foi criada.',
|
||||
'Alter table' => 'Alterar estrutura',
|
||||
'Create table' => 'Criar tabela',
|
||||
'Table name' => 'Nome da tabela',
|
||||
'engine' => 'motor',
|
||||
'collation' => 'collation',
|
||||
'Column name' => 'Nome da coluna',
|
||||
'Type' => 'Tipo',
|
||||
'Length' => 'Tamanho',
|
||||
'Auto Increment' => 'Incremento Automático',
|
||||
'Options' => 'Opções',
|
||||
'Save' => 'Salvar',
|
||||
'Drop' => 'Apagar',
|
||||
'Database has been dropped.' => 'A Base de dados foi apagada.',
|
||||
'Database has been created.' => 'A Base de dados foi criada.',
|
||||
'Database has been renamed.' => 'A Base de dados foi renomeada.',
|
||||
'Database has been altered.' => 'A Base de dados foi alterada.',
|
||||
'Alter database' => 'Alterar Base de dados',
|
||||
'Create database' => 'Criar Base de dados',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Logout' => 'Sair',
|
||||
'database' => 'base de dados',
|
||||
'Use' => 'Usar',
|
||||
'No tables.' => 'Não existem tabelas.',
|
||||
'select' => 'selecionar',
|
||||
'Item has been deleted.' => 'O Registro foi deletado.',
|
||||
'Item has been updated.' => 'O Registro foi atualizado.',
|
||||
'Item%s has been inserted.' => 'O Registro%s foi inserido.',
|
||||
'Edit' => 'Editar',
|
||||
'Insert' => 'Inserir',
|
||||
'Save and insert next' => 'Salvar e inserir outro',
|
||||
'Delete' => 'Deletar',
|
||||
'Database' => 'Base de dados',
|
||||
'Routines' => 'Rotinas',
|
||||
'Indexes have been altered.' => 'Os Índices foram alterados.',
|
||||
'Indexes' => 'Índices',
|
||||
'Alter indexes' => 'Alterar índices',
|
||||
'Add next' => 'Adicionar próximo',
|
||||
'Language' => 'Idioma',
|
||||
'Select' => 'Selecionar',
|
||||
'New item' => 'Novo Registro',
|
||||
'Search' => 'Procurar',
|
||||
'Sort' => 'Ordenar',
|
||||
'descending' => 'decrescente',
|
||||
'Limit' => 'Limite',
|
||||
'No rows.' => 'Não existem registros.',
|
||||
'Action' => 'Ação',
|
||||
'edit' => 'editar',
|
||||
'Page' => 'Página',
|
||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
||||
'Error in query' => 'Erro na consulta',
|
||||
'Execute' => 'Executar',
|
||||
'Table' => 'Tabela',
|
||||
'Foreign keys' => 'Chaves estrangeiras',
|
||||
'Triggers' => 'Triggers',
|
||||
'View' => 'Visão',
|
||||
'Unable to select the table' => 'Não é possível selecionar a Tabela',
|
||||
'Invalid CSRF token. Send the form again.' => 'Token CSRF inválido. Enviar o formulário novamente.',
|
||||
'Comment' => 'Comentário',
|
||||
'Default values' => 'Valores padrões',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'No commands to execute.' => 'Nenhum comando para executar.',
|
||||
'Unable to upload a file.' => 'Não é possível enviar o arquivo.',
|
||||
'File upload' => 'Importar arquivo',
|
||||
'File uploads are disabled.' => 'Importação de arquivos desabilitada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Rotina executada, %d registro afetado.', 'Rotina executada, %d registros afetados.'),
|
||||
'Call' => 'Chamar',
|
||||
'No extension' => 'Não há extension',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP suportadas (%s) está disponível.',
|
||||
'Session support must be enabled.' => 'Suporte a sessões deve estar habilitado.',
|
||||
'Session expired, please login again.' => 'Sessão expirada, por favor logue-se novamente.',
|
||||
'Text length' => 'Tamanho de texto',
|
||||
'Foreign key has been dropped.' => 'A Chave Estrangeira foi apagada.',
|
||||
'Foreign key has been altered.' => 'A Chave Estrangeira foi alterada.',
|
||||
'Foreign key has been created.' => 'A Chave Estrangeira foi criada.',
|
||||
'Foreign key' => 'Chave Estrangeira',
|
||||
'Target table' => 'Tabela de destino',
|
||||
'Change' => 'Modificar',
|
||||
'Source' => 'Origem',
|
||||
'Target' => 'Destino',
|
||||
'Add column' => 'Adicionar coluna',
|
||||
'Alter' => 'Alterar',
|
||||
'Add foreign key' => 'Adicionar Chave Estrangeira',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Tipo de índice',
|
||||
'Column (length)' => 'Coluna (tamanho)',
|
||||
'View has been dropped.' => 'A Visão foi apagada.',
|
||||
'View has been altered.' => 'A Visão foi alterada.',
|
||||
'View has been created.' => 'A Visão foi criada.',
|
||||
'Alter view' => 'Alterar visão',
|
||||
'Create view' => 'Criar visão',
|
||||
'Name' => 'Nome',
|
||||
'Process list' => 'Lista de processos',
|
||||
'%d process(es) have been killed.' => array('%d processo foi terminado.', '%d processos foram terminados.'),
|
||||
'Kill' => 'Parar',
|
||||
'Parameter name' => 'Nome de Parâmetro',
|
||||
'Database schema' => 'Esquema de Base de dados',
|
||||
'Create procedure' => 'Criar procedimento',
|
||||
'Create function' => 'Criar função',
|
||||
'Routine has been dropped.' => 'A Rotina foi apagada.',
|
||||
'Routine has been altered.' => 'A Rotina foi alterada.',
|
||||
'Routine has been created.' => 'A Rotina foi criada.',
|
||||
'Alter function' => 'Alterar função',
|
||||
'Alter procedure' => 'Alterar procedimento',
|
||||
'Return type' => 'Tipo de valor de retorno',
|
||||
'Add trigger' => 'Adicionar trigger',
|
||||
'Trigger has been dropped.' => 'O Trigger foi apagado.',
|
||||
'Trigger has been altered.' => 'O Trigger foi alterado.',
|
||||
'Trigger has been created.' => 'O Trigger foi criado.',
|
||||
'Alter trigger' => 'Alterar Trigger',
|
||||
'Create trigger' => 'Adicionar Trigger',
|
||||
'Time' => 'Tempo',
|
||||
'Event' => 'Evento',
|
||||
'%s version: %s through PHP extension %s' => 'Versão %s: %s através da extensão PHP %s',
|
||||
'%d row(s)' => array('%d registro', '%d registros'),
|
||||
'Remove' => 'Remover',
|
||||
'Are you sure?' => 'Você tem certeza?',
|
||||
'Privileges' => 'Privilégios',
|
||||
'Create user' => 'Criar Usuário',
|
||||
'User has been dropped.' => 'O Usuário foi apagado.',
|
||||
'User has been altered.' => 'O Usuário foi alterado.',
|
||||
'User has been created.' => 'O Usuário foi criado.',
|
||||
'Hashed' => 'Hash',
|
||||
'Column' => 'Coluna',
|
||||
'Routine' => 'Rotina',
|
||||
'Grant' => 'Conceder',
|
||||
'Revoke' => 'Impedir',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduza o tamanho ou aumente a diretiva de configuração %s.',
|
||||
'Logged as: %s' => 'Logado como: %s',
|
||||
'Move up' => 'Mover acima',
|
||||
'Move down' => 'Mover abaixo',
|
||||
'Functions' => 'Funções',
|
||||
'Aggregation' => 'Adições',
|
||||
'Export' => 'Exportar',
|
||||
'Output' => 'Saída',
|
||||
'open' => 'abrir',
|
||||
'save' => 'salvar',
|
||||
'Format' => 'Formato',
|
||||
'Tables' => 'Tabelas',
|
||||
'Data' => 'Dados',
|
||||
'Event has been dropped.' => 'O Evento foi apagado.',
|
||||
'Event has been altered.' => 'O Evento foi alterado.',
|
||||
'Event has been created.' => 'O Evento foi criado.',
|
||||
'Alter event' => 'Modificar Evento',
|
||||
'Create event' => 'Criar Evento',
|
||||
'At given time' => 'A hora determinada',
|
||||
'Every' => 'Cada',
|
||||
'Events' => 'Eventos',
|
||||
'Schedule' => 'Agenda',
|
||||
'Start' => 'Início',
|
||||
'End' => 'Fim',
|
||||
'Status' => 'Estado',
|
||||
'On completion preserve' => 'Ao completar preservar',
|
||||
'Tables and views' => 'Tabelas e Visões',
|
||||
'Data Length' => 'Tamanho de dados',
|
||||
'Index Length' => 'Tamanho de índice',
|
||||
'Data Free' => 'Espaço Livre',
|
||||
'Collation' => 'Colação',
|
||||
'Analyze' => 'Analisar',
|
||||
'Optimize' => 'Otimizar',
|
||||
'Check' => 'Verificar',
|
||||
'Repair' => 'Reparar',
|
||||
'Truncate' => 'Truncar',
|
||||
'Tables have been truncated.' => 'As Tabelas foram truncadas.',
|
||||
'Rows' => 'Registros',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'As Tabelas foram movidas.',
|
||||
'Move to other database' => 'Mover para outra Base de dados',
|
||||
'Move' => 'Mover',
|
||||
'Engine' => 'Motor',
|
||||
'Save and continue edit' => 'Salvar e continuar editando',
|
||||
'original' => 'original',
|
||||
'Tables have been dropped.' => 'As Tabelas foram eliminadas.',
|
||||
'%d item(s) have been affected.' => array('%d item foi afetado.', '%d itens foram afetados.'),
|
||||
'Whole result' => 'Resultado completo',
|
||||
'Clone' => 'Clonar',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s.',
|
||||
'Partition by' => 'Particionar por',
|
||||
'Partitions' => 'Partições',
|
||||
'Partition name' => 'Nome da Partição',
|
||||
'Values' => 'Valores',
|
||||
'%d row(s) have been imported.' => array('%d registro foi importado.', '%d registros foram importados.'),
|
||||
'anywhere' => 'qualquer local',
|
||||
'Import' => 'Importar',
|
||||
'Stop on error' => 'Parar em caso de erro',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5/$3/$1',
|
||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||
'History' => 'Histórico',
|
||||
'Variables' => 'Variáveis',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As colunas de origen e destino devem ser do mesmo tipo, deve existir um índice entre as colunas de destino e o registro referenciado deve existir.',
|
||||
'Relations' => 'Relações',
|
||||
'Run file' => 'Executar Arquivo',
|
||||
'Clear' => 'Limpar',
|
||||
'Maximum allowed file size is %sB.' => 'Tamanho máximo do arquivo permitido é %sB.',
|
||||
'Numbers' => 'Números',
|
||||
'Date and time' => 'Data e hora',
|
||||
'Strings' => 'Strings',
|
||||
'Binary' => 'Binário',
|
||||
'Lists' => 'Listas',
|
||||
'Editor' => 'Editor',
|
||||
'E-mail' => 'E-mail',
|
||||
'From' => 'De',
|
||||
'Subject' => 'Assunto',
|
||||
'Send' => 'Enviar',
|
||||
'%d e-mail(s) have been sent.' => array('%d email foi enviado.', '%d emails foram enviados.'),
|
||||
'Webserver file %s' => 'Arquivo do servidor web %s',
|
||||
'File does not exist.' => 'Arquivo não existe.',
|
||||
'%d in total' => '%d no total',
|
||||
'Permanent login' => 'Login permanente',
|
||||
'Databases have been dropped.' => 'A Base de dados foi apagada.',
|
||||
'Search data in tables' => 'Buscar dados nas Tabelas',
|
||||
'Schema' => 'Esquema',
|
||||
'Alter schema' => 'Alterar esquema',
|
||||
'Create schema' => 'Criar esquema',
|
||||
'Schema has been dropped.' => 'O Esquema foi apagado.',
|
||||
'Schema has been created.' => 'O Esquema foi criado.',
|
||||
'Schema has been altered.' => 'O Esquema foi alterado.',
|
||||
'Sequences' => 'Sequências',
|
||||
'Create sequence' => 'Criar sequência',
|
||||
'Alter sequence' => 'Alterar sequência',
|
||||
'Sequence has been dropped.' => 'A Sequência foi apagada.',
|
||||
'Sequence has been created.' => 'A Sequência foi criada.',
|
||||
'Sequence has been altered.' => 'A Sequência foi alterada.',
|
||||
'User types' => 'Tipos definidos pelo usuário',
|
||||
'Create type' => 'Criar tipo',
|
||||
'Alter type' => 'Alterar tipo',
|
||||
'Type has been dropped.' => 'O Tipo foi apagado.',
|
||||
'Type has been created.' => 'O Tipo foi criado.',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+clique sobre o valor para edita-lo.',
|
||||
'Use edit link to modify this value.' => 'Utilize o link editar para modificar este valor.',
|
||||
'last' => 'último',
|
||||
'From server' => 'A partir do servidor',
|
||||
'System' => 'Sistema',
|
||||
'Select data' => 'Selecionar dados',
|
||||
'Show structure' => 'Mostrar estrutura',
|
||||
'empty' => 'vazio',
|
||||
'Network' => 'Rede',
|
||||
'Geometry' => 'Geometria',
|
||||
'File exists.' => 'Arquivo já existe.',
|
||||
'Attachments' => 'Anexos',
|
||||
'%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'),
|
||||
'Show only errors' => 'Mostrar somente erros',
|
||||
'Refresh' => 'Atualizar',
|
||||
'Invalid schema.' => 'Esquema inválido.',
|
||||
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
||||
'now' => 'agora',
|
||||
'ltr' => 'ltr',
|
||||
);
|
||||
@@ -1,14 +1,13 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Entrar',
|
||||
'Logout successful.' => 'Saida bem sucedida.',
|
||||
'Logout successful.' => 'Sessão terminada com sucesso.',
|
||||
'Invalid credentials.' => 'Identificação inválida.',
|
||||
'Server' => 'Servidor',
|
||||
'Username' => 'Usuário',
|
||||
'Username' => 'Nome de utilizador',
|
||||
'Password' => 'Senha',
|
||||
'Select database' => 'Selecionar Base de dados',
|
||||
'Invalid database.' => 'Base de dados inválida.',
|
||||
'Create new database' => 'Criar nova base de dados',
|
||||
'Table has been dropped.' => 'Tabela eliminada.',
|
||||
'Table has been altered.' => 'Tabela modificada.',
|
||||
'Table has been created.' => 'Tabela criada.',
|
||||
@@ -22,7 +21,7 @@ $translations = array(
|
||||
'Length' => 'Tamanho',
|
||||
'Auto Increment' => 'Incremento Automático',
|
||||
'Options' => 'Opções',
|
||||
'Save' => 'Salvar',
|
||||
'Save' => 'Guardar',
|
||||
'Drop' => 'Remover',
|
||||
'Database has been dropped.' => 'Base de dados eliminada.',
|
||||
'Database has been created.' => 'Base de dados criada.',
|
||||
@@ -31,42 +30,40 @@ $translations = array(
|
||||
'Alter database' => 'Modificar Base de dados',
|
||||
'Create database' => 'Criar Base de dados',
|
||||
'SQL command' => 'Comando SQL',
|
||||
'Dump' => 'Exportar',
|
||||
'Logout' => 'Sair',
|
||||
'Logout' => 'Terminar sessão',
|
||||
'database' => 'base de dados',
|
||||
'Use' => 'Usar',
|
||||
'No tables.' => 'Não existem tabelas.',
|
||||
'select' => 'registros',
|
||||
'Create new table' => 'Nova tabela',
|
||||
'Item has been deleted.' => 'Registro eliminado.',
|
||||
'Item has been updated.' => 'Registro modificado.',
|
||||
'Item%s has been inserted.' => 'Registro%s inserido.',
|
||||
'select' => 'registos',
|
||||
'Item has been deleted.' => 'Registo eliminado.',
|
||||
'Item has been updated.' => 'Registo modificado.',
|
||||
'Item%s has been inserted.' => 'Registo%s inserido.',
|
||||
'Edit' => 'Modificar',
|
||||
'Insert' => 'Inserir',
|
||||
'Save and insert next' => 'Salvar e inserir outro',
|
||||
'Delete' => 'Apagar',
|
||||
'Save and insert next' => 'Guardar e inserir outro',
|
||||
'Delete' => 'Eliminar',
|
||||
'Database' => 'Base de dados',
|
||||
'Routines' => 'Procedimentos',
|
||||
'Indexes have been altered.' => 'Índices modificados.',
|
||||
'Indexes' => 'Índices',
|
||||
'Alter indexes' => 'Modificar índices',
|
||||
'Add next' => 'Adicionar proximo',
|
||||
'Add next' => 'Adicionar próximo',
|
||||
'Language' => 'Idioma',
|
||||
'Select' => 'Selecionar',
|
||||
'New item' => 'Novo Registro',
|
||||
'New item' => 'Novo Registo',
|
||||
'Search' => 'Procurar',
|
||||
'Sort' => 'Ordenar',
|
||||
'descending' => 'decrescente',
|
||||
'Limit' => 'Limite',
|
||||
'No rows.' => 'Não existem registros.',
|
||||
'No rows.' => 'Não existem registos.',
|
||||
'Action' => 'Ação',
|
||||
'edit' => 'modificar',
|
||||
'Page' => 'Página',
|
||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Consulta executada, %d registo afetado.', 'Consulta executada, %d registos afetados.'),
|
||||
'Error in query' => 'Erro na consulta',
|
||||
'Execute' => 'Executar',
|
||||
'Table' => 'Tabela',
|
||||
'Foreign keys' => 'Chaves foráneas',
|
||||
'Foreign keys' => 'Chaves estrangeiras',
|
||||
'Triggers' => 'Triggers',
|
||||
'View' => 'Visualizar',
|
||||
'Unable to select the table' => 'Não é possivel selecionar a Tabela',
|
||||
@@ -75,27 +72,27 @@ $translations = array(
|
||||
'Default values' => 'Valores predeterminados',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
'No commands to execute.' => 'Nenhum comando para executar.',
|
||||
'Unable to upload a file.' => 'Não é possível enviar o arquivo.',
|
||||
'File upload' => 'Importar arquivo',
|
||||
'File uploads are disabled.' => 'Importação de arquivos desablilitada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Consulta executada, %d registro afetado.', 'Consulta executada, %d registros afetados.'),
|
||||
'Unable to upload a file.' => 'Não é possível enviar o ficheiro.',
|
||||
'File upload' => 'Importar ficheiro',
|
||||
'File uploads are disabled.' => 'Importação de ficheiros desativada.',
|
||||
'Routine has been called, %d row(s) affected.' => array('Consulta executada, %d registo afetado.', 'Consulta executada, %d registos afetados.'),
|
||||
'Call' => 'Chamar',
|
||||
'No extension' => 'Não há extension',
|
||||
'No extension' => 'Não há extensão',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Nenhuma das extensões PHP suportadas (%s) está disponivel.',
|
||||
'Session support must be enabled.' => 'Devem estar habilitadas as sessões.',
|
||||
'Session expired, please login again.' => 'Sessão expirada, por favor entre sua Chave de novo.',
|
||||
'Text length' => 'Tamanho de texto',
|
||||
'Foreign key has been dropped.' => 'Chave externa eliminada.',
|
||||
'Foreign key has been altered.' => 'Chave externa modificada.',
|
||||
'Foreign key has been created.' => 'Chave externa criada.',
|
||||
'Foreign key' => 'Chave externa',
|
||||
'Session support must be enabled.' => 'As sessões devem estar ativas.',
|
||||
'Session expired, please login again.' => 'Sessão expirada, por favor entre de novo.',
|
||||
'Text length' => 'Tamanho do texto',
|
||||
'Foreign key has been dropped.' => 'Chave estrangeira eliminada.',
|
||||
'Foreign key has been altered.' => 'Chave estrangeira modificada.',
|
||||
'Foreign key has been created.' => 'Chave estrangeira criada.',
|
||||
'Foreign key' => 'Chave estrangeira',
|
||||
'Target table' => 'Tabela de destino',
|
||||
'Change' => 'Modificar',
|
||||
'Source' => 'Origem',
|
||||
'Target' => 'Destino',
|
||||
'Add column' => 'Adicionar coluna',
|
||||
'Alter' => 'Modificar',
|
||||
'Add foreign key' => 'Adicionar Chave foránea',
|
||||
'Add foreign key' => 'Adicionar Chave estrangeira',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'Tipo de índice',
|
||||
@@ -118,7 +115,7 @@ $translations = array(
|
||||
'Routine has been created.' => 'Procedimento criado.',
|
||||
'Alter function' => 'Modificar Função',
|
||||
'Alter procedure' => 'Modificar procedimento',
|
||||
'Return type' => 'Tipo de valor de regreso',
|
||||
'Return type' => 'Tipo de valor de regresso',
|
||||
'Add trigger' => 'Adicionar trigger',
|
||||
'Trigger has been dropped.' => 'Trigger eliminado.',
|
||||
'Trigger has been altered.' => 'Trigger modificado.',
|
||||
@@ -128,29 +125,29 @@ $translations = array(
|
||||
'Time' => 'Tempo',
|
||||
'Event' => 'Evento',
|
||||
'%s version: %s through PHP extension %s' => 'Versão %s: %s através da extensão PHP %s',
|
||||
'%d row(s)' => array('%d registro', '%d registros'),
|
||||
'%d row(s)' => array('%d registo', '%d registos'),
|
||||
'Remove' => 'Remover',
|
||||
'Are you sure?' => 'Está seguro?',
|
||||
'Are you sure?' => 'Tem a certeza?',
|
||||
'Privileges' => 'Privilégios',
|
||||
'Create user' => 'Criar Usuário',
|
||||
'User has been dropped.' => 'Usuário eliminado.',
|
||||
'User has been altered.' => 'Usuário modificado.',
|
||||
'User has been created.' => 'Usuário criado.',
|
||||
'Create user' => 'Criar utilizador',
|
||||
'User has been dropped.' => 'Utilizador eliminado.',
|
||||
'User has been altered.' => 'Utilizador modificado.',
|
||||
'User has been created.' => 'Utilizador criado.',
|
||||
'Hashed' => 'Hash',
|
||||
'Column' => 'Coluna',
|
||||
'Routine' => 'Rotina',
|
||||
'Grant' => 'Conceder',
|
||||
'Revoke' => 'Impedir',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST data demasiado grande. Reduza o tamanho ou aumente a diretiva de configuração %s.',
|
||||
'Logged as: %s' => 'Logado como: %s',
|
||||
'Move up' => 'Mover acima',
|
||||
'Move down' => 'Mover abaixo',
|
||||
'Logged as: %s' => 'Ligado como: %s',
|
||||
'Move up' => 'Mover para cima',
|
||||
'Move down' => 'Mover para baixo',
|
||||
'Functions' => 'Funções',
|
||||
'Aggregation' => 'Adições',
|
||||
'Export' => 'Exportar',
|
||||
'Output' => 'Saída',
|
||||
'open' => 'mostrar',
|
||||
'save' => 'salvas',
|
||||
'open' => 'abrir',
|
||||
'save' => 'guardar',
|
||||
'Format' => 'Formato',
|
||||
'Tables' => 'Tabelas',
|
||||
'Data' => 'Dados',
|
||||
@@ -159,14 +156,14 @@ $translations = array(
|
||||
'Event has been created.' => 'Evento criado.',
|
||||
'Alter event' => 'Modificar Evento',
|
||||
'Create event' => 'Criar Evento',
|
||||
'At given time' => 'A hora determinada',
|
||||
'At given time' => 'À hora determinada',
|
||||
'Every' => 'Cada',
|
||||
'Events' => 'Eventos',
|
||||
'Schedule' => 'Agenda',
|
||||
'Start' => 'Início',
|
||||
'End' => 'Fim',
|
||||
'Status' => 'Estado',
|
||||
'On completion preserve' => 'Ao completar preservar',
|
||||
'On completion preserve' => 'Preservar ao completar',
|
||||
'Tables and views' => 'Tabelas e vistas',
|
||||
'Data Length' => 'Tamanho de dados',
|
||||
'Index Length' => 'Tamanho de índice',
|
||||
@@ -178,24 +175,25 @@ $translations = array(
|
||||
'Repair' => 'Reparar',
|
||||
'Truncate' => 'Truncar',
|
||||
'Tables have been truncated.' => 'Tabelas truncadas (truncate).',
|
||||
'Rows' => 'Registros',
|
||||
'Rows' => 'Registos',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'As Tabelas foram movidas.',
|
||||
'Move to other database' => 'Mover outra Base de dados',
|
||||
'Move' => 'Mover',
|
||||
'Engine' => 'Motor',
|
||||
'Save and continue edit' => 'Salvar e continuar editando',
|
||||
'Save and continue edit' => 'Guardar e continuar a edição',
|
||||
'original' => 'original',
|
||||
'Tables have been dropped.' => 'Tabelas eliminadas.',
|
||||
'Tables have been dropped.' => 'As tabelas foram eliminadas.',
|
||||
'%d item(s) have been affected.' => array('%d item afetado.', '%d itens afetados.'),
|
||||
'whole result' => 'resultado completo',
|
||||
'Whole result' => 'Resultado completo',
|
||||
'Clone' => 'Clonar',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s e %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Quantidade máxima de campos permitidos excedidos. Por favor aumente %s.',
|
||||
'Partition by' => 'Particionar por',
|
||||
'Partitions' => 'Partições',
|
||||
'Partition name' => 'Nome da Partição',
|
||||
'Values' => 'Valores',
|
||||
'%d row(s) have been imported.' => array('%d registro importado.', '%d registros importados.'),
|
||||
'%d row(s) have been imported.' => array('%d registo importado.', '%d registos importados.'),
|
||||
'anywhere' => 'qualquer local',
|
||||
'Import' => 'Importar',
|
||||
'Stop on error' => 'Parar em caso de erro',
|
||||
@@ -204,14 +202,14 @@ $translations = array(
|
||||
'[yyyy]-mm-dd' => 'dd/mm/[aaaa]',
|
||||
'History' => 'Histórico',
|
||||
'Variables' => 'Variáveis',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As colunas de origen e destino devem ser do mesmo tipo, deve existir um índice entre as colunas de destino e o registro referenciado deve existir.',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'As colunas de origen e destino devem ser do mesmo tipo, deve existir um índice entre as colunas de destino e o registo referenciado deve existir.',
|
||||
'Relations' => 'Relações',
|
||||
'Run file' => 'Executar Arquivo',
|
||||
'Run file' => 'Executar ficheiro',
|
||||
'Clear' => 'Limpar',
|
||||
'Maximum allowed file size is %sB.' => 'Tamanho máximo do arquivo é %sB.',
|
||||
'Maximum allowed file size is %sB.' => 'Tamanho máximo do ficheiro é %sB.',
|
||||
'Numbers' => 'Números',
|
||||
'Date and time' => 'Data e hora',
|
||||
'Strings' => 'Cadena',
|
||||
'Strings' => 'Cadeia',
|
||||
'Binary' => 'Binário',
|
||||
'Lists' => 'Listas',
|
||||
'Editor' => 'Editor',
|
||||
@@ -220,13 +218,12 @@ $translations = array(
|
||||
'Subject' => 'Assunto',
|
||||
'Send' => 'Enviar',
|
||||
'%d e-mail(s) have been sent.' => array('%d email enviado.', '%d emails enviados.'),
|
||||
'Webserver file %s' => 'Arquivo do servidor web %s',
|
||||
'File does not exist.' => 'Arquivo não existe.',
|
||||
'Webserver file %s' => 'Ficheiro do servidor web %s',
|
||||
'File does not exist.' => 'Ficheiro não existe.',
|
||||
'%d in total' => '%d no total',
|
||||
'Permanent login' => 'Salvar Senha',
|
||||
'Permanent login' => 'Memorizar a senha',
|
||||
'Databases have been dropped.' => 'Bases de dados eliminadas.',
|
||||
'Search data in tables' => 'Buscar dados nas Tabelas',
|
||||
'schema' => 'esquema',
|
||||
'Search data in tables' => 'Pesquisar dados nas Tabelas',
|
||||
'Schema' => 'Esquema',
|
||||
'Alter schema' => 'Modificar esquema',
|
||||
'Create schema' => 'Criar esquema',
|
||||
@@ -239,7 +236,7 @@ $translations = array(
|
||||
'Sequence has been dropped.' => 'Sequência eliminada.',
|
||||
'Sequence has been created.' => 'Sequência criada.',
|
||||
'Sequence has been altered.' => 'Sequência modificada.',
|
||||
'User types' => 'Tipos definido pelo usuário',
|
||||
'User types' => 'Tipos definidos pelo utilizador',
|
||||
'Create type' => 'Criar tipo',
|
||||
'Alter type' => 'Modificar tipo',
|
||||
'Type has been dropped.' => 'Tipo eliminado.',
|
||||
@@ -247,18 +244,17 @@ $translations = array(
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+clique vezes sobre o valor para edita-lo.',
|
||||
'Use edit link to modify this value.' => 'Utilize o link modificar para alterar.',
|
||||
'last' => 'último',
|
||||
'From server' => 'Desde servidor',
|
||||
'From server' => 'Do servidor',
|
||||
'System' => 'Motor de Base de dados',
|
||||
'Select data' => 'Selecionar dados',
|
||||
'Show structure' => 'Mostrar estrutura',
|
||||
'empty' => 'vazio',
|
||||
'Network' => 'Rede',
|
||||
'Geometry' => 'Geometria',
|
||||
'File exists.' => 'Arquivo já existe.',
|
||||
'File exists.' => 'Ficheiro já existe.',
|
||||
'Attachments' => 'Anexos',
|
||||
'%d query(s) executed OK.' => array('%d consulta sql executada corretamente.', '%d consultas sql executadas corretamente.'),
|
||||
'Show only errors' => 'Mostrar somente erros',
|
||||
'Last page' => 'Última página',
|
||||
'Refresh' => 'Atualizar',
|
||||
'Invalid schema.' => 'Esquema inválido.',
|
||||
'Please use one of the extensions %s.' => 'Por favor use uma das extensões %s.',
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'Intră',
|
||||
'Logout successful.' => 'Ați eșit cu succes.',
|
||||
'Logout successful.' => 'Ați ieșit cu succes.',
|
||||
'Invalid credentials.' => 'Numele de utilizator sau parola este greșită.',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Nume de utilizator',
|
||||
'Password' => 'Parola',
|
||||
'Select database' => 'Alege baza de date',
|
||||
'Invalid database.' => 'Bază de deate invalidă.',
|
||||
'Create new database' => 'Crează o bază de date nouă',
|
||||
'Table has been dropped.' => 'Tabelul a fost șters.',
|
||||
'Table has been altered.' => 'Tabelul a fost modificat.',
|
||||
'Table has been created.' => 'Tabelul a fost creat.',
|
||||
@@ -31,13 +30,11 @@ $translations = array(
|
||||
'Alter database' => 'Modifică baza de date',
|
||||
'Create database' => 'Crează baza de date',
|
||||
'SQL command' => 'SQL query',
|
||||
'Dump' => 'Dump',
|
||||
'Logout' => 'Eșire',
|
||||
'Logout' => 'Ieșire',
|
||||
'database' => 'baza de date',
|
||||
'Use' => 'Alege',
|
||||
'No tables.' => 'În baza de date nu sunt tabele.',
|
||||
'select' => 'selectează',
|
||||
'Create new table' => 'Crează tabel nou',
|
||||
'Item has been deleted.' => 'Înregistrare a fost ștearsă.',
|
||||
'Item has been updated.' => 'Înregistrare a fost înnoită.',
|
||||
'Item%s has been inserted.' => 'Înregistrarea%s a fost inserată.',
|
||||
@@ -47,9 +44,9 @@ $translations = array(
|
||||
'Delete' => 'Șterge',
|
||||
'Database' => 'Baza de date',
|
||||
'Routines' => 'Proceduri și funcții salvate',
|
||||
'Indexes have been altered.' => 'Indexele au fost modificate.',
|
||||
'Indexes' => 'Indexe',
|
||||
'Alter indexes' => 'Modifică indexe',
|
||||
'Indexes have been altered.' => 'Indexurile au fost modificate.',
|
||||
'Indexes' => 'Indexuri',
|
||||
'Alter indexes' => 'Modifică indexuri',
|
||||
'Add next' => 'Adaugă încă',
|
||||
'Language' => 'Limba',
|
||||
'Select' => 'Selectează',
|
||||
@@ -63,11 +60,11 @@ $translations = array(
|
||||
'edit' => 'editare',
|
||||
'Page' => 'Pagina',
|
||||
'Query executed OK, %d row(s) affected.' => array('Query executat, %d înscriere modificată.', 'Query executat, %d înscrieri modificate.'),
|
||||
'Error in query' => 'Eroare în query',
|
||||
'Error in query' => 'Greșeală în query',
|
||||
'Execute' => 'Execută',
|
||||
'Table' => 'Tabel',
|
||||
'Foreign keys' => 'Cheiuri externe',
|
||||
'Triggers' => 'Triggere',
|
||||
'Foreign keys' => 'Chei externe',
|
||||
'Triggers' => 'Declanșatoare',
|
||||
'View' => 'Reprezentare',
|
||||
'Unable to select the table' => 'Nu am putut selecta date din tabel',
|
||||
'Invalid CSRF token. Send the form again.' => 'CSRF token imposibil. Retrimite forma.',
|
||||
@@ -78,24 +75,24 @@ $translations = array(
|
||||
'Unable to upload a file.' => 'Nu am putut încărca fișierul pe server.',
|
||||
'File upload' => 'Încarcă fișierul',
|
||||
'File uploads are disabled.' => 'Încărcarea fișierelor este interzisă.',
|
||||
'Routine has been called, %d row(s) affected.' => array('A fost executată procedură, %d înscriere a fost modificată.', 'A fost executată procedură, %d înscrieri au fost modificate.'),
|
||||
'Routine has been called, %d row(s) affected.' => array('A fost executată procedura, %d înscriere a fost modificată.', 'A fost executată procedura, %d înscrieri au fost modificate.'),
|
||||
'Call' => 'Apelează',
|
||||
'No extension' => 'Nu este extensie',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Nu este aviabilă nici o extensie suportată (%s).',
|
||||
'Session support must be enabled.' => 'Sesiunile trebuie să fie pornite.',
|
||||
'Session expired, please login again.' => 'Timpul sesiunii a expirat, rog să te loghezi din nou.',
|
||||
'Session expired, please login again.' => 'Timpul sesiunii a expirat, rog să vă conectați din nou.',
|
||||
'Text length' => 'Lungimea textului',
|
||||
'Foreign key has been dropped.' => 'Chei extern a fost șters.',
|
||||
'Foreign key has been altered.' => 'Chei extern a fost modificat.',
|
||||
'Foreign key has been created.' => 'Chei extern a fost creat.',
|
||||
'Foreign key' => 'Chei extern',
|
||||
'Foreign key has been dropped.' => 'Cheia externă a fost ștearsă.',
|
||||
'Foreign key has been altered.' => 'Cheia externă a fost modificată.',
|
||||
'Foreign key has been created.' => 'Cheia externă a fost creată.',
|
||||
'Foreign key' => 'Cheie externă',
|
||||
'Target table' => 'Tabela scop',
|
||||
'Change' => 'Modifică',
|
||||
'Source' => 'Sursă',
|
||||
'Target' => 'Scop',
|
||||
'Add column' => 'Adaugă coloană',
|
||||
'Alter' => 'Modifică',
|
||||
'Add foreign key' => 'Adaugă chei extern',
|
||||
'Add foreign key' => 'Adaugă cheie externă',
|
||||
'ON DELETE' => 'La ștergere',
|
||||
'ON UPDATE' => 'La modificare',
|
||||
'Index Type' => 'Tipul indexului',
|
||||
@@ -103,11 +100,11 @@ $translations = array(
|
||||
'View has been dropped.' => 'Reprezentarea a fost ștearsă.',
|
||||
'View has been altered.' => 'Reprezentarea a fost modificată.',
|
||||
'View has been created.' => 'Reprezentarea a fost creată.',
|
||||
'Alter view' => 'Modifică reprezentare',
|
||||
'Alter view' => 'Modifică reprezentarea',
|
||||
'Create view' => 'Crează reprezentare',
|
||||
'Name' => 'Titlu',
|
||||
'Process list' => 'Lista proceselor',
|
||||
'%d process(es) have been killed.' => array('A fost finisat %d proces.', 'Au fost finisate %d procese.'),
|
||||
'%d process(es) have been killed.' => array('A fost terminat %d proces.', 'Au fost terminate %d procese.'),
|
||||
'Kill' => 'Termină',
|
||||
'Parameter name' => 'Numele parametrului',
|
||||
'Database schema' => 'Schema bazei de date',
|
||||
@@ -119,7 +116,7 @@ $translations = array(
|
||||
'Alter function' => 'Modifică funcția',
|
||||
'Alter procedure' => 'Modifică procedura',
|
||||
'Return type' => 'Tipul returnării',
|
||||
'Add trigger' => 'Adaugă trigger',
|
||||
'Add trigger' => 'Adaugă trigger (declanșator)',
|
||||
'Trigger has been dropped.' => 'Triggerul a fost șters.',
|
||||
'Trigger has been altered.' => 'Triggerul a fost modificat.',
|
||||
'Trigger has been created.' => 'Triggerul a fost creat.',
|
||||
@@ -130,8 +127,8 @@ $translations = array(
|
||||
'%s version: %s through PHP extension %s' => 'Versiunea %s: %s cu extensia PHP %s',
|
||||
'%d row(s)' => array('%d înscriere', '%d înscrieri'),
|
||||
'Remove' => 'Șterge',
|
||||
'Are you sure?' => 'Ești precis?',
|
||||
'Privileges' => 'Privelegii',
|
||||
'Are you sure?' => 'Sunteți sigur(ă)?',
|
||||
'Privileges' => 'Privilegii',
|
||||
'Create user' => 'Crează utilizator',
|
||||
'User has been dropped.' => 'Utilizatorul a fost șters.',
|
||||
'User has been altered.' => 'Utilizatorul a fost modificat.',
|
||||
@@ -148,7 +145,7 @@ $translations = array(
|
||||
'Functions' => 'Funcții',
|
||||
'Aggregation' => 'Agregare',
|
||||
'Export' => 'Export',
|
||||
'Output' => 'Date de eșire',
|
||||
'Output' => 'Date de ieșire',
|
||||
'open' => 'deschide',
|
||||
'save' => 'salvează',
|
||||
'Format' => 'Format',
|
||||
@@ -164,12 +161,12 @@ $translations = array(
|
||||
'Events' => 'Evenimente',
|
||||
'Schedule' => 'Program',
|
||||
'Start' => 'Început',
|
||||
'End' => 'Svârșit',
|
||||
'End' => 'Sfârșit',
|
||||
'Status' => 'Stare',
|
||||
'On completion preserve' => 'Salvează după finisare',
|
||||
'Tables and views' => 'Tabele și reprezentări',
|
||||
'Data Length' => 'Cantitatea de date',
|
||||
'Index Length' => 'Cantitatea de indexe',
|
||||
'Index Length' => 'Cantitatea de indecși',
|
||||
'Data Free' => 'Spațiu liber',
|
||||
'Collation' => 'Colaționare',
|
||||
'Analyze' => 'Analizează',
|
||||
@@ -180,6 +177,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'Tabelele au fost curățate.',
|
||||
'Rows' => 'Înscrieri',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Tabelele au fost mutate.',
|
||||
'Move to other database' => 'Mută în altă bază de date',
|
||||
'Move' => 'Mută',
|
||||
@@ -187,7 +185,7 @@ $translations = array(
|
||||
'Save and continue edit' => 'Salvează și continuă editarea',
|
||||
'original' => 'original',
|
||||
'%d item(s) have been affected.' => array('A fost modificată %d înscriere.', 'Au fost modificate %d înscrieri.'),
|
||||
'whole result' => 'tot rezultatul',
|
||||
'Whole result' => 'Tot rezultatul',
|
||||
'Tables have been dropped.' => 'Tabelele au fost șterse.',
|
||||
'Clone' => 'Clonează',
|
||||
'Partition by' => 'Împarte',
|
||||
@@ -196,8 +194,8 @@ $translations = array(
|
||||
'Values' => 'Parametru',
|
||||
'%d row(s) have been imported.' => array('%d rînd importat.', '%d rînduri importate.'),
|
||||
'Import' => 'Importă',
|
||||
'Stop on error' => 'Opreștete la eroare',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Numărul maxim de înscrieri disponibile a fost atins. Majorați %s și %s.',
|
||||
'Stop on error' => 'Se oprește la greșeală',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Numărul maxim de înscrieri disponibile a fost atins. Majorați %s.',
|
||||
'anywhere' => 'oriunde',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5.$3.$1',
|
||||
@@ -207,11 +205,11 @@ $translations = array(
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Coloanele ar trebui să aibă aceleaşi tipuri de date, trebuie să existe date de referinţă și un index pe coloanela-ţintă.',
|
||||
'Relations' => 'Relații',
|
||||
'Run file' => 'Execută fișier',
|
||||
'Clear' => 'Curățp',
|
||||
'Clear' => 'Curăță',
|
||||
'Maximum allowed file size is %sB.' => 'Fișierul maxim admis - %sO.',
|
||||
'Numbers' => 'Număr',
|
||||
'Date and time' => 'Data și timpul',
|
||||
'Strings' => 'Șire de caractere',
|
||||
'Strings' => 'Șiruri de caractere',
|
||||
'Binary' => 'Tip binar',
|
||||
'Lists' => 'Liste',
|
||||
'Editor' => 'Editor',
|
||||
@@ -219,14 +217,13 @@ $translations = array(
|
||||
'From' => 'De la',
|
||||
'Subject' => 'Pentru',
|
||||
'Send' => 'Trimite',
|
||||
'%d e-mail(s) have been sent.' => array('A fost trimisă %d scrisoare.', 'Au fost trimise %d scrisori.'),
|
||||
'%d e-mail(s) have been sent.' => array('A fost trimis %d mail.', 'Au fost trimise %d mail-uri.'),
|
||||
'Webserver file %s' => 'Fișierul %s pe server',
|
||||
'File does not exist.' => 'Așa fișier nu există.',
|
||||
'File does not exist.' => 'Acest fișier nu există.',
|
||||
'%d in total' => 'În total %d',
|
||||
'Permanent login' => 'Logare permanentă',
|
||||
'Databases have been dropped.' => 'Baze de date au fost șterse.',
|
||||
'Databases have been dropped.' => 'Bazele de date au fost șterse.',
|
||||
'Search data in tables' => 'Caută în tabele',
|
||||
'schema' => 'schema',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'Modifică schema',
|
||||
'Create schema' => 'Crează o schemă',
|
||||
@@ -248,17 +245,16 @@ $translations = array(
|
||||
'Use edit link to modify this value.' => 'Valoare poate fi modificată cu ajutorul butonului «modifică».',
|
||||
'last' => 'ultima',
|
||||
'From server' => 'De pe server',
|
||||
'System' => 'Sistema',
|
||||
'System' => 'Sistem',
|
||||
'Select data' => 'Selectează',
|
||||
'Show structure' => 'Arată structura',
|
||||
'empty' => 'gol',
|
||||
'Network' => 'Rețea',
|
||||
'Geometry' => 'Geometrie',
|
||||
'File exists.' => 'Fișierul deja există.',
|
||||
'File exists.' => 'Fișierul există deja.',
|
||||
'Attachments' => 'Fișiere atașate',
|
||||
'%d query(s) executed OK.' => array('%d query executat.', '%d query-uri executate cu succes.'),
|
||||
'Show only errors' => 'Arată doar greșeli',
|
||||
'Last page' => 'Ultima pagină',
|
||||
'Refresh' => 'Împrospătează',
|
||||
'Invalid schema.' => 'Schemă incorectă.',
|
||||
'Please use one of the extensions %s.' => 'Folosiți una din următoarele extensii %s.',
|
||||
|
||||
@@ -7,15 +7,14 @@ $translations = array(
|
||||
'Username' => 'Имя пользователя',
|
||||
'Password' => 'Пароль',
|
||||
'Select database' => 'Выбрать базу данных',
|
||||
'Invalid database.' => 'Плохая база данных.',
|
||||
'Create new database' => 'Создать новую базу данных',
|
||||
'Invalid database.' => 'Неверная база данных.',
|
||||
'Table has been dropped.' => 'Таблица была удалена.',
|
||||
'Table has been altered.' => 'Таблица была изменена.',
|
||||
'Table has been created.' => 'Таблица была создана.',
|
||||
'Alter table' => 'Изменить таблицу',
|
||||
'Create table' => 'Создать таблицу',
|
||||
'Table name' => 'Название таблицы',
|
||||
'engine' => 'тип',
|
||||
'engine' => 'Тип таблицы',
|
||||
'collation' => 'режим сопоставления',
|
||||
'Column name' => 'Название поля',
|
||||
'Type' => 'Тип',
|
||||
@@ -30,27 +29,25 @@ $translations = array(
|
||||
'Database has been altered.' => 'База данных была изменена.',
|
||||
'Alter database' => 'Изменить базу данных',
|
||||
'Create database' => 'Создать базу данных',
|
||||
'SQL command' => 'SQL запрос',
|
||||
'Dump' => 'Дамп',
|
||||
'SQL command' => 'SQL-запрос',
|
||||
'Logout' => 'Выйти',
|
||||
'database' => 'база данных',
|
||||
'Use' => 'Выбрать',
|
||||
'No tables.' => 'В базе данных нет таблиц.',
|
||||
'select' => 'выбрать',
|
||||
'Create new table' => 'Создать новую таблицу',
|
||||
'Item has been deleted.' => 'Запись удалена.',
|
||||
'Item has been updated.' => 'Запись обновлена.',
|
||||
'Item%s has been inserted.' => 'Запись%s была вставлена.',
|
||||
'Edit' => 'Редактировать',
|
||||
'Insert' => 'Вставить',
|
||||
'Save and insert next' => 'Сохранить и вставить еще',
|
||||
'Save and insert next' => 'Сохранить и вставить ещё',
|
||||
'Delete' => 'Стереть',
|
||||
'Database' => 'База данных',
|
||||
'Routines' => 'Хранимые процедуры и функции',
|
||||
'Indexes have been altered.' => 'Индексы изменены.',
|
||||
'Indexes' => 'Индексы',
|
||||
'Alter indexes' => 'Изменить индексы',
|
||||
'Add next' => 'Добавить еще',
|
||||
'Add next' => 'Добавить ещё',
|
||||
'Language' => 'Язык',
|
||||
'Select' => 'Выбрать',
|
||||
'New item' => 'Новая запись',
|
||||
@@ -62,7 +59,7 @@ $translations = array(
|
||||
'Action' => 'Действие',
|
||||
'edit' => 'редактировать',
|
||||
'Page' => 'Страница',
|
||||
'Query executed OK, %d row(s) affected.' => array('Запрос завершен, изменена %d запись.', 'Запрос завершен, изменены %d записи.', 'Запрос завершен, изменено %d записей.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Запрос завершён, изменена %d запись.', 'Запрос завершён, изменены %d записи.', 'Запрос завершён, изменено %d записей.'),
|
||||
'Error in query' => 'Ошибка в запросe',
|
||||
'Execute' => 'Выполнить',
|
||||
'Table' => 'Таблица',
|
||||
@@ -70,7 +67,7 @@ $translations = array(
|
||||
'Triggers' => 'Триггеры',
|
||||
'View' => 'Представление',
|
||||
'Unable to select the table' => 'Не удалось получить данные из таблицы',
|
||||
'Invalid CSRF token. Send the form again.' => 'Недействительный CSRF токен. Отправите форму ещё раз.',
|
||||
'Invalid CSRF token. Send the form again.' => 'Недействительный CSRF-токен. Отправите форму ещё раз.',
|
||||
'Comment' => 'Комментарий',
|
||||
'Default values' => 'Значения по умолчанию',
|
||||
'%d byte(s)' => array('%d байт', '%d байта', '%d байтов'),
|
||||
@@ -81,25 +78,25 @@ $translations = array(
|
||||
'Routine has been called, %d row(s) affected.' => array('Была вызвана процедура, %d запись была изменена.', 'Была вызвана процедура, %d записи было изменено.', 'Была вызвана процедура, %d записей было изменено.'),
|
||||
'Call' => 'Вызвать',
|
||||
'No extension' => 'Нет расширений',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Не доступно ни одного расширения из поддерживаемых (%s).',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Недоступно ни одного расширения из поддерживаемых (%s).',
|
||||
'Session support must be enabled.' => 'Сессии должны быть включены.',
|
||||
'Session expired, please login again.' => 'Срок действия сесси истек, нужно снова войти в систему.',
|
||||
'Session expired, please login again.' => 'Срок действия сессии истёк, нужно снова войти в систему.',
|
||||
'Text length' => 'Длина текста',
|
||||
'Foreign key has been dropped.' => 'Внешний ключ был удален.',
|
||||
'Foreign key has been altered.' => 'Внешний ключ был изменен.',
|
||||
'Foreign key has been dropped.' => 'Внешний ключ был удалён.',
|
||||
'Foreign key has been altered.' => 'Внешний ключ был изменён.',
|
||||
'Foreign key has been created.' => 'Внешний ключ был создан.',
|
||||
'Foreign key' => 'Внешний ключ',
|
||||
'Target table' => 'Результирующая таблица',
|
||||
'Change' => 'Изменить',
|
||||
'Source' => 'Источник',
|
||||
'Target' => 'Цель',
|
||||
'Add column' => 'Добавить колонку',
|
||||
'Add column' => 'Добавить поле',
|
||||
'Alter' => 'Изменить',
|
||||
'Add foreign key' => 'Добавить внешний ключ',
|
||||
'ON DELETE' => 'При стирании',
|
||||
'ON UPDATE' => 'При обновлении',
|
||||
'Index Type' => 'Тип индекса',
|
||||
'Column (length)' => 'Колонка (длина)',
|
||||
'Column (length)' => 'Поле (длина)',
|
||||
'View has been dropped.' => 'Представление было удалено.',
|
||||
'View has been altered.' => 'Представление было изменено.',
|
||||
'View has been created.' => 'Представление было создано.',
|
||||
@@ -107,7 +104,7 @@ $translations = array(
|
||||
'Create view' => 'Создать представление',
|
||||
'Name' => 'Название',
|
||||
'Process list' => 'Список процессов',
|
||||
'%d process(es) have been killed.' => array('Был завершен %d процесс.', 'Было завершено %d процесса.', 'Было завершёно %d процессов.'),
|
||||
'%d process(es) have been killed.' => array('Был завершён %d процесс.', 'Было завершено %d процесса.', 'Было завершено %d процессов.'),
|
||||
'Kill' => 'Завершить',
|
||||
'Parameter name' => 'Название параметра',
|
||||
'Database schema' => 'Схема базы данных',
|
||||
@@ -120,8 +117,8 @@ $translations = array(
|
||||
'Alter procedure' => 'Изменить процедуру',
|
||||
'Return type' => 'Возвращаемый тип',
|
||||
'Add trigger' => 'Добавить триггер',
|
||||
'Trigger has been dropped.' => 'Триггер был удален.',
|
||||
'Trigger has been altered.' => 'Триггер был изменен.',
|
||||
'Trigger has been dropped.' => 'Триггер был удалён.',
|
||||
'Trigger has been altered.' => 'Триггер был изменён.',
|
||||
'Trigger has been created.' => 'Триггер был создан.',
|
||||
'Alter trigger' => 'Изменить триггер',
|
||||
'Create trigger' => 'Создать триггер',
|
||||
@@ -133,15 +130,15 @@ $translations = array(
|
||||
'Are you sure?' => 'Вы уверены?',
|
||||
'Privileges' => 'Полномочия',
|
||||
'Create user' => 'Создать пользователя',
|
||||
'User has been dropped.' => 'Пользователь был удален.',
|
||||
'User has been altered.' => 'Пользователь был изменен.',
|
||||
'User has been dropped.' => 'Пользователь был удалён.',
|
||||
'User has been altered.' => 'Пользователь был изменён.',
|
||||
'User has been created.' => 'Пользователь был создан.',
|
||||
'Hashed' => 'Хешировано',
|
||||
'Column' => 'Колонка',
|
||||
'Column' => 'поле',
|
||||
'Routine' => 'Процедура',
|
||||
'Grant' => 'Позволить',
|
||||
'Revoke' => 'Запретить',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Слишком большой объем POST-данных. Пошлите меньший объем данных или увеличьте параметр конфигурационной директивы %s.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Слишком большой объем POST-данных. Пошлите меньший объём данных или увеличьте параметр конфигурационной директивы %s.',
|
||||
'Logged as: %s' => 'Вы вошли как: %s',
|
||||
'Move up' => 'Переместить вверх',
|
||||
'Move down' => 'Переместить вниз',
|
||||
@@ -180,14 +177,15 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'Таблицы были очищены.',
|
||||
'Rows' => 'Строк',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'Таблицы были перемещены.',
|
||||
'Move to other database' => 'Переместить в другою базу данных',
|
||||
'Move to other database' => 'Переместить в другую базу данных',
|
||||
'Move' => 'Переместить',
|
||||
'Engine' => 'Тип',
|
||||
'Engine' => 'Тип таблиц',
|
||||
'Save and continue edit' => 'Сохранить и продолжить редактирование',
|
||||
'original' => 'исходный',
|
||||
'%d item(s) have been affected.' => array('Была изменена %d запись.', 'Были изменены %d записи.', 'Было изменено %d записей.'),
|
||||
'whole result' => 'весь результат',
|
||||
'Whole result' => 'Весь результат',
|
||||
'Tables have been dropped.' => 'Таблицы были удалены.',
|
||||
'Clone' => 'Клонировать',
|
||||
'Partition by' => 'Разделить по',
|
||||
@@ -197,27 +195,27 @@ $translations = array(
|
||||
'%d row(s) have been imported.' => array('Импортирована %d строка.', 'Импортировано %d строки.', 'Импортировано %d строк.'),
|
||||
'Import' => 'Импорт',
|
||||
'Stop on error' => 'Остановить при ошибке',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Достигнуто максимальное значение количества доступных полей. Увеличьте %s и %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Достигнуто максимальное значение количества доступных полей. Увеличьте %s.',
|
||||
'anywhere' => 'в любом месте',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$5.$3.$1',
|
||||
'[yyyy]-mm-dd' => 'дд.мм.[гггг]',
|
||||
'History' => 'История',
|
||||
'Variables' => 'Переменные',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Колонки должны иметь одинаковые типы данных, в результирующей колонке должен быть индекс, данные для импорта должны существовать.',
|
||||
'Relations' => 'Реляции',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Поля должны иметь одинаковые типы данных, в результирующем поле должен быть индекс, данные для импорта должны существовать.',
|
||||
'Relations' => 'Отношения',
|
||||
'Run file' => 'Запустить файл',
|
||||
'Clear' => 'Очистить',
|
||||
'Maximum allowed file size is %sB.' => 'Максимальный разрешенный размер файла - %sB.',
|
||||
'Numbers' => 'Число',
|
||||
'Maximum allowed file size is %sB.' => 'Максимальный разрешённый размер файла — %sB.',
|
||||
'Numbers' => 'Числа',
|
||||
'Date and time' => 'Дата и время',
|
||||
'Strings' => 'Строки',
|
||||
'Binary' => 'Двоичный тип',
|
||||
'Lists' => 'Списки',
|
||||
'Editor' => 'Редактор',
|
||||
'E-mail' => 'Электропочта',
|
||||
'E-mail' => 'Эл. почта',
|
||||
'From' => 'От',
|
||||
'Subject' => 'Кому',
|
||||
'Subject' => 'Тема',
|
||||
'Send' => 'Послать',
|
||||
'%d e-mail(s) have been sent.' => array('Было отправлено %d письмо.', 'Было отправлено %d письма.', 'Было отправлено %d писем.'),
|
||||
'Webserver file %s' => 'Файл %s на вебсервере',
|
||||
@@ -226,7 +224,6 @@ $translations = array(
|
||||
'Permanent login' => 'Оставаться в системе',
|
||||
'Databases have been dropped.' => 'Базы данных удалены.',
|
||||
'Search data in tables' => 'Поиск в таблицах',
|
||||
'schema' => 'схема',
|
||||
'Schema' => 'Схема',
|
||||
'Alter schema' => 'Изменить схему',
|
||||
'Create schema' => 'Новая схема',
|
||||
@@ -244,7 +241,7 @@ $translations = array(
|
||||
'Alter type' => 'Изменить тип',
|
||||
'Type has been dropped.' => 'Тип удален.',
|
||||
'Type has been created.' => 'Создан новый тип.',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+кликни по значению, чтобы его изменить.',
|
||||
'Ctrl+click on a value to modify it.' => 'Выполните Ctrl+Щелчок мышью по значению, чтобы его изменить.',
|
||||
'Use edit link to modify this value.' => 'Изменить это значение можно с помощью ссылки «изменить».',
|
||||
'last' => 'последняя',
|
||||
'From server' => 'С сервера',
|
||||
@@ -255,10 +252,9 @@ $translations = array(
|
||||
'Network' => 'Сеть',
|
||||
'Geometry' => 'Геометрия',
|
||||
'File exists.' => 'Файл уже существует.',
|
||||
'Attachments' => 'Прикрепленные файлы',
|
||||
'Attachments' => 'Прикреплённые файлы',
|
||||
'%d query(s) executed OK.' => array('%d запрос выполнен успешно.', '%d запроса выполнено успешно.', '%d запросов выполнено успешно.'),
|
||||
'Show only errors' => 'Только ошибки',
|
||||
'Last page' => 'Последняя страница',
|
||||
'Refresh' => 'Обновить',
|
||||
'Invalid schema.' => 'Неправильная схема.',
|
||||
'Please use one of the extensions %s.' => 'Используйте одно из этих расширений %s.',
|
||||
@@ -269,4 +265,39 @@ $translations = array(
|
||||
'Permanent link' => 'Постоянная ссылка',
|
||||
'Edit all' => 'Редактировать всё',
|
||||
'HH:MM:SS' => 'ЧЧ:ММ:СС',
|
||||
'Tables have been optimized.' => 'Таблицы оптимизированы.',
|
||||
'Materialized view' => 'Материализованное представление',
|
||||
'Vacuum' => 'Вакуум',
|
||||
'Selected' => 'Выбранные',
|
||||
'File must be in UTF-8 encoding.' => 'Файл должен быть в кодировке UTF-8.',
|
||||
'Modify' => 'Изменить',
|
||||
'Loading' => 'Загрузка',
|
||||
'Load more data' => 'Загрузить ещё данные',
|
||||
'ATTACH queries are not supported.' => 'ATTACH-запросы не поддерживаются.',
|
||||
'%d / ' => '%d / ',
|
||||
'Limit rows' => 'Лимит строк',
|
||||
'Default value' => 'Значение по умолчанию',
|
||||
'Full table scan' => 'Анализ полной таблицы',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Слишком много неудачных попыток входа. Попробуйте снова через %d минуту.', 'Слишком много неудачных попыток входа. Попробуйте снова через %d минуты.', 'Слишком много неудачных попыток входа. Попробуйте снова через %d минут.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Мастер-пароль истёк. <a href="https://www.adminer.org/en/extension/"%s>Реализуйте</a> метод %s, чтобы сделать его постоянным.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Если вы не посылали этот запрос из Adminer, закройте эту страницу.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Вы можете закачать большой SQL-файл по FTP и затем импортировать его с сервера.',
|
||||
'Size' => 'Размер',
|
||||
'Compute' => 'Вычислить',
|
||||
'You are offline.' => 'Вы не выполнили вход.',
|
||||
'You have no privileges to update this table.' => 'У вас нет прав на обновление этой таблицы.',
|
||||
'Saving' => 'Сохранение',
|
||||
'yes' => 'Да',
|
||||
'no' => 'Нет',
|
||||
'Drop %s?' => 'Удалить %s?',
|
||||
'overwrite' => 'перезаписать',
|
||||
'DB' => 'DB',
|
||||
'Warnings' => 'Предупреждения',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer не поддерживает доступ к базе данных без пароля, <a href="https://www.adminer.org/en/password/"%s>больше информации</a>.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Спасибо за использование Adminer, рассмотрите возможность <a href="https://www.adminer.org/en/donation/">пожертвования</a>.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Действие будет выполнено после успешного входа в систему с теми же учетными данными.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Подключение к привилегированным портам не допускается.',
|
||||
'There is a space in the input password which might be the cause.' => 'В введеном пароле есть пробел, это может быть причиною.',
|
||||
'Unknown error.' => 'Неизвестная ошибка.',
|
||||
'Database does not support password.' => 'База данных не поддерживает пароль.',
|
||||
);
|
||||
|
||||
@@ -8,7 +8,6 @@ $translations = array(
|
||||
'Password' => 'Heslo',
|
||||
'Select database' => 'Vybrať databázu',
|
||||
'Invalid database.' => 'Nesprávna databáza.',
|
||||
'Create new database' => 'Vytvoriť novú databázu',
|
||||
'Table has been dropped.' => 'Tabuľka bola odstránená.',
|
||||
'Table has been altered.' => 'Tabuľka bola zmenená.',
|
||||
'Table has been created.' => 'Tabuľka bola vytvorená.',
|
||||
@@ -32,13 +31,11 @@ $translations = array(
|
||||
'Alter database' => 'Zmeniť databázu',
|
||||
'Create database' => 'Vytvoriť databázu',
|
||||
'SQL command' => 'SQL príkaz',
|
||||
'Dump' => 'Export',
|
||||
'Logout' => 'Odhlásiť',
|
||||
'database' => 'databáza',
|
||||
'Use' => 'Vybrať',
|
||||
'No tables.' => 'Žiadne tabuľky.',
|
||||
'select' => 'vypísať',
|
||||
'Create new table' => 'Vytvoriť novú tabuľku',
|
||||
'Item has been deleted.' => 'Položka bola vymazaná.',
|
||||
'Item has been updated.' => 'Položka bola aktualizovaná.',
|
||||
'Item%s has been inserted.' => 'Položka%s bola vložená.',
|
||||
@@ -181,6 +178,7 @@ $translations = array(
|
||||
'Data Free' => 'Voľné miesto',
|
||||
'Rows' => 'Riadky',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Analyze' => 'Analyzovať',
|
||||
'Optimize' => 'Optimalizovať',
|
||||
'Check' => 'Skontrolovať',
|
||||
@@ -189,7 +187,7 @@ $translations = array(
|
||||
'Move to other database' => 'Presunúť do inej databázy',
|
||||
'Move' => 'Presunúť',
|
||||
'%d item(s) have been affected.' => '%d položiek bolo ovplyvnených.',
|
||||
'whole result' => 'celý výsledok',
|
||||
'Whole result' => 'Celý výsledok',
|
||||
'Clone' => 'Klonovať',
|
||||
'Partition by' => 'Rozdeliť podľa',
|
||||
'Partitions' => 'Oddiely',
|
||||
@@ -198,7 +196,7 @@ $translations = array(
|
||||
'%d row(s) have been imported.' => array('Bol importovaný %d záznam.', 'Boli importované %d záznamy.', 'Bolo importovaných %d záznamov.'),
|
||||
'Import' => 'Import',
|
||||
'Stop on error' => 'Zastaviť pri chybe',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Bol prekročený maximálny počet povolených polí. Zvýšte prosím %s a %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Bol prekročený maximálny počet povolených polí. Zvýšte prosím %s.',
|
||||
'anywhere' => 'kdekoľvek',
|
||||
'%.3f s' => '%.3f s',
|
||||
'$1-$3-$5' => '$6.$4.$1',
|
||||
@@ -231,7 +229,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Schéma bola odstránená.',
|
||||
'Schema has been created.' => 'Schéma bola vytvorená.',
|
||||
'Schema has been altered.' => 'Schéma bola zmenená.',
|
||||
'schema' => 'schéma',
|
||||
'Schema' => 'Schéma',
|
||||
'Sequences' => 'Sekvencia',
|
||||
'Create sequence' => 'Vytvoriť sekvenciu',
|
||||
@@ -258,7 +255,6 @@ $translations = array(
|
||||
'Attachments' => 'Prílohy',
|
||||
'%d query(s) executed OK.' => array('Bol vykonaný %d dotaz.', 'Boli vykonané %d dotazy.', 'Bolo vykonaných %d dotazov.'),
|
||||
'Show only errors' => 'Zobraziť iba chyby',
|
||||
'Last page' => 'Posledná stránka',
|
||||
'Refresh' => 'Obnoviť',
|
||||
'Invalid schema.' => 'Neplatné schéma.',
|
||||
'Please use one of the extensions %s.' => 'Prosím vyberte jednu z koncoviek %s.',
|
||||
|
||||
@@ -65,7 +65,6 @@ $translations = array(
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Preveliko podatkov za POST. Zmanjšajte število podatkov ali povečajte nastavitev za %s.',
|
||||
|
||||
'Export' => 'Izvozi',
|
||||
'Dump' => 'Izvozi',
|
||||
'Output' => 'Izhod rezultata',
|
||||
'open' => 'odpri',
|
||||
'save' => 'shrani',
|
||||
@@ -77,7 +76,6 @@ $translations = array(
|
||||
'Use' => 'Uporabi',
|
||||
'Select database' => 'Izberi bazo',
|
||||
'Invalid database.' => 'Neveljavna baza.',
|
||||
'Create new database' => 'Ustvari novo bazo',
|
||||
'Database has been dropped.' => 'Baza je zavržena.',
|
||||
'Databases have been dropped.' => 'Baze so zavržene.',
|
||||
'Database has been created.' => 'Baza je ustvarjena.',
|
||||
@@ -89,6 +87,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Pogon',
|
||||
'Collation' => 'Zbiranje',
|
||||
'Data Length' => 'Velikost podatkov',
|
||||
@@ -140,7 +139,6 @@ $translations = array(
|
||||
'No tables.' => 'Ni tabel.',
|
||||
'Alter table' => 'Spremeni tabelo',
|
||||
'Create table' => 'Ustvari tabelo',
|
||||
'Create new table' => 'Ustvari novo tabelo',
|
||||
'Table has been dropped.' => 'Tabela je zavržena.',
|
||||
'Tables have been dropped.' => 'Tabele so zavržene.',
|
||||
'Table has been altered.' => 'Tabela je spremenjena.',
|
||||
@@ -161,7 +159,7 @@ $translations = array(
|
||||
'Move up' => 'Premakni gor',
|
||||
'Move down' => 'Premakni dol',
|
||||
'Remove' => 'Odstrani',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Največje število dovoljenih polje je preseženo. Prosimo, povečajte %s in %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Največje število dovoljenih polje je preseženo. Prosimo, povečajte %s.',
|
||||
|
||||
'Partition by' => 'Porazdeli po',
|
||||
'Partitions' => 'Porazdelitve',
|
||||
@@ -227,8 +225,7 @@ $translations = array(
|
||||
'%d row(s)' => array('%d vrstica', '%d vrstici', '%d vrstice', '%d vrstic'),
|
||||
'Page' => 'Stran',
|
||||
'last' => 'Zadnja',
|
||||
'Last page' => 'Zadnja stran',
|
||||
'whole result' => 'cel razultat',
|
||||
'Whole result' => 'Cel razultat',
|
||||
'%d byte(s)' => array('%d bajt', '%d bajta', '%d bajti', '%d bajtov'),
|
||||
|
||||
'Import' => 'Uvozi',
|
||||
@@ -290,7 +287,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Shema je zavržena.',
|
||||
'Schema has been created.' => 'Shema je ustvarjena.',
|
||||
'Schema has been altered.' => 'Shema je spremenjena.',
|
||||
'schema' => 'shema',
|
||||
'Schema' => 'Shema',
|
||||
'Invalid schema.' => 'Neveljavna shema.',
|
||||
|
||||
|
||||
@@ -66,7 +66,6 @@ $translations = array(
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Превелики POST податак. Морате да смањите податак или повећајте вредност конфигурационе директиве %s.',
|
||||
|
||||
'Export' => 'Извоз',
|
||||
'Dump' => 'Истовар',
|
||||
'Output' => 'Испис',
|
||||
'open' => 'отвори',
|
||||
'save' => 'сачувај',
|
||||
@@ -78,7 +77,6 @@ $translations = array(
|
||||
'Use' => 'Користи',
|
||||
'Select database' => 'Изаберите базу',
|
||||
'Invalid database.' => 'Неисправна база података.',
|
||||
'Create new database' => 'Направи нову базу података',
|
||||
'Database has been dropped.' => 'База података је избрисана.',
|
||||
'Databases have been dropped.' => 'Базњ података су избрисане.',
|
||||
'Database has been created.' => 'База података је креирана.',
|
||||
@@ -93,6 +91,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Механизам',
|
||||
'Collation' => 'Сравњивање',
|
||||
'Data Length' => 'Дужина података',
|
||||
@@ -144,7 +143,6 @@ $translations = array(
|
||||
'No tables.' => 'Без табела.',
|
||||
'Alter table' => 'Уреди табелу',
|
||||
'Create table' => 'Направи табелу',
|
||||
'Create new table' => 'направи нову табелу',
|
||||
'Table has been dropped.' => 'Табела је избрисана.',
|
||||
'Tables have been dropped.' => 'Табеле су избрисане.',
|
||||
'Tables have been optimized.' => 'Табеле су оптимизоване.',
|
||||
@@ -166,7 +164,7 @@ $translations = array(
|
||||
'Move up' => 'Помери на горе',
|
||||
'Move down' => 'Помери на доле',
|
||||
'Remove' => 'Уклони',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Премашен је максимални број дозвољених поља. Молим увећајте %s и %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Премашен је максимални број дозвољених поља. Молим увећајте %s.',
|
||||
|
||||
'Partition by' => 'Подели по',
|
||||
'Partitions' => 'Поделе',
|
||||
@@ -233,10 +231,9 @@ $translations = array(
|
||||
'%d row(s)' => array('%d ред', '%d реда', '%d редова'),
|
||||
'Page' => 'Страна',
|
||||
'last' => 'последња',
|
||||
'Last page' => 'Последња страна',
|
||||
'Loading' => 'Учитавам',
|
||||
'Load more data' => 'Учитавам још података',
|
||||
'whole result' => 'цео резултат',
|
||||
'Loading' => 'Учитавам',
|
||||
'Load more data' => 'Учитавам још података',
|
||||
'Whole result' => 'Цео резултат',
|
||||
'%d byte(s)' => array('%d бајт', '%d бајта', '%d бајтова'),
|
||||
|
||||
'Import' => 'Увоз',
|
||||
@@ -302,7 +299,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Шема је избрисана.',
|
||||
'Schema has been created.' => 'Шема је креирана.',
|
||||
'Schema has been altered.' => 'Шема је измењена.',
|
||||
'schema' => 'шема',
|
||||
'Schema' => 'Шема',
|
||||
'Invalid schema.' => 'Шема није исправна.',
|
||||
|
||||
|
||||
349
adminer/lang/sv.inc.php
Normal file
349
adminer/lang/sv.inc.php
Normal file
@@ -0,0 +1,349 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'System',
|
||||
'Server' => 'Server',
|
||||
'Username' => 'Användarnamn',
|
||||
'Password' => 'Lösenord',
|
||||
'Permanent login' => 'Permanent inloggning',
|
||||
'Login' => 'Logga in',
|
||||
'Logout' => 'Logga ut',
|
||||
'Logged as: %s' => 'Inloggad som: %s',
|
||||
'Logout successful.' => 'Du är nu utloggad.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Tack för att du använder Adminer, vänligen fundera över att <a href="https://www.adminer.org/en/donation/">donera</a>.',
|
||||
'Invalid credentials.' => 'Ogiltiga inloggningsuppgifter.',
|
||||
'There is a space in the input password which might be the cause.' => 'Det finns ett mellanslag i lösenordet, vilket kan vara anledningen.',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer tillåter inte att ansluta till en databas utan lösenord. <a href="https://www.adminer.org/en/password/"%s>Mer information</a>.',
|
||||
'Database does not support password.' => 'Databasen stödjer inte lösenord.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('För många misslyckade inloggningar, försök igen om %d minut.', 'För många misslyckade inloggningar, försök igen om %d minuter.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Huvudlösenordet har löpt ut. <a href="https://www.adminer.org/en/extension/"%s>Implementera</a> %s en metod för att göra det permanent.',
|
||||
'Language' => 'Språk',
|
||||
'Invalid CSRF token. Send the form again.' => 'Ogiltig CSRF-token. Skicka formuläret igen.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Om du inte skickade en förfrågan från Adminer så kan du stänga den här sidan.',
|
||||
'No extension' => 'Inget tillägg',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Inga av de PHP-tilläggen som stöds (%s) är tillgängliga.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Anslutning till privilegierade portar är inte tillåtet.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Stäng av %s eller sätt på %s eller %s tilläggen.',
|
||||
'Session support must be enabled.' => 'Support för sessioner måste vara på.',
|
||||
'Session expired, please login again.' => 'Session har löpt ut, vänligen logga in igen.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Åtgärden kommer att utföras efter en lyckad inloggning med samma inloggningsuppgifter.',
|
||||
'%s version: %s through PHP extension %s' => '%s version: %s genom PHP-tillägg %s',
|
||||
'Refresh' => 'Ladda om',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Privilegier',
|
||||
'Create user' => 'Skapa användare',
|
||||
'User has been dropped.' => 'Användare har blivit borttagen.',
|
||||
'User has been altered.' => 'Användare har blivit ändrad.',
|
||||
'User has been created.' => 'Användare har blivit skapad.',
|
||||
'Hashed' => 'Hashad',
|
||||
'Column' => 'Kolumn',
|
||||
'Routine' => 'Rutin',
|
||||
'Grant' => 'Tillåt',
|
||||
'Revoke' => 'Neka',
|
||||
|
||||
'Process list' => 'Processlista',
|
||||
'%d process(es) have been killed.' => array('%d process har avslutats.', '%d processer har avslutats.'),
|
||||
'Kill' => 'Avsluta',
|
||||
|
||||
'Variables' => 'Variabler',
|
||||
'Status' => 'Status',
|
||||
|
||||
'SQL command' => 'SQL-kommando',
|
||||
'%d query(s) executed OK.' => array('%d förfrågan lyckades.', '%d förfrågor lyckades.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Förfrågan lyckades, %d rad påverkades.', 'Förfrågan lyckades, %d rader påverkades.'),
|
||||
'No commands to execute.' => 'Inga kommandon att köra.',
|
||||
'Error in query' => 'Fel i förfrågan',
|
||||
'Unknown error.' => 'Okänt fel.',
|
||||
'Warnings' => 'Varningar',
|
||||
'ATTACH queries are not supported.' => 'ATTACH-förfrågor stöds inte.',
|
||||
'Execute' => 'Kör',
|
||||
'Stop on error' => 'Stanna på fel',
|
||||
'Show only errors' => 'Visa bara fel',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Historia',
|
||||
'Clear' => 'Rensa',
|
||||
'Edit all' => 'Redigera alla',
|
||||
|
||||
'File upload' => 'Ladda upp fil',
|
||||
'From server' => 'Från server',
|
||||
'Webserver file %s' => 'Serverfil %s',
|
||||
'Run file' => 'Kör fil',
|
||||
'File does not exist.' => 'Filen finns inte.',
|
||||
'File uploads are disabled.' => 'Filuppladdningar är avstängda.',
|
||||
'Unable to upload a file.' => 'Det går inte add ladda upp filen.',
|
||||
'Maximum allowed file size is %sB.' => 'Högsta tillåtna storlek är %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST-datan är för stor. Minska det eller höj %s-direktivet.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Du kan ladda upp en stor SQL-fil via FTP och importera det från servern.',
|
||||
'You are offline.' => 'Du är offline.',
|
||||
|
||||
'Export' => 'Exportera',
|
||||
'Output' => 'Utmatning',
|
||||
'open' => 'Öppna',
|
||||
'save' => 'Spara',
|
||||
'Saving' => 'Sparar',
|
||||
'Format' => 'Format',
|
||||
'Data' => 'Data',
|
||||
|
||||
'Database' => 'Databas',
|
||||
'database' => 'databas',
|
||||
'DB' => 'DB',
|
||||
'Use' => 'Använd',
|
||||
'Select database' => 'Välj databas',
|
||||
'Invalid database.' => 'Ogiltig databas.',
|
||||
'Database has been dropped.' => 'Databasen har tagits bort.',
|
||||
'Databases have been dropped.' => 'Databaserna har tagits bort.',
|
||||
'Database has been created.' => 'Databasen har skapats.',
|
||||
'Database has been renamed.' => 'Databasen har fått sitt namn ändrat.',
|
||||
'Database has been altered.' => 'Databasen har ändrats.',
|
||||
'Alter database' => 'Ändra databas',
|
||||
'Create database' => 'Skapa databas',
|
||||
'Database schema' => 'Databasschema',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Permanent länk',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Motor',
|
||||
'Collation' => 'Kollationering',
|
||||
'Data Length' => 'Datalängd',
|
||||
'Index Length' => 'Indexlängd',
|
||||
'Data Free' => 'Ledig data',
|
||||
'Rows' => 'Rader',
|
||||
'%d in total' => 'totalt %d',
|
||||
'Analyze' => 'Analysera',
|
||||
'Optimize' => 'Optimera',
|
||||
'Vacuum' => 'Städa',
|
||||
'Check' => 'Kolla',
|
||||
'Repair' => 'Reparera',
|
||||
'Truncate' => 'Avkorta',
|
||||
'Tables have been truncated.' => 'Tabeller har blivit avkortade.',
|
||||
'Move to other database' => 'Flytta till en annan databas',
|
||||
'Move' => 'Flytta',
|
||||
'Tables have been moved.' => 'Tabeller har flyttats.',
|
||||
'Copy' => 'Kopiera',
|
||||
'Tables have been copied.' => 'Tabeller har kopierats.',
|
||||
'overwrite' => 'Skriv över',
|
||||
|
||||
'Routines' => 'Rutiner',
|
||||
'Routine has been called, %d row(s) affected.' => array('Rutin har kallats, %d rad påverkades.', 'Rutin har kallats, %d rader påverkades.'),
|
||||
'Call' => 'Kalla',
|
||||
'Parameter name' => 'Namn på parameter',
|
||||
'Create procedure' => 'Skapa procedur',
|
||||
'Create function' => 'Skapa funktion',
|
||||
'Routine has been dropped.' => 'Rutin har tagits bort.',
|
||||
'Routine has been altered.' => 'Rutin har ändrats.',
|
||||
'Routine has been created.' => 'Rutin har skapats.',
|
||||
'Alter function' => 'Ändra funktion',
|
||||
'Alter procedure' => 'Ändra procedur',
|
||||
'Return type' => 'Återvändningstyp',
|
||||
|
||||
'Events' => 'Event',
|
||||
'Event has been dropped.' => 'Event har tagits bort.',
|
||||
'Event has been altered.' => 'Event har ändrats.',
|
||||
'Event has been created.' => 'Event har skapats.',
|
||||
'Alter event' => 'Ändra event',
|
||||
'Create event' => 'Skapa event',
|
||||
'At given time' => 'Vid en tid',
|
||||
'Every' => 'Varje',
|
||||
'Schedule' => 'Schemalägga',
|
||||
'Start' => 'Start',
|
||||
'End' => 'Slut',
|
||||
'On completion preserve' => 'Bibehåll vid slutet',
|
||||
|
||||
'Tables' => 'Tabeller',
|
||||
'Tables and views' => 'Tabeller och vyer',
|
||||
'Table' => 'Tabell',
|
||||
'No tables.' => 'Inga tabeller.',
|
||||
'Alter table' => 'Ändra tabell',
|
||||
'Create table' => 'Skapa tabell',
|
||||
'Table has been dropped.' => 'Tabell har tagits bort.',
|
||||
'Tables have been dropped.' => 'Tabeller har tagits bort.',
|
||||
'Tables have been optimized.' => 'Tabeller har optimerats.',
|
||||
'Table has been altered.' => 'Tabell har ändrats.',
|
||||
'Table has been created.' => 'Tabell har skapats.',
|
||||
'Table name' => 'Tabellnamn',
|
||||
'Show structure' => 'Visa struktur',
|
||||
'engine' => 'motor',
|
||||
'collation' => 'kollationering',
|
||||
'Column name' => 'Kolumnnamn',
|
||||
'Type' => 'Typ',
|
||||
'Length' => 'Längd',
|
||||
'Auto Increment' => 'Automatisk uppräkning',
|
||||
'Options' => 'Inställningar',
|
||||
'Comment' => 'Kommentar',
|
||||
'Default value' => 'Standardvärde',
|
||||
'Default values' => 'Standardvärden',
|
||||
'Drop' => 'Ta bort',
|
||||
'Drop %s?' => 'Ta bort %s?',
|
||||
'Are you sure?' => 'Är du säker?',
|
||||
'Size' => 'Storlek',
|
||||
'Compute' => 'Beräkna',
|
||||
'Move up' => 'Flytta upp',
|
||||
'Move down' => 'Flytta ner',
|
||||
'Remove' => 'Ta bort',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Högsta nummer tillåtna fält är överskridet. Vänligen höj %s.',
|
||||
|
||||
'Partition by' => 'Partitionera om',
|
||||
'Partitions' => 'Partitioner',
|
||||
'Partition name' => 'Partition',
|
||||
'Values' => 'Värden',
|
||||
|
||||
'View' => 'Vy',
|
||||
'Materialized view' => 'Materialiserad vy',
|
||||
'View has been dropped.' => 'Vy har tagits bort.',
|
||||
'View has been altered.' => 'Vy har ändrats.',
|
||||
'View has been created.' => 'Vy har skapats.',
|
||||
'Alter view' => 'Ändra vy',
|
||||
'Create view' => 'Skapa vy',
|
||||
|
||||
'Indexes' => 'Index',
|
||||
'Indexes have been altered.' => 'Index har ändrats.',
|
||||
'Alter indexes' => 'Ändra index',
|
||||
'Add next' => 'Lägg till nästa',
|
||||
'Index Type' => 'Indextyp',
|
||||
'Column (length)' => 'Kolumn (längd)',
|
||||
|
||||
'Foreign keys' => 'Främmande nycklar',
|
||||
'Foreign key' => 'Främmande nyckel',
|
||||
'Foreign key has been dropped.' => 'Främmande nyckel har tagits bort.',
|
||||
'Foreign key has been altered.' => 'Främmande nyckel har ändrats.',
|
||||
'Foreign key has been created.' => 'Främmande nyckel har skapats.',
|
||||
'Target table' => 'Måltabell',
|
||||
'Change' => 'Ändra',
|
||||
'Source' => 'Källa',
|
||||
'Target' => 'Mål',
|
||||
'Add column' => 'Lägg till kolumn',
|
||||
'Alter' => 'Ändra',
|
||||
'Add foreign key' => 'Lägg till främmande nyckel',
|
||||
'ON DELETE' => 'VID BORTTAGNING',
|
||||
'ON UPDATE' => 'VID UPPDATERING',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Käll- och mål-tabellen måste ha samma datatyp, ett index på målkolumnerna och refererad data måste finnas.',
|
||||
|
||||
'Triggers' => 'Avtryckare',
|
||||
'Add trigger' => 'Lägg till avtryckare',
|
||||
'Trigger has been dropped.' => 'Avtryckare har tagits bort.',
|
||||
'Trigger has been altered.' => 'Avtryckare har ändrats.',
|
||||
'Trigger has been created.' => 'Avtryckare har skapats.',
|
||||
'Alter trigger' => 'Ändra avtryckare',
|
||||
'Create trigger' => 'Skapa avtryckare',
|
||||
'Time' => 'Tid',
|
||||
'Event' => 'Event',
|
||||
'Name' => 'Namn',
|
||||
|
||||
'select' => 'välj',
|
||||
'Select' => 'Välj',
|
||||
'Select data' => 'Välj data',
|
||||
'Functions' => 'Funktioner',
|
||||
'Aggregation' => 'Aggregation',
|
||||
'Search' => 'Sök',
|
||||
'anywhere' => 'överallt',
|
||||
'Search data in tables' => 'Sök data i tabeller',
|
||||
'Sort' => 'Sortera',
|
||||
'descending' => 'Fallande',
|
||||
'Limit' => 'Begränsning',
|
||||
'Limit rows' => 'Begränsa rader',
|
||||
'Text length' => 'Textlängd',
|
||||
'Action' => 'Åtgärd',
|
||||
'Full table scan' => 'Full tabellskanning',
|
||||
'Unable to select the table' => 'Kunde inte välja tabellen',
|
||||
'No rows.' => 'Inga rader.',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d rad', '%d rader'),
|
||||
'Page' => 'Sida',
|
||||
'last' => 'sist',
|
||||
'Load more data' => 'Ladda mer data',
|
||||
'Loading' => 'Laddar',
|
||||
'Whole result' => 'Hela resultatet',
|
||||
'%d byte(s)' => array('%d byte', '%d bytes'),
|
||||
|
||||
'Import' => 'Importera',
|
||||
'%d row(s) have been imported.' => array('%d rad har importerats.', '%d rader har importerats.'),
|
||||
'File must be in UTF-8 encoding.' => 'Filer måste vara i UTF-8-format.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Ändra',
|
||||
'Ctrl+click on a value to modify it.' => 'Ctrl+klicka på ett värde för att ändra det.',
|
||||
'Use edit link to modify this value.' => 'Använd redigeringslänken för att ändra värdet.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Sak%s har skapats.',
|
||||
'Item has been deleted.' => 'En sak har tagits bort.',
|
||||
'Item has been updated.' => 'En sak har ändrats.',
|
||||
'%d item(s) have been affected.' => array('%d sak har blivit förändrad.', '%d saker har blivit förändrade.'),
|
||||
'New item' => 'Ny sak',
|
||||
'original' => 'original',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'tom',
|
||||
'edit' => 'redigera',
|
||||
'Edit' => 'Redigera',
|
||||
'Insert' => 'Infoga',
|
||||
'Save' => 'Spara',
|
||||
'Save and continue edit' => 'Spara och fortsätt att redigera',
|
||||
'Save and insert next' => 'Spara och infoga nästa',
|
||||
'Selected' => 'Vald',
|
||||
'Clone' => 'Klona',
|
||||
'Delete' => 'Ta bort',
|
||||
'You have no privileges to update this table.' => 'Du har inga privilegier för att uppdatera den här tabellen.',
|
||||
|
||||
'E-mail' => 'Email',
|
||||
'From' => 'Från',
|
||||
'Subject' => 'Ämne',
|
||||
'Attachments' => 'Bilagor',
|
||||
'Send' => 'Skicka',
|
||||
'%d e-mail(s) have been sent.' => array('%d email har blivit skickat.', '%d email har blivit skickade.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Nummer',
|
||||
'Date and time' => 'Datum och tid',
|
||||
'Strings' => 'Strängar',
|
||||
'Binary' => 'Binärt',
|
||||
'Lists' => 'Listor',
|
||||
'Network' => 'Nätverk',
|
||||
'Geometry' => 'Geometri',
|
||||
'Relations' => 'Relationer',
|
||||
|
||||
'Editor' => 'Redigerare',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => 'yyyy-mm-dd',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'nu',
|
||||
'yes' => 'ja',
|
||||
'no' => 'nej',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Filen finns redan.',
|
||||
'Please use one of the extensions %s.' => 'Vänligen använd en av filändelserna %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Redigera schema',
|
||||
'Create schema' => 'Skapa schema',
|
||||
'Schema has been dropped.' => 'Schema har tagits bort.',
|
||||
'Schema has been created.' => 'Schema har skapats.',
|
||||
'Schema has been altered.' => 'Schema har ändrats.',
|
||||
'Schema' => 'Schema',
|
||||
'Invalid schema.' => 'Ogiltigt schema.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Sekvenser',
|
||||
'Create sequence' => 'Skapa sekvens',
|
||||
'Sequence has been dropped.' => 'Sekvens har tagits bort.',
|
||||
'Sequence has been created.' => 'Sekvens har skapats.',
|
||||
'Sequence has been altered.' => 'Sekvens har ändrats.',
|
||||
'Alter sequence' => 'Ändra sekvens',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Användartyper',
|
||||
'Create type' => 'Skapa typ',
|
||||
'Type has been dropped.' => 'Typ har, typ, tagits bort.',
|
||||
'Type has been created.' => 'Typ har skapats.',
|
||||
'Alter type' => 'Ändra typ',
|
||||
);
|
||||
@@ -8,7 +8,6 @@ $translations = array(
|
||||
'Password' => 'கடவுச்சொல்',
|
||||
'Select database' => 'தகவல்தளத்தை தேர்வு செய்',
|
||||
'Invalid database.' => 'தகவல்தளம் சரியானதல்ல.',
|
||||
'Create new database' => 'புதிய தகவல்தளத்தை உருவாக்கு',
|
||||
'Table has been dropped.' => 'அட்டவணை நீக்கப்பட்டது.',
|
||||
'Table has been altered.' => 'அட்டவணை மாற்றப்பட்டது.',
|
||||
'Table has been created.' => 'அட்டவணை உருவாக்கப்பட்டது.',
|
||||
@@ -31,13 +30,11 @@ $translations = array(
|
||||
'Alter database' => 'தகவல்தளத்தை மாற்று',
|
||||
'Create database' => 'தகவல்தளத்தை உருவாக்கு',
|
||||
'SQL command' => 'SQL கட்டளை',
|
||||
'Dump' => 'Dump',
|
||||
'Logout' => 'வெளியேறு',
|
||||
'database' => 'தகவல்தளம்',
|
||||
'Use' => 'உபயோகி',
|
||||
'No tables.' => 'அட்டவணை இல்லை.',
|
||||
'select' => 'தேர்வு செய்',
|
||||
'Create new table' => 'புதிய அட்டவணையை உருவாக்கு',
|
||||
'Item has been deleted.' => 'உருப்படி நீக்கப்பட்டது.',
|
||||
'Item has been updated.' => 'உருப்படி புதுப்பிக்கப்பட்டது.',
|
||||
'Edit' => 'தொகு',
|
||||
@@ -177,6 +174,7 @@ $translations = array(
|
||||
'Tables have been truncated.' => 'அட்டவணை குறைக்கப்பட்டது (truncated).',
|
||||
'Rows' => 'வரிசைகள்',
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'அட்டவணை நகர்த்தப்பட்டது.',
|
||||
'Move to other database' => 'மற்ற தகவல் தளத்திற்க்கு நகர்த்து',
|
||||
'Move' => 'நகர்த்து',
|
||||
@@ -185,9 +183,9 @@ $translations = array(
|
||||
'original' => 'அசல்',
|
||||
'Tables have been dropped.' => 'அட்டவணை நீக்கப்பட்டது.',
|
||||
'%d item(s) have been affected.' => array('%d உருப்படி மாற்றமடைந்தது.', '%d உருப்படிகள் மாற்றமடைந்தன.'),
|
||||
'whole result' => 'முழுமையான முடிவு',
|
||||
'Whole result' => 'முழுமையான முடிவு',
|
||||
'Clone' => 'நகலி (Clone)',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'அனுமதிக்கப்பட்ட அதிகபட்ச கோப்புகளின் எண்ணிக்கை மீறப்பட்டது. தயவு செய்து %s மற்றும் %s யை அதிகரிக்கவும்.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'அனுமதிக்கப்பட்ட அதிகபட்ச கோப்புகளின் எண்ணிக்கை மீறப்பட்டது. தயவு செய்து %s மற்றும் %s யை அதிகரிக்கவும்.',
|
||||
'Partition by' => 'பிரித்தது',
|
||||
'Partitions' => 'பிரிவுகள்',
|
||||
'Partition name' => 'பிரிவின் பெயர்',
|
||||
@@ -247,7 +245,6 @@ $translations = array(
|
||||
'System' => 'சிஸ்டம் (System)',
|
||||
'anywhere' => 'எங்காயினும்',
|
||||
'empty' => 'வெறுமை (empty)',
|
||||
'schema' => 'அமைப்புமுறை',
|
||||
'No extension' => 'விரிவு (extensஇஒன்) இல்லை ',
|
||||
'Databases have been dropped.' => 'தகவல் தளங்கள் நீக்கப்பட்டன.',
|
||||
'%s version: %s through PHP extension %s' => '%s பதிப்பு: %s through PHP extension %s',
|
||||
@@ -258,7 +255,6 @@ $translations = array(
|
||||
'now' => 'இப்பொழுது',
|
||||
'%d query(s) executed OK.' => array('%d வினவல் செயல்படுத்தப்பட்டது.', '%d வினவல்கள் செயல்படுத்தப்பட்டன.'),
|
||||
'Show only errors' => 'பிழைகளை மட்டும் காண்பிக்கவும்',
|
||||
'Last page' => 'கடைசி பக்கம்',
|
||||
'Refresh' => 'புதுப்பி (Refresh)',
|
||||
'Invalid schema.' => 'அமைப்புமுறை சரியானதல்ல (Invalid Schema).',
|
||||
'Please use one of the extensions %s.' => 'தயவு செய்து ஒரு விரிவினை %s (extension) உபயோகிக்கவும்.',
|
||||
|
||||
268
adminer/lang/th.inc.php
Normal file
268
adminer/lang/th.inc.php
Normal file
@@ -0,0 +1,268 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => 'เข้าสู่ระบบ',
|
||||
'Logout successful.' => 'ออกจากระบบเรียบร้อยแล้ว.',
|
||||
'Invalid credentials.' => 'ข้อมูลไม่ถูกต้อง.',
|
||||
'Server' => 'เซอเวอร์',
|
||||
'Username' => 'ชื่อผู้ใช้งาน',
|
||||
'Password' => 'รหัสผ่าน',
|
||||
'Select database' => 'เลือกฐานข้อมูล',
|
||||
'Invalid database.' => 'ฐานข้อมูลไม่ถูกต้อง.',
|
||||
'Table has been dropped.' => 'ลบตารางแล้ว.',
|
||||
'Table has been altered.' => 'แก้ไขตารางแล้ว.',
|
||||
'Table has been created.' => 'สร้างตารางใหม่แล้ว.',
|
||||
'Alter table' => 'เปลี่ยนแปลงตารางแล้ว',
|
||||
'Create table' => 'สร้างตารางใหม่',
|
||||
'Table name' => 'ชื่อตาราง',
|
||||
'engine' => 'ชนิดของฐานข้อมูล',
|
||||
'collation' => 'การตรวจทาน',
|
||||
'Column name' => 'ชื่อคอลัมน์',
|
||||
'Type' => 'ชนิด',
|
||||
'Length' => 'ความยาว',
|
||||
'Auto Increment' => 'เพิ่มลำดับโดยอัตโนมัติ',
|
||||
'Options' => 'ตัวเลือก',
|
||||
'Save' => 'บันทึก',
|
||||
'Drop' => 'ลบ',
|
||||
'Database has been dropped.' => 'ฐานข้อมูลถูกลบแล้ว.',
|
||||
'Database has been created.' => 'สร้างฐานข้อมูลใหม่แล้ว.',
|
||||
'Database has been renamed.' => 'เปลี่ยนชื่อฐานข้อมูลแล้ว.',
|
||||
'Database has been altered.' => 'เปลี่ยนแปลงฐานข้อมูลแล้ว.',
|
||||
'Alter database' => 'เปลี่ยนแปลงฐานข้อมูล',
|
||||
'Create database' => 'สร้างฐานข้อมูล',
|
||||
'SQL command' => 'คำสั่ง SQL',
|
||||
'Logout' => 'ออกจากระบบ',
|
||||
'database' => 'ฐานข้อมูล',
|
||||
'Use' => 'ใช้งาน',
|
||||
'No tables.' => 'ไม่พบตาราง.',
|
||||
'select' => 'เลือก',
|
||||
'Item has been deleted.' => 'รายการถูกลบแล้ว.',
|
||||
'Item has been updated.' => 'ปรับปรุงรายการแล้ว.',
|
||||
'Item%s has been inserted.' => 'มี%s รายการ ถูกเพิ่มแล้ว.',
|
||||
'Edit' => 'แก้ไข',
|
||||
'Insert' => 'เพิ่ม',
|
||||
'Save and insert next' => 'บันทึกแล้วเพิ่มรายการถัดไป',
|
||||
'Delete' => 'ลบ',
|
||||
'Database' => 'ฐานข้อมูล',
|
||||
'Routines' => 'รูทีน',
|
||||
'Indexes have been altered.' => 'เปลี่ยนแปลงดัชนีแล้ว.',
|
||||
'Indexes' => 'ดัชนี',
|
||||
'Alter indexes' => 'เปลี่ยนแปลงดัชนี',
|
||||
'Add next' => 'เพิ่มรายการถัดไป',
|
||||
'Language' => 'ภาษา',
|
||||
'Select' => 'เลือก',
|
||||
'New item' => 'รายการใหม่',
|
||||
'Search' => 'ค้นหา',
|
||||
'Sort' => 'เรียงลำดับ',
|
||||
'descending' => 'มากไปน้อย',
|
||||
'Limit' => 'จำกัด',
|
||||
'No rows.' => 'ไม่มีแถวของตาราง.',
|
||||
'Action' => 'ดำเนินการ',
|
||||
'edit' => 'แก้ไข',
|
||||
'Page' => 'หน้า',
|
||||
'Query executed OK, %d row(s) affected.' => 'ประมวลผลคำสั่งแล้ว มี %d ถูกดำเนินการ.',
|
||||
'Error in query' => 'คำสั่งไม่ถูกต้อง',
|
||||
'Execute' => 'ประมวลผล',
|
||||
'Table' => 'ตาราง',
|
||||
'Foreign keys' => 'คีย์คู่แข่ง',
|
||||
'Triggers' => 'ทริกเกอร์',
|
||||
'View' => 'วิว',
|
||||
'Unable to select the table' => 'ไม่สามารถเลือกตารางได้',
|
||||
'Invalid CSRF token. Send the form again.' => 'เครื่องหมาย CSRF ไม่ถูกต้อง ส่งข้อมูลใหม่อีกครั้ง.',
|
||||
'Comment' => 'หมายเหตุ',
|
||||
'Default values' => 'ค่าเริ่มต้น',
|
||||
'%d byte(s)' => '%d ไบท์',
|
||||
'No commands to execute.' => 'ไม่มีคำสั่งที่จะประมวลผล.',
|
||||
'Unable to upload a file.' => 'ไม่สามารถอัปโหลดไฟล์ได้.',
|
||||
'File upload' => 'อัปโหลดไฟล์',
|
||||
'File uploads are disabled.' => 'การอัปโหลดไฟล์ถูกปิดการใช้งาน.',
|
||||
'Routine has been called, %d row(s) affected.' => 'รูทีนถูกเรียกใช้งาน มี %d แถวถูกดำเนินการ.',
|
||||
'Call' => 'เรียกใช้งาน',
|
||||
'No extension' => 'ไม่พบส่วนเสริม',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'ไม่มีส่วนเสริมของ PHP (%s) ที่สามารถใช้งานได้.',
|
||||
'Session support must be enabled.' => 'ต้องเปิดใช้งาน Session.',
|
||||
'Session expired, please login again.' => 'Session หมดอายุแล้ว กรุณาเข้าสู่ระบบใหม่อีกครั้ง.',
|
||||
'Text length' => 'ความยาวของอักษร',
|
||||
'Foreign key has been dropped.' => 'คีย์คู่แข่งถูกลบแล้ว.',
|
||||
'Foreign key has been altered.' => 'คีย์คู่แข่งถูกเปลี่ยนแปลงแล้ว.',
|
||||
'Foreign key has been created.' => 'คีย์คู่แข่งถูกสร้างแล้ว.',
|
||||
'Foreign key' => 'คีย์คู่แข่ง',
|
||||
'Target table' => 'คารางเป้าหมาย',
|
||||
'Change' => 'แก้ไข',
|
||||
'Source' => 'แหล่งข้อมูล',
|
||||
'Target' => 'เป้าหมาย',
|
||||
'Add column' => 'เพิ่มคอลัมน์',
|
||||
'Alter' => 'เปลี่ยนแปลง',
|
||||
'Add foreign key' => 'เพิ่มคีย์คู่แข่ง',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => 'ชนิดของดัชนี',
|
||||
'Column (length)' => 'คอลัมน์ (ความยาว)',
|
||||
'View has been dropped.' => 'วิวถูกลบแล้ว.',
|
||||
'View has been altered.' => 'วิวถูกเปลี่ยนแปลงแล้ว.',
|
||||
'View has been created.' => 'วิวถูกสร้างแล้ว.',
|
||||
'Alter view' => 'เปลี่ยนแปลงวิว',
|
||||
'Create view' => 'เพิ่มวิว',
|
||||
'Name' => 'ชื่อ',
|
||||
'Process list' => 'รายการของกระบวนการ',
|
||||
'%d process(es) have been killed.' => 'มี %d กระบวนการถูกทำลายแล้ว.',
|
||||
'Kill' => 'ทำลาย',
|
||||
'Parameter name' => 'ชื่อพารามิเตอร์',
|
||||
'Database schema' => 'Schema ของฐานข้อมูล',
|
||||
'Create procedure' => 'สร้าง procedure',
|
||||
'Create function' => 'สร้าง Function',
|
||||
'Routine has been dropped.' => 'Routine ถูกลบแล้ว.',
|
||||
'Routine has been altered.' => 'Routine ถูกเปลี่ยนแปลงแล้ว.',
|
||||
'Routine has been created.' => 'Routine ถูกสร้างแล้ว.',
|
||||
'Alter function' => 'เปลี่ยนแปลง Function',
|
||||
'Alter procedure' => 'เปลี่ยนแปลง procedure',
|
||||
'Return type' => 'ประเภทของค่าที่คืนกลับ',
|
||||
'Add trigger' => 'เพิ่ม trigger',
|
||||
'Trigger has been dropped.' => 'Trigger ถูกลบแล้ว.',
|
||||
'Trigger has been altered.' => 'Trigger ถูกเปลี่ยนแปลงแล้ว.',
|
||||
'Trigger has been created.' => 'Trigger ถูกสร้างแล้ว.',
|
||||
'Alter trigger' => 'เปลี่ยนแปลง Trigger',
|
||||
'Create trigger' => 'สร้าง Trigger',
|
||||
'Time' => 'เวลา',
|
||||
'Event' => 'เหตุการณ์',
|
||||
'%s version: %s through PHP extension %s' => '%s รุ่น: %s ผ่านส่วนขยาย PHP %s',
|
||||
'%d row(s)' => '%d แถว',
|
||||
'Remove' => 'ลบ',
|
||||
'Are you sure?' => 'คุณแน่ใจแล้วหรือ',
|
||||
'Privileges' => 'สิทธิ์',
|
||||
'Create user' => 'สร้างผู้ใช้งาน',
|
||||
'User has been dropped.' => 'ลบผู้ใช้งานแล้ว.',
|
||||
'User has been altered.' => 'เปลี่ยนแปลงผู้ใช้งานแล้ว.',
|
||||
'User has been created.' => 'สร้างผู้ใช้งานแล้ว.',
|
||||
'Hashed' => 'Hash',
|
||||
'Column' => 'คอลัมน์',
|
||||
'Routine' => 'รูทีน',
|
||||
'Grant' => 'การอนุญาต',
|
||||
'Revoke' => 'ยกเลิก',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'ข้อมูลที่ส่งเข้ามีขนาดใหญ่เกิน คุณสามารถ เพิ่ม-ลดขนาดได้ที่ %s คำสั่งการตั้งค่า.',
|
||||
'Logged as: %s' => 'สวัสดีคุณ: %s',
|
||||
'Move up' => 'ย้ายไปข้างบน',
|
||||
'Move down' => 'ย้ายลงล่าง',
|
||||
'Functions' => 'ฟังก์ชั่น',
|
||||
'Aggregation' => 'รวบรวม',
|
||||
'Export' => 'ส่งออก',
|
||||
'Output' => 'ข้อมูลที่ส่งออก',
|
||||
'open' => 'เปิด',
|
||||
'save' => 'บันทึก',
|
||||
'Format' => 'รูปแบบ',
|
||||
'Tables' => 'ตาราง',
|
||||
'Data' => 'ข้อมูล',
|
||||
'Event has been dropped.' => 'เหตุการณ์ถูกลบแล้ว.',
|
||||
'Event has been altered.' => 'เหตุการณ์ถูกเปลี่ยนแปลงแล้ว.',
|
||||
'Event has been created.' => 'เหตุการณ์ถูกสร้างแล้ว.',
|
||||
'Alter event' => 'เปลี่ยนแปลงเหตุการณ์',
|
||||
'Create event' => 'สร้างเหตุการณ์',
|
||||
'At given time' => 'ในเวลาที่กำหนด',
|
||||
'Every' => 'ทุกๆ',
|
||||
'Events' => 'เหตุการณ์',
|
||||
'Schedule' => 'กำหนดการณ์',
|
||||
'Start' => 'เริ่มต้น',
|
||||
'End' => 'สิ้นสุด',
|
||||
'Status' => 'สถานะ',
|
||||
'On completion preserve' => 'เมื่อเสร็จสิ้นการสงวน',
|
||||
'Tables and views' => 'ตารางและวิว',
|
||||
'Data Length' => 'ความยาวของข้อมูล',
|
||||
'Index Length' => 'ความยาวของดัชนี',
|
||||
'Data Free' => 'พื้นที่ว่าง',
|
||||
'Collation' => 'การตรวจทาน',
|
||||
'Analyze' => 'วิเคราะห์',
|
||||
'Optimize' => 'เพิ่มประสิทธิภาพ',
|
||||
'Check' => 'ตรวจสอบ',
|
||||
'Repair' => 'ซ่อมแซม',
|
||||
'Truncate' => 'ตัดทิ้ง',
|
||||
'Tables have been truncated.' => 'เคลียร์ตารางแล้ว (truncate).',
|
||||
'Rows' => 'แถว',
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Tables have been moved.' => 'ตารางถูกย้ายแล้ว.',
|
||||
'Move to other database' => 'ย้ายไปยังฐานข้อมูลอื่น',
|
||||
'Move' => 'ย้าย',
|
||||
'Engine' => 'ชนิดของฐานข้อมูล',
|
||||
'Save and continue edit' => 'บันทึกและแก้ไขข้อมูลอื่นๆต่อ',
|
||||
'original' => 'ต้นฉบับ',
|
||||
'Tables have been dropped.' => 'ตารางถูกลบแล้ว.',
|
||||
'%d item(s) have been affected.' => 'มี %d รายการถูกดำเนินการแล้ว.',
|
||||
'Whole result' => 'รวมผล',
|
||||
'Clone' => 'ทำซ้ำ',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'จำนวนสูงสุดของฟิลด์อนุญาตให้เกิน กรุณาเพิ่มอีก %s.',
|
||||
'Partition by' => 'พาร์ทิชันโดย',
|
||||
'Partitions' => 'พาร์ทิชัน',
|
||||
'Partition name' => 'ชื่อของพาร์ทิชัน',
|
||||
'Values' => 'ค่า',
|
||||
'%d row(s) have been imported.' => '%d แถวถูกนำเข้าแล้ว.',
|
||||
'anywhere' => 'ทุกแห่ง',
|
||||
'Import' => 'นำเข้า',
|
||||
'Stop on error' => 'หยุดการทำงานเมื่อเออเรอ',
|
||||
'%.3f s' => '%.3f วินาที',
|
||||
'$1-$3-$5' => '$5/$3/$1',
|
||||
'[yyyy]-mm-dd' => 'วันที่/เดือน/[ปี]',
|
||||
'History' => 'ประวัติ',
|
||||
'Variables' => 'ตัวแปร',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'แหล่งที่มาและเป้าหมายของคอลมัน์ต้องมีชนิดข้อมูลเดียวกัน คือต้องมีดัชนีและข้อมูลอ้างอิงของคอลัมน์เป้าหมาย.',
|
||||
'Relations' => 'ความสำพันธ์',
|
||||
'Run file' => 'ทำงานจากไฟล์',
|
||||
'Clear' => 'เคลียร์',
|
||||
'Maximum allowed file size is %sB.' => 'ขนาดไฟล์สูงสุดที่อนุญาตให้ใช้งานคือ %sB.',
|
||||
'Numbers' => 'ตัวเลข',
|
||||
'Date and time' => 'วันและเวลา',
|
||||
'Strings' => 'ตัวอักษร',
|
||||
'Binary' => 'เลขฐานสอง',
|
||||
'Lists' => 'รายการ',
|
||||
'Editor' => 'ผู้แก้ไข',
|
||||
'E-mail' => 'อีเมล์',
|
||||
'From' => 'จาก',
|
||||
'Subject' => 'หัวข้อ',
|
||||
'Send' => 'ส่ง',
|
||||
'%d e-mail(s) have been sent.' => 'มี %d อีเมล์ ถูกส่งออกแล้ว.',
|
||||
'Webserver file %s' => 'Webserver file %s',
|
||||
'File does not exist.' => 'ไม่มีไฟล์.',
|
||||
'%d in total' => '%d ของทั้งหมด',
|
||||
'Permanent login' => 'จดจำการเข้าสู่ระบบตลอดไป',
|
||||
'Databases have been dropped.' => 'ฐานข้อมูลถูกลบแล้ว.',
|
||||
'Search data in tables' => 'ค้นหาในตาราง',
|
||||
'Schema' => 'Schema',
|
||||
'Alter schema' => 'เปลี่ยนแปลง schema',
|
||||
'Create schema' => 'สร้าง schema',
|
||||
'Schema has been dropped.' => 'Schema ถูกลบแล้ว.',
|
||||
'Schema has been created.' => 'Schema ถูกสร้างแล้ว.',
|
||||
'Schema has been altered.' => 'Schema ถูกเปลี่ยนแปลงแล้ว.',
|
||||
'Sequences' => 'Sequences',
|
||||
'Create sequence' => 'Sequence ถูกสร้างแล้ว',
|
||||
'Alter sequence' => 'Sequence ถูกเปลี่ยนแปลงแล้ว',
|
||||
'Sequence has been dropped.' => 'Sequence ถูกลบแล้ว.',
|
||||
'Sequence has been created.' => 'Sequence ถูกสร้างแล้ว.',
|
||||
'Sequence has been altered.' => 'Sequence ถูกเปลี่ยนแปลงแล้ว.',
|
||||
'User types' => 'ประเภทผู้ใช้งาน',
|
||||
'Create type' => 'สร้างประเภทผู้ใช้งาน',
|
||||
'Alter type' => 'แก้ไขประเภท',
|
||||
'Type has been dropped.' => 'ประเภทถูกลบแล้ว.',
|
||||
'Type has been created.' => 'ประเภทถูกสร้างแล้ว.',
|
||||
'Ctrl+click on a value to modify it.' => 'กด Ctrl+click เพื่อแก้ไขค่า.',
|
||||
'Use edit link to modify this value.' => 'ใช้ลิงค์ แก้ไข เพื่อปรับเปลี่ยนค่านี้.',
|
||||
'last' => 'ล่าสุด',
|
||||
'From server' => 'จากเซเวอร์',
|
||||
'System' => 'ระบบ',
|
||||
'Select data' => 'เลือกข้อมูล',
|
||||
'Show structure' => 'แสดงโครงสร้าง',
|
||||
'empty' => 'ว่างเปล่า',
|
||||
'Network' => 'เครื่องข่าย',
|
||||
'Geometry' => 'เรขาคณิต',
|
||||
'File exists.' => 'มีไฟล์นี้อยู่แล้ว.',
|
||||
'Attachments' => 'ไฟล์แนบ',
|
||||
'%d query(s) executed OK.' => '%d คำสั่งถูกดำเนินการแล้ว.',
|
||||
'Show only errors' => 'แสดงเฉพาะเออเรอ',
|
||||
'Refresh' => 'โหลดใหม่',
|
||||
'Invalid schema.' => 'schema ไม่ถูกต้อง.',
|
||||
'Please use one of the extensions %s.' => 'กรุณาใช้ส่วนเสริมอย่างน้อย 1 ส่วนเสริมจากทั้งหมด %s.',
|
||||
'now' => 'ตอนนี้',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => 'ทำซ้ำตารางฐานข้อมูลแล้ว.',
|
||||
'Copy' => 'ทำซ้ำ',
|
||||
'Permanent link' => 'ลิงค์ถาวร',
|
||||
'Edit all' => 'แก้ไขทั้งหมด',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
);
|
||||
@@ -9,14 +9,20 @@ $translations = array(
|
||||
'Login' => 'Giriş',
|
||||
'Logout' => 'Çıkış',
|
||||
'Logged as: %s' => '%s olarak giriş yapıldı.',
|
||||
'Logout successful.' => 'Başarıyla çıkış yapıldı.',
|
||||
'Invalid credentials.' => 'Geçersiz kimlik.',
|
||||
'Logout successful.' => 'Oturum başarıyla sonlandı.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Adminer kullandığınız için teşekkür ederiz <a href="https://www.adminer.org/en/donation/">bağış yapmayı düşünün</a>.',
|
||||
'Invalid credentials.' => 'Geçersiz kimlik bilgileri.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Çok fazla oturum açma denemesi yapıldı.', '%d Dakika sonra tekrar deneyiniz.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Ana şifrenin süresi doldu. Kalıcı olması için <a href="https://www.adminer.org/en/extension/"%s>%s medodunu</a> kullanın.',
|
||||
'Language' => 'Dil',
|
||||
'Invalid CSRF token. Send the form again.' => 'Geçersiz (CSRF) jetonu. Formu tekrar yolla.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Bu isteği Adminer\'den göndermediyseniz bu sayfayı kapatın.',
|
||||
'No extension' => 'Uzantı yok',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Desteklenen PHP eklentilerinden (%s) hiçbiri mevcut değil.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Ayrıcalıklı bağlantı noktalarına bağlanmaya izin verilmiyor.',
|
||||
'Session support must be enabled.' => 'Oturum desteği etkin olmalıdır.',
|
||||
'Session expired, please login again.' => 'Oturum süresi doldu, lütfen tekrar giriş yapın.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'İşlem, aynı kimlik bilgileriyle başarıyla oturum açıldıktan sonra gerçekleştirilecektir.',
|
||||
'%s version: %s through PHP extension %s' => '%s sürüm: %s, %s PHP eklentisi ile',
|
||||
'Refresh' => 'Tazele',
|
||||
|
||||
@@ -46,6 +52,8 @@ $translations = array(
|
||||
'Query executed OK, %d row(s) affected.' => array('Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.', 'Sorgu başarıyla çalıştırıldı, %d adet kayıt etkilendi.'),
|
||||
'No commands to execute.' => 'Çalıştırılacak komut yok.',
|
||||
'Error in query' => 'Sorguda hata',
|
||||
'Warnings' => 'Uyarılar',
|
||||
'ATTACH queries are not supported.' => 'ATTACH sorguları desteklenmiyor.',
|
||||
'Execute' => 'Çalıştır',
|
||||
'Stop on error' => 'Hata oluşursa dur',
|
||||
'Show only errors' => 'Sadece hataları göster.',
|
||||
@@ -64,21 +72,23 @@ $translations = array(
|
||||
'Unable to upload a file.' => 'Dosya gönderilemiyor.',
|
||||
'Maximum allowed file size is %sB.' => 'İzin verilen dosya boyutu sınırı %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Çok büyük POST verisi, veriyi azaltın ya da %s ayar yönergesini uygun olarak yapılandırın.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'FTP yoluyla büyük bir SQL dosyası yükleyebilir ve sunucudan içe aktarabilirsiniz.',
|
||||
'You are offline.' => 'Çevrimdışısınız.',
|
||||
|
||||
'Export' => 'Dışarı Aktar',
|
||||
'Dump' => 'Döküm',
|
||||
'Output' => 'Çıktı',
|
||||
'open' => 'aç',
|
||||
'save' => 'kaydet',
|
||||
'Saving' => 'Saydediliyor',
|
||||
'Format' => 'Biçim',
|
||||
'Data' => 'Veri',
|
||||
|
||||
'Database' => 'Veri Tabanı',
|
||||
'database' => 'veri tabanı',
|
||||
'DB' => 'DB',
|
||||
'Use' => 'Kullan',
|
||||
'Select database' => 'Veri tabanı seç',
|
||||
'Invalid database.' => 'Geçersiz veri tabanı.',
|
||||
'Create new database' => 'Yeni veri tabanı oluştur',
|
||||
'Database has been dropped.' => 'Veri tabanı silindi.',
|
||||
'Databases have been dropped.' => 'Veritabanları silindi.',
|
||||
'Database has been created.' => 'Veri tabanı oluşturuldu.',
|
||||
@@ -93,15 +103,17 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Motor',
|
||||
'Collation' => 'Karşılaştırma',
|
||||
'Data Length' => 'Veri Uzunluğu',
|
||||
'Index Length' => 'Dizin Uzunluğu',
|
||||
'Index Length' => 'İndex Uzunluğu',
|
||||
'Data Free' => 'Boş Veri',
|
||||
'Rows' => 'Kayıtlar',
|
||||
'%d in total' => 'toplam %d',
|
||||
'Analyze' => 'Çözümle',
|
||||
'Optimize' => 'En uygun hale getir',
|
||||
'Optimize' => 'Optimize Et',
|
||||
'Vacuum' => 'Vakumla',
|
||||
'Check' => 'Denetle',
|
||||
'Repair' => 'Tamir Et',
|
||||
'Truncate' => 'Boşalt',
|
||||
@@ -144,7 +156,6 @@ $translations = array(
|
||||
'No tables.' => 'Tablo yok.',
|
||||
'Alter table' => 'Tabloyu değiştir',
|
||||
'Create table' => 'Tablo oluştur',
|
||||
'Create new table' => 'Yeni tablo oluştur',
|
||||
'Table has been dropped.' => 'Tablo silindi.',
|
||||
'Tables have been dropped.' => 'Tablolar silindi.',
|
||||
'Tables have been optimized.' => 'Tablolar en uygun hale getirildi.',
|
||||
@@ -160,13 +171,17 @@ $translations = array(
|
||||
'Auto Increment' => 'Otomatik Artır',
|
||||
'Options' => 'Seçenekler',
|
||||
'Comment' => 'Yorum',
|
||||
'Default value' => 'Varsayılan değer',
|
||||
'Default values' => 'Varsayılan değerler',
|
||||
'Drop' => 'Sil',
|
||||
'Drop %s?' => 'Sil %s?',
|
||||
'Are you sure?' => 'Emin misiniz?',
|
||||
'Size' => 'Boyut',
|
||||
'Compute' => 'Hesapla',
|
||||
'Move up' => 'Yukarı taşı',
|
||||
'Move down' => 'Aşağı taşı',
|
||||
'Remove' => 'Sil',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'İzin verilen en fazla alan sayısı aşıldı. Lütfen %s ve %s değerlerini artırın.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'İzin verilen en fazla alan sayısı aşıldı. Lütfen %s değerlerini artırın.',
|
||||
|
||||
'Partition by' => 'Bununla bölümle',
|
||||
'Partitions' => 'Bölümler',
|
||||
@@ -174,17 +189,18 @@ $translations = array(
|
||||
'Values' => 'Değerler',
|
||||
|
||||
'View' => 'Görünüm',
|
||||
'Materialized view' => 'Materialized Görünüm',
|
||||
'View has been dropped.' => 'Görünüm silindi.',
|
||||
'View has been altered.' => 'Görünüm değiştirildi.',
|
||||
'View has been created.' => 'Görünüm oluşturuldu.',
|
||||
'Alter view' => 'Görünümü değiştir',
|
||||
'Create view' => 'Görünüm oluştur',
|
||||
|
||||
'Indexes' => 'Dizinler',
|
||||
'Indexes have been altered.' => 'Dizinler değiştirildi.',
|
||||
'Alter indexes' => 'Dizinleri değiştir',
|
||||
'Indexes' => 'İndeksler',
|
||||
'Indexes have been altered.' => 'İndeksler değiştirildi.',
|
||||
'Alter indexes' => 'İndeksleri değiştir',
|
||||
'Add next' => 'Bundan sonra ekle',
|
||||
'Index Type' => 'Dizin Türü',
|
||||
'Index Type' => 'İndex Türü',
|
||||
'Column (length)' => 'Kolon (uzunluğu)',
|
||||
|
||||
'Foreign keys' => 'Dış anahtarlar',
|
||||
@@ -223,26 +239,29 @@ $translations = array(
|
||||
'anywhere' => 'hiçbir yerde',
|
||||
'Search data in tables' => 'Tablolarda veri ara',
|
||||
'Sort' => 'Sırala',
|
||||
'descending' => 'azalan',
|
||||
'Limit' => 'sınır',
|
||||
'Text length' => 'Yazı uzunluğu',
|
||||
'Action' => 'Eylem',
|
||||
'Full table scan' => 'Tam tablo tarama',
|
||||
'descending' => 'Azalan',
|
||||
'Limit' => 'Limit',
|
||||
'Limit rows' => 'Satır Limiti',
|
||||
'Text length' => 'Metin Boyutu',
|
||||
'Action' => 'İşlem',
|
||||
'Full table scan' => 'Tam tablo taraması',
|
||||
'Unable to select the table' => 'Tablo seçilemedi',
|
||||
'No rows.' => 'Kayıt yok.',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d kayıt', '%d adet kayıt'),
|
||||
'Page' => 'Sayfa',
|
||||
'last' => 'son',
|
||||
'Last page' => 'Son sayfa',
|
||||
'Load more data' => 'Daha fazla veri yükle',
|
||||
'Loading' => 'Yükleniyor',
|
||||
'whole result' => 'tüm sonuç',
|
||||
'Whole result' => 'Tüm sonuç',
|
||||
'%d byte(s)' => array('%d bayt', '%d bayt'),
|
||||
|
||||
'Import' => 'İçeri Aktar',
|
||||
'%d row(s) have been imported.' => array('%d kayıt içeri aktarıldı.', '%d adet kayıt içeri aktarıldı.'),
|
||||
'File must be in UTF-8 encoding.' => 'Dosya UTF-8 kodlamasında olmalıdır.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Düzenle',
|
||||
'Ctrl+click on a value to modify it.' => 'Bir değeri değiştirmek için üzerine Ctrl+tıklayın.',
|
||||
'Use edit link to modify this value.' => 'Değeri değiştirmek için düzenleme bağlantısını kullanın.',
|
||||
|
||||
@@ -261,8 +280,10 @@ $translations = array(
|
||||
'Save' => 'Kaydet',
|
||||
'Save and continue edit' => 'Kaydet ve düzenlemeye devam et',
|
||||
'Save and insert next' => 'Kaydet ve sonrakini ekle',
|
||||
'Selected' => 'Seçildi',
|
||||
'Clone' => 'Kopyala',
|
||||
'Delete' => 'Sil',
|
||||
'You have no privileges to update this table.' => 'Bu tabloyu güncellemek için yetkiniz yok.',
|
||||
|
||||
'E-mail' => 'E-posta',
|
||||
'From' => 'Gönderen',
|
||||
@@ -302,7 +323,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Şema silindi.',
|
||||
'Schema has been created.' => 'Şema oluşturuldu.',
|
||||
'Schema has been altered.' => 'Şema değiştirildi.',
|
||||
'schema' => 'şema',
|
||||
'Schema' => 'Şema',
|
||||
'Invalid schema.' => 'Geçersiz şema.',
|
||||
|
||||
|
||||
@@ -66,7 +66,6 @@ $translations = array(
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Занадто великий об\'єм POST-даних. Зменшіть об\'єм або збільшіть параметр директиви %s конфигурації.',
|
||||
|
||||
'Export' => 'Експорт',
|
||||
'Dump' => 'Дамп',
|
||||
'Output' => 'Вихідні дані',
|
||||
'open' => 'відкрити',
|
||||
'save' => 'зберегти',
|
||||
@@ -78,7 +77,6 @@ $translations = array(
|
||||
'Use' => 'Обрати',
|
||||
'Select database' => 'Обрати базу даних',
|
||||
'Invalid database.' => 'Погана база даних.',
|
||||
'Create new database' => 'Створити нову базу даних',
|
||||
'Database has been dropped.' => 'Базу даних було видалено.',
|
||||
'Databases have been dropped.' => 'Бази даних були видалені.',
|
||||
'Database has been created.' => 'Базу даних було створено.',
|
||||
@@ -93,6 +91,7 @@ $translations = array(
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ' ',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Рушій',
|
||||
'Collation' => 'Співставлення',
|
||||
'Data Length' => 'Об\'єм даних',
|
||||
@@ -144,7 +143,6 @@ $translations = array(
|
||||
'No tables.' => 'Нема таблиць.',
|
||||
'Alter table' => 'Змінити таблицю',
|
||||
'Create table' => 'Створити таблицю',
|
||||
'Create new table' => 'Створити нову таблицю',
|
||||
'Table has been dropped.' => 'Таблицю було видалено.',
|
||||
'Tables have been dropped.' => 'Таблиці були видалені.',
|
||||
'Tables have been optimized.' => 'Таблиці були оптимізовані.',
|
||||
@@ -166,7 +164,7 @@ $translations = array(
|
||||
'Move up' => 'Пересунути вгору',
|
||||
'Move down' => 'Пересунути вниз',
|
||||
'Remove' => 'Видалити',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'Досягнута максимальна кількість доступних полів. Будь ласка, збільшіть %s і %s.',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Досягнута максимальна кількість доступних полів. Будь ласка, збільшіть %s.',
|
||||
|
||||
'Partition by' => 'Розділити по',
|
||||
'Partitions' => 'Розділи',
|
||||
@@ -232,8 +230,7 @@ $translations = array(
|
||||
'%d row(s)' => array('%d рядок', '%d рядки', '%d рядків'),
|
||||
'Page' => 'Сторінка',
|
||||
'last' => 'остання',
|
||||
'Last page' => 'Остання сторінка',
|
||||
'whole result' => 'весь результат',
|
||||
'Whole result' => 'Весь результат',
|
||||
'%d byte(s)' => array('%d байт', '%d байта', '%d байтів'),
|
||||
|
||||
'Import' => 'Імпортувати',
|
||||
@@ -271,7 +268,7 @@ $translations = array(
|
||||
// data type descriptions
|
||||
'Numbers' => 'Числа',
|
||||
'Date and time' => 'Дата і час',
|
||||
'Strings' => 'Радки',
|
||||
'Strings' => 'Рядки',
|
||||
'Binary' => 'Двійкові',
|
||||
'Lists' => 'Списки',
|
||||
'Network' => 'Мережа',
|
||||
@@ -299,7 +296,6 @@ $translations = array(
|
||||
'Schema has been dropped.' => 'Схему було видалено.',
|
||||
'Schema has been created.' => 'Схему було створено.',
|
||||
'Schema has been altered.' => 'Схему було змінено.',
|
||||
'schema' => 'схема',
|
||||
'Schema' => 'Схема',
|
||||
'Invalid schema.' => 'Невірна схема.',
|
||||
|
||||
@@ -317,4 +313,34 @@ $translations = array(
|
||||
'Type has been dropped.' => 'Тип було видалено.',
|
||||
'Type has been created.' => 'Тип було створено.',
|
||||
'Alter type' => 'Змінити тип',
|
||||
'Drop %s?' => 'Вилучити %s?',
|
||||
'Materialized view' => 'Матеріалізований вигляд',
|
||||
'Selected' => 'Вибрані',
|
||||
'overwrite' => 'перезаписати',
|
||||
'DB' => 'DB',
|
||||
'File must be in UTF-8 encoding.' => 'Файл повинен бути в кодуванні UTF-8.',
|
||||
'Modify' => 'Змінити',
|
||||
'Load more data' => 'Завантажити ще дані',
|
||||
'Loading' => 'Завантаження',
|
||||
'ATTACH queries are not supported.' => 'ATTACH-запити не підтримуються.',
|
||||
'Warnings' => 'Попередження',
|
||||
'Limit rows' => 'Обмеження рядків',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer не підтримує доступ до бази даних без пароля, <a href="https://www.adminer.org/en/password/"%s>більше інформації</a>.',
|
||||
'Default value' => 'Значення за замовчуванням',
|
||||
'Full table scan' => 'Повне сканування таблиці',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилину.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилини.', 'Занадто багато невдалих спроб входу. Спробуйте знову через %d хвилин.'),
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Дякуємо, що користуєтесь Adminer, подумайте про <a href="https://www.adminer.org/en/donation/">внесок</a>.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Термін дії майстер пароля минув. <a href="https://www.adminer.org/en/extension/"%s>Реалізуйте</a> метод %s, щоб зробити його постійним.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Дія буде виконуватися після успішного входу в систему з тими ж обліковими даними.',
|
||||
'Connecting to privileged ports is not allowed.' => 'Підключення до привілейованих портів заборонено.',
|
||||
'There is a space in the input password which might be the cause.' => 'У вхідному паролі є пробіл, який може бути причиною.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Якщо ви не посилали цей запит з Adminer, закрийте цю сторінку.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Ви можете завантажити великий файл SQL через FTP та імпортувати його з сервера.',
|
||||
'Size' => 'Розмір',
|
||||
'Compute' => 'Обчислити',
|
||||
'You are offline.' => 'Ви офлайн.',
|
||||
'You have no privileges to update this table.' => 'Ви не маєте привілеїв для оновлення цієї таблиці.',
|
||||
'Saving' => 'Збереження',
|
||||
'Unknown error.' => 'Невідома помилка.',
|
||||
'Database does not support password.' => 'База даних не підтримує пароль.',
|
||||
);
|
||||
|
||||
328
adminer/lang/vi.inc.php
Normal file
328
adminer/lang/vi.inc.php
Normal file
@@ -0,0 +1,328 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'Hệ thống',
|
||||
'Server' => 'Máy chủ',
|
||||
'Username' => 'Tên người dùng',
|
||||
'Password' => 'Mật khẩu',
|
||||
'Permanent login' => 'Giữ đăng nhập một thời gian',
|
||||
'Login' => 'Đăng nhập',
|
||||
'Logout' => 'Thoát',
|
||||
'Logged as: %s' => 'Vào dưới tên: %s',
|
||||
'Logout successful.' => 'Đã thoát xong.',
|
||||
'Invalid credentials.' => 'Tài khoản sai.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => 'Bạn gõ sai tài khoản quá nhiều lần, hãy thử lại sau %d phút nữa.',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => 'Mật khẩu đã hết hạn. <a href="https://www.adminer.org/en/extension/"%s>Thử cách làm</a> để giữ cố định.',
|
||||
'Language' => 'Ngôn ngữ',
|
||||
'Invalid CSRF token. Send the form again.' => 'Mã kiểm tra CSRF sai, hãy nhập lại biểu mẫu.',
|
||||
'No extension' => 'Không có phần mở rộng',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Bản cài đặt PHP thiếu hỗ trợ cho %s.',
|
||||
'Session support must be enabled.' => 'Cần phải bật session.',
|
||||
'Session expired, please login again.' => 'Phiên làm việc đã hết, hãy đăng nhập lại.',
|
||||
'%s version: %s through PHP extension %s' => 'Phiên bản %s: %s (PHP extension: %s)',
|
||||
'Refresh' => 'Làm mới',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => 'Quyền truy cập',
|
||||
'Create user' => 'Tạo người dùng',
|
||||
'User has been dropped.' => 'Đã xoá người dùng.',
|
||||
'User has been altered.' => 'Đã sửa người dùng.',
|
||||
'User has been created.' => 'Đã tạo người dùng.',
|
||||
'Hashed' => 'Mã hoá',
|
||||
'Column' => 'Cột',
|
||||
'Routine' => 'Hàm tích hợp',
|
||||
'Grant' => 'Cấp quyền',
|
||||
'Revoke' => 'Tước quyền',
|
||||
|
||||
'Process list' => 'Danh sách tiến trình',
|
||||
'%d process(es) have been killed.' => '%d tiến trình đã dừng.',
|
||||
'Kill' => 'Dừng',
|
||||
|
||||
'Variables' => 'Biến',
|
||||
'Status' => 'Trạng thái',
|
||||
|
||||
'SQL command' => 'Câu lệnh SQL',
|
||||
'%d query(s) executed OK.' => '%d câu lệnh đã chạy thành công.',
|
||||
'Query executed OK, %d row(s) affected.' => 'Đã thực hiện xong, ảnh hưởng đến %d dòng.',
|
||||
'No commands to execute.' => 'Chẳng có gì để thực hiện!.',
|
||||
'Error in query' => 'Có lỗi trong câu lệnh',
|
||||
'Execute' => 'Thực hiện',
|
||||
'Stop on error' => 'Dừng khi có lỗi',
|
||||
'Show only errors' => 'Chỉ hiện lỗi',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f s',
|
||||
'History' => 'Lịch sử',
|
||||
'Clear' => 'Xoá',
|
||||
'Edit all' => 'Sửa tất cả',
|
||||
|
||||
'File upload' => 'Tải tệp lên',
|
||||
'From server' => 'Dùng tệp trên máy chủ',
|
||||
'Webserver file %s' => 'Tệp trên máy chủ',
|
||||
'Run file' => 'Chạy tệp',
|
||||
'File does not exist.' => 'Tệp không tồn tại.',
|
||||
'File uploads are disabled.' => 'Chức năng tải tệp lên đã bị cấm.',
|
||||
'Unable to upload a file.' => 'Không thể tải tệp lên.',
|
||||
'Maximum allowed file size is %sB.' => 'Kích thước tệp tối đa là %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Dữ liệu tải lên/POST quá lớn. Hãy giảm kích thước tệp hoặc tăng cấu hình (hiện tại %s).',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Bạn có thể tải tệp lên dùng FTP và nhập vào cơ sở dữ liệu.',
|
||||
|
||||
'Export' => 'Xuất',
|
||||
'Output' => 'Kết quả',
|
||||
'open' => 'xem',
|
||||
'save' => 'lưu',
|
||||
'Format' => 'Định dạng',
|
||||
'Data' => 'Dữ liệu',
|
||||
|
||||
'Database' => 'Cơ sở dữ liệu',
|
||||
'database' => 'cơ sở dữ liệu',
|
||||
'Use' => 'Sử dụng',
|
||||
'Select database' => 'Chọn CSDL',
|
||||
'Invalid database.' => 'CSDL sai.',
|
||||
'Database has been dropped.' => 'CSDL đã bị xoá.',
|
||||
'Databases have been dropped.' => 'Các CSDL đã bị xoá.',
|
||||
'Database has been created.' => 'Đã tạo CSDL.',
|
||||
'Database has been renamed.' => 'Đã đổi tên CSDL.',
|
||||
'Database has been altered.' => 'Đã thay đổi CSDL.',
|
||||
'Alter database' => 'Thay đổi CSDL',
|
||||
'Create database' => 'Tạo CSDL',
|
||||
'Database schema' => 'Cấu trúc CSDL',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'Liên kết cố định',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => 'Cơ chế lưu trữ',
|
||||
'Collation' => 'Bộ mã',
|
||||
'Data Length' => 'Kích thước dữ liệu',
|
||||
'Index Length' => 'Kích thước chỉ mục',
|
||||
'Data Free' => 'Dữ liệu trống',
|
||||
'Rows' => 'Số dòng',
|
||||
'%d in total' => '%s',
|
||||
'Analyze' => 'Phân tích',
|
||||
'Optimize' => 'Tối ưu',
|
||||
'Vacuum' => 'Dọn dẹp',
|
||||
'Check' => 'Kiểm tra',
|
||||
'Repair' => 'Sửa chữa',
|
||||
'Truncate' => 'Làm rỗng',
|
||||
'Tables have been truncated.' => 'Bảng đã bị làm rỗng.',
|
||||
'Move to other database' => 'Chuyển tới cơ sở dữ liệu khác',
|
||||
'Move' => 'Chuyển đi',
|
||||
'Tables have been moved.' => 'Bảng.',
|
||||
'Copy' => 'Sao chép',
|
||||
'Tables have been copied.' => 'Bảng đã được sao chép.',
|
||||
|
||||
'Routines' => 'Routines',
|
||||
'Routine has been called, %d row(s) affected.' => 'Đã chạy routine, thay đổi %d dòng.',
|
||||
'Call' => 'Gọi',
|
||||
'Parameter name' => 'Tham số',
|
||||
'Create procedure' => 'Tạo lệnh',
|
||||
'Create function' => 'Tạo hàm',
|
||||
'Routine has been dropped.' => 'Đã xoá routine.',
|
||||
'Routine has been altered.' => 'Đã thay đổi routine.',
|
||||
'Routine has been created.' => 'Đã tạo routine.',
|
||||
'Alter function' => 'Thay đổi hàm',
|
||||
'Alter procedure' => 'Thay đổi thủ tục',
|
||||
'Return type' => 'Giá trị trả về',
|
||||
'Events' => 'Sự kiện',
|
||||
'Event has been dropped.' => 'Đã xoá sự kiện.',
|
||||
'Event has been altered.' => 'Đã thay đổi sự kiện.',
|
||||
'Event has been created.' => 'Đã tạo sự kiện.',
|
||||
'Alter event' => 'Sửa sự kiện',
|
||||
'Create event' => 'Tạo sự kiện',
|
||||
'At given time' => 'Vào thời gian xác định',
|
||||
'Every' => 'Mỗi',
|
||||
'Schedule' => 'Đặt lịch',
|
||||
'Start' => 'Bắt đầu',
|
||||
'End' => 'Kết thúc',
|
||||
'On completion preserve' => 'Khi kết thúc, duy trì',
|
||||
|
||||
'Tables' => 'Các bảng',
|
||||
'Tables and views' => 'Bảng và khung nhìn',
|
||||
'Table' => 'Bảng',
|
||||
'No tables.' => 'Không có bảng nào.',
|
||||
'Alter table' => 'Sửa bảng',
|
||||
'Create table' => 'Tạo bảng',
|
||||
'Table has been dropped.' => 'Bảng đã bị xoá.',
|
||||
'Tables have been dropped.' => 'Các bảng đã bị xoá.',
|
||||
'Tables have been optimized.' => 'Bảng đã được tối ưu.',
|
||||
'Table has been altered.' => 'Bảng đã thay đổi.',
|
||||
'Table has been created.' => 'Bảng đã được tạo.',
|
||||
'Table name' => 'Tên bảng',
|
||||
'Show structure' => 'Hiện cấu trúc',
|
||||
'engine' => 'cơ chế lưu trữ',
|
||||
'collation' => 'bảng mã',
|
||||
'Column name' => 'Tên cột',
|
||||
'Type' => 'Loại',
|
||||
'Length' => 'Độ dài',
|
||||
'Auto Increment' => 'Tăng tự động',
|
||||
'Options' => 'Tuỳ chọn',
|
||||
'Comment' => 'Chú thích',
|
||||
'Default values' => 'Giá trị mặc định',
|
||||
'Drop' => 'Xoá',
|
||||
'Are you sure?' => 'Bạn có chắc',
|
||||
'Size' => 'Kích thước',
|
||||
'Compute' => 'Tính',
|
||||
'Move up' => 'Chuyển lên trên',
|
||||
'Move down' => 'Chuyển xuống dưới',
|
||||
'Remove' => 'Xoá',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Thiết lập %s cần tăng thêm. (Đã vượt giới hạnố trường tối đa cho phép trong một biểu mẫu).',
|
||||
|
||||
'Partition by' => 'Phân chia bằng',
|
||||
'Partitions' => 'Phân hoạch',
|
||||
'Partition name' => 'Tên phân hoạch',
|
||||
'Values' => 'Giá trị',
|
||||
|
||||
'View' => 'Khung nhìn',
|
||||
'View has been dropped.' => 'Khung nhìn đã bị xoá.',
|
||||
'View has been altered.' => 'Khung nhìn đã được sửa.',
|
||||
'View has been created.' => 'Khung nhìn đã được tạo.',
|
||||
'Alter view' => 'Sửa khung nhìn',
|
||||
'Create view' => 'Tạo khung nhìn',
|
||||
|
||||
'Indexes' => 'Chỉ mục',
|
||||
'Indexes have been altered.' => 'Chỉ mục đã được sửa.',
|
||||
'Alter indexes' => 'Sửa chỉ mục',
|
||||
'Add next' => 'Thêm tiếp',
|
||||
'Index Type' => 'Loại chỉ mục',
|
||||
'Column (length)' => 'Cột (độ dài)',
|
||||
|
||||
'Foreign keys' => 'Các khoá ngoại',
|
||||
'Foreign key' => 'Khoá ngoại',
|
||||
'Foreign key has been dropped.' => 'Khoá ngoại đã bị xoá.',
|
||||
'Foreign key has been altered.' => 'Khoá ngoại đã được sửa.',
|
||||
'Foreign key has been created.' => 'Khoá ngoại đã được tạo.',
|
||||
'Target table' => 'Bảng đích',
|
||||
'Change' => 'Thay đổi',
|
||||
'Source' => 'Nguồn',
|
||||
'Target' => 'Đích',
|
||||
'Add column' => 'Thêm cột',
|
||||
'Alter' => 'Sửa',
|
||||
'Add foreign key' => 'Thêm khoá ngoại',
|
||||
'ON DELETE' => 'Khi xoá',
|
||||
'ON UPDATE' => 'Khi cập nhật',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Cột gốc và cột đích phải cùng kiểu, phải đặt chỉ mục trong cột đích và dữ liệu tham chiếu phải tồn tại.',
|
||||
|
||||
'Triggers' => 'Phản xạ',
|
||||
'Add trigger' => 'Thêm phản xạ',
|
||||
'Trigger has been dropped.' => 'Đã xoá phản xạ.',
|
||||
'Trigger has been altered.' => 'Đã sửa phản xạ.',
|
||||
'Trigger has been created.' => 'Đã tạo phản xạ.',
|
||||
'Alter trigger' => 'Sửa phản xạ',
|
||||
'Create trigger' => 'Tạo phản xạ',
|
||||
'Time' => 'Thời gian',
|
||||
'Event' => 'Sự kiện',
|
||||
'Name' => 'Tên',
|
||||
|
||||
'select' => 'xem',
|
||||
'Select' => 'Xem',
|
||||
'Select data' => 'Xem dữ liệu',
|
||||
'Functions' => 'Các chức năng',
|
||||
'Aggregation' => 'Tổng hợp',
|
||||
'Search' => 'Tìm kiếm',
|
||||
'anywhere' => 'bất cứ đâu',
|
||||
'Search data in tables' => 'Tìm kiếm dữ liệu trong các bảng',
|
||||
'Sort' => 'Sắp xếp',
|
||||
'descending' => 'giảm dần',
|
||||
'Limit' => 'Giới hạn',
|
||||
'Text length' => 'Chiều dài văn bản',
|
||||
'Action' => 'Hành động',
|
||||
'Full table scan' => 'Quét toàn bộ bảng',
|
||||
'Unable to select the table' => 'Không thể xem dữ liệu',
|
||||
'No rows.' => 'Không có dòng dữ liệu nào.',
|
||||
'%d row(s)' => '%s dòng',
|
||||
'Page' => 'trang',
|
||||
'last' => 'cuối',
|
||||
'Load more data' => 'Xem thêm dữ liệu',
|
||||
'Loading' => 'Đang nạp',
|
||||
'Whole result' => 'Toàn bộ kết quả',
|
||||
'%d byte(s)' => '%d byte(s)',
|
||||
|
||||
'Import' => 'Nhập khẩu',
|
||||
'%d row(s) have been imported.' => 'Đã nhập % dòng dữ liệu.',
|
||||
'File must be in UTF-8 encoding.' => 'Tệp phải mã hoá bằng chuẩn UTF-8.',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => 'Sửa',
|
||||
'Ctrl+click on a value to modify it.' => 'Nhấn Ctrl và bấm vào giá trị để sửa.',
|
||||
'Use edit link to modify this value.' => 'Dùng nút sửa để thay đổi giá trị này.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'Đã thêm%s.',
|
||||
'Item has been deleted.' => 'Đã xoá.',
|
||||
'Item has been updated.' => 'Đã cập nhật.',
|
||||
'%d item(s) have been affected.' => '%d phần đã thay đổi.',
|
||||
'New item' => 'Thêm',
|
||||
'original' => 'bản gốc',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'trống',
|
||||
'edit' => 'sửa',
|
||||
'Edit' => 'Sửa',
|
||||
'Insert' => 'Thêm',
|
||||
'Save' => 'Lưu',
|
||||
'Save and continue edit' => 'Lưu và tiếp tục sửa',
|
||||
'Save and insert next' => 'Lưu và thêm tiếp',
|
||||
'Selected' => 'Chọn',
|
||||
'Clone' => 'Sao chép',
|
||||
'Delete' => 'Xoá',
|
||||
'You have no privileges to update this table.' => 'Bạn không có quyền sửa bảng này.',
|
||||
|
||||
'E-mail' => 'Địa chỉ email',
|
||||
'From' => 'Người gửi',
|
||||
'Subject' => 'Chủ đề',
|
||||
'Attachments' => 'Đính kèm',
|
||||
'Send' => 'Gửi',
|
||||
'%d e-mail(s) have been sent.' => '%d thư đã gửi.',
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'Số',
|
||||
'Date and time' => 'Ngày giờ',
|
||||
'Strings' => 'Chuỗi',
|
||||
'Binary' => 'Mã máy',
|
||||
'Lists' => 'Danh sách',
|
||||
'Network' => 'Mạng',
|
||||
'Geometry' => 'Toạ độ',
|
||||
'Relations' => 'Quan hệ',
|
||||
|
||||
'Editor' => 'Biên tập',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1-$3-$5',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => '[yyyy]-mm-dd',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => 'hiện tại',
|
||||
'yes' => 'có',
|
||||
'no' => 'không',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'Tệp đã có rồi.',
|
||||
'Please use one of the extensions %s.' => 'Cần phải dùng một trong các phần mở rộng sau: %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'Thay đổi schema',
|
||||
'Create schema' => 'Tạo schema',
|
||||
'Schema has been dropped.' => 'Đã xoá schema.',
|
||||
'Schema has been created.' => 'Đã tạo schema.',
|
||||
'Schema has been altered.' => 'Đã thay đổi schema.',
|
||||
'Schema' => 'Schema',
|
||||
'Invalid schema.' => 'Schema không hợp lệ.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'Dãy số',
|
||||
'Create sequence' => 'Tạo dãy số',
|
||||
'Sequence has been dropped.' => 'Dãy số đã bị xoá.',
|
||||
'Sequence has been created.' => 'Đã tạo dãy số.',
|
||||
'Sequence has been altered.' => 'Đã sửa dãy số.',
|
||||
'Alter sequence' => 'Thay đổi dãy số',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'Kiểu tự định nghĩa',
|
||||
'Create type' => 'Tạo kiểu',
|
||||
'Type has been dropped.' => 'Đã xoá kiểu.',
|
||||
'Type has been created.' => 'Đã tạo kiểu.',
|
||||
'Alter type' => 'Sửa kiểu dữ liệu',
|
||||
);
|
||||
@@ -1,324 +1,349 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => 'xx',
|
||||
'Server' => 'xx',
|
||||
'Username' => 'xx',
|
||||
'Password' => 'xx',
|
||||
'Permanent login' => 'xx',
|
||||
'Login' => 'xx',
|
||||
'Logout' => 'xx',
|
||||
'Logged as: %s' => 'xx',
|
||||
'Logout successful.' => 'xx',
|
||||
'Invalid credentials.' => 'xx',
|
||||
'Language' => 'xx',
|
||||
'Invalid CSRF token. Send the form again.' => 'xx',
|
||||
'No extension' => 'xx',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'xx',
|
||||
'Session support must be enabled.' => 'xx',
|
||||
'Session expired, please login again.' => 'xx',
|
||||
'%s version: %s through PHP extension %s' => 'xx',
|
||||
'Refresh' => 'xx',
|
||||
'System' => 'Xx',
|
||||
'Server' => 'Xx',
|
||||
'Username' => 'Xx',
|
||||
'Password' => 'Xx',
|
||||
'Permanent login' => 'Xx',
|
||||
'Login' => 'Xx',
|
||||
'Logout' => 'Xx',
|
||||
'Logged as: %s' => 'Xx: %s',
|
||||
'Logout successful.' => 'Xx.',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => 'Xx <a href="https://www.adminer.org/en/donation/">xx</a>.',
|
||||
'Invalid credentials.' => 'Xx.',
|
||||
'There is a space in the input password which might be the cause.' => 'Xx.',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Xx, <a href="https://www.adminer.org/en/password/"%s>xx</a>.',
|
||||
'Database does not support password.' => 'Xx.',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => array('Xx %d.', 'Xx %d.'),
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => '<a href="https://www.adminer.org/en/extension/"%s>Xx</a> %s xx.',
|
||||
'Language' => 'Xx',
|
||||
'Invalid CSRF token. Send the form again.' => 'Xx.',
|
||||
'If you did not send this request from Adminer then close this page.' => 'Xx.',
|
||||
'No extension' => 'Xx',
|
||||
'None of the supported PHP extensions (%s) are available.' => 'Xx (%s).',
|
||||
'Connecting to privileged ports is not allowed.' => 'Xx.',
|
||||
'Disable %s or enable %s or %s extensions.' => 'Xx %s xx %s xx %s xx.',
|
||||
'Session support must be enabled.' => 'Xx.',
|
||||
'Session expired, please login again.' => 'Xx.',
|
||||
'The action will be performed after successful login with the same credentials.' => 'Xx.',
|
||||
'%s version: %s through PHP extension %s' => '%s xx: %s xx %s',
|
||||
'Refresh' => 'Xx',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'xx',
|
||||
|
||||
'Privileges' => 'xx',
|
||||
'Create user' => 'xx',
|
||||
'User has been dropped.' => 'xx',
|
||||
'User has been altered.' => 'xx',
|
||||
'User has been created.' => 'xx',
|
||||
'Hashed' => 'xx',
|
||||
'Column' => 'xx',
|
||||
'Routine' => 'xx',
|
||||
'Grant' => 'xx',
|
||||
'Revoke' => 'xx',
|
||||
'Privileges' => 'Xx',
|
||||
'Create user' => 'Xx',
|
||||
'User has been dropped.' => 'Xx.',
|
||||
'User has been altered.' => 'Xx.',
|
||||
'User has been created.' => 'Xx.',
|
||||
'Hashed' => 'Xx',
|
||||
'Column' => 'Xx',
|
||||
'Routine' => 'Xx',
|
||||
'Grant' => 'Xx',
|
||||
'Revoke' => 'Xx',
|
||||
|
||||
'Process list' => 'xx',
|
||||
'%d process(es) have been killed.' => array('xx', 'xx'),
|
||||
'Kill' => 'xx',
|
||||
'Process list' => 'Xx',
|
||||
'%d process(es) have been killed.' => array('%d xx.', '%d xx.'),
|
||||
'Kill' => 'Xx',
|
||||
|
||||
'Variables' => 'xx',
|
||||
'Status' => 'xx',
|
||||
'Variables' => 'Xx',
|
||||
'Status' => 'Xx',
|
||||
|
||||
'SQL command' => 'xx',
|
||||
'%d query(s) executed OK.' => array('xx', 'xx'),
|
||||
'Query executed OK, %d row(s) affected.' => array('xx', 'xx'),
|
||||
'No commands to execute.' => 'xx',
|
||||
'Error in query' => 'xx',
|
||||
'Execute' => 'xx',
|
||||
'Stop on error' => 'xx',
|
||||
'Show only errors' => 'xx',
|
||||
'SQL command' => 'Xx',
|
||||
'%d query(s) executed OK.' => array('%d xx.', '%d xx.'),
|
||||
'Query executed OK, %d row(s) affected.' => array('Xx, %d.', 'Xx, %d.'),
|
||||
'No commands to execute.' => 'Xx.',
|
||||
'Error in query' => 'Xx',
|
||||
'Unknown error.' => 'Xx.',
|
||||
'Warnings' => 'Xx',
|
||||
'ATTACH queries are not supported.' => 'Xx.',
|
||||
'Execute' => 'Xx',
|
||||
'Stop on error' => 'Xx',
|
||||
'Show only errors' => 'Xx',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => 'xx',
|
||||
'History' => 'xx',
|
||||
'Clear' => 'xx',
|
||||
'Edit all' => 'xx',
|
||||
'%.3f s' => '%.3f xx',
|
||||
'History' => 'Xx',
|
||||
'Clear' => 'Xx',
|
||||
'Edit all' => 'Xx',
|
||||
|
||||
'File upload' => 'xx',
|
||||
'From server' => 'xx',
|
||||
'Webserver file %s' => 'xx',
|
||||
'Run file' => 'xx',
|
||||
'File does not exist.' => 'xx',
|
||||
'File uploads are disabled.' => 'xx',
|
||||
'Unable to upload a file.' => 'xx',
|
||||
'Maximum allowed file size is %sB.' => 'xx',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'xx',
|
||||
'File upload' => 'Xx',
|
||||
'From server' => 'Xx',
|
||||
'Webserver file %s' => 'Xx %s',
|
||||
'Run file' => 'Xx',
|
||||
'File does not exist.' => 'Xx.',
|
||||
'File uploads are disabled.' => 'Xx.',
|
||||
'Unable to upload a file.' => 'Xx.',
|
||||
'Maximum allowed file size is %sB.' => 'Xx %sB.',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'Xx %s.',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => 'Xx.',
|
||||
'You are offline.' => 'Xx.',
|
||||
|
||||
'Export' => 'xx',
|
||||
'Dump' => 'xx',
|
||||
'Output' => 'xx',
|
||||
'Export' => 'Xx',
|
||||
'Output' => 'Xx',
|
||||
'open' => 'xx',
|
||||
'save' => 'xx',
|
||||
'Format' => 'xx',
|
||||
'Data' => 'xx',
|
||||
'Saving' => 'Xx',
|
||||
'Format' => 'Xx',
|
||||
'Data' => 'Xx',
|
||||
|
||||
'Database' => 'xx',
|
||||
'Database' => 'Xx',
|
||||
'database' => 'xx',
|
||||
'Use' => 'xx',
|
||||
'Select database' => 'xx',
|
||||
'Invalid database.' => 'xx',
|
||||
'Create new database' => 'xx',
|
||||
'Database has been dropped.' => 'xx',
|
||||
'Databases have been dropped.' => 'xx',
|
||||
'Database has been created.' => 'xx',
|
||||
'Database has been renamed.' => 'xx',
|
||||
'Database has been altered.' => 'xx',
|
||||
'Alter database' => 'xx',
|
||||
'Create database' => 'xx',
|
||||
'Database schema' => 'xx',
|
||||
'DB' => 'XX',
|
||||
'Use' => 'Xx',
|
||||
'Select database' => 'Xx',
|
||||
'Invalid database.' => 'Xx.',
|
||||
'Database has been dropped.' => 'Xx.',
|
||||
'Databases have been dropped.' => 'Xx.',
|
||||
'Database has been created.' => 'Xx.',
|
||||
'Database has been renamed.' => 'Xx.',
|
||||
'Database has been altered.' => 'Xx.',
|
||||
'Alter database' => 'Xx',
|
||||
'Create database' => 'Xx',
|
||||
'Database schema' => 'Xx',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => 'xx',
|
||||
'Permanent link' => 'Xx',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => 'xx',
|
||||
'Engine' => 'xx',
|
||||
'Collation' => 'xx',
|
||||
'Data Length' => 'xx',
|
||||
'Index Length' => 'xx',
|
||||
'Data Free' => 'xx',
|
||||
'Rows' => 'xx',
|
||||
'%d in total' => 'xx',
|
||||
'Analyze' => 'xx',
|
||||
'Optimize' => 'xx',
|
||||
'Check' => 'xx',
|
||||
'Repair' => 'xx',
|
||||
'Truncate' => 'xx',
|
||||
'Tables have been truncated.' => 'xx',
|
||||
'Move to other database' => 'xx',
|
||||
'Move' => 'xx',
|
||||
'Tables have been moved.' => 'xx',
|
||||
'Copy' => 'xx',
|
||||
'Tables have been copied.' => 'xx',
|
||||
',' => 'x',
|
||||
'0123456789' => 'xxxxxxxxxx',
|
||||
'Engine' => 'Xx',
|
||||
'Collation' => 'Xx',
|
||||
'Data Length' => 'Xx',
|
||||
'Index Length' => 'Xx',
|
||||
'Data Free' => 'Xx',
|
||||
'Rows' => 'Xx',
|
||||
'%d in total' => '%d xx',
|
||||
'Analyze' => 'Xx',
|
||||
'Optimize' => 'Xx',
|
||||
'Vacuum' => 'Xx',
|
||||
'Check' => 'Xx',
|
||||
'Repair' => 'Xx',
|
||||
'Truncate' => 'Xx',
|
||||
'Tables have been truncated.' => 'Xx.',
|
||||
'Move to other database' => 'Xx',
|
||||
'Move' => 'Xx',
|
||||
'Tables have been moved.' => 'Xx.',
|
||||
'Copy' => 'Xx',
|
||||
'Tables have been copied.' => 'Xx.',
|
||||
'overwrite' => 'xx',
|
||||
|
||||
'Routines' => 'xx',
|
||||
'Routine has been called, %d row(s) affected.' => array('xx', 'xx'),
|
||||
'Call' => 'xx',
|
||||
'Parameter name' => 'xx',
|
||||
'Create procedure' => 'xx',
|
||||
'Create function' => 'xx',
|
||||
'Routine has been dropped.' => 'xx',
|
||||
'Routine has been altered.' => 'xx',
|
||||
'Routine has been created.' => 'xx',
|
||||
'Alter function' => 'xx',
|
||||
'Alter procedure' => 'xx',
|
||||
'Return type' => 'xx',
|
||||
'Routines' => 'Xx',
|
||||
'Routine has been called, %d row(s) affected.' => array('Xx, %d.', 'Xx, %d.'),
|
||||
'Call' => 'Xx',
|
||||
'Parameter name' => 'Xx',
|
||||
'Create procedure' => 'Xx',
|
||||
'Create function' => 'Xx',
|
||||
'Routine has been dropped.' => 'Xx.',
|
||||
'Routine has been altered.' => 'Xx.',
|
||||
'Routine has been created.' => 'Xx.',
|
||||
'Alter function' => 'Xx',
|
||||
'Alter procedure' => 'Xx',
|
||||
'Return type' => 'Xx',
|
||||
|
||||
'Events' => 'xx',
|
||||
'Event has been dropped.' => 'xx',
|
||||
'Event has been altered.' => 'xx',
|
||||
'Event has been created.' => 'xx',
|
||||
'Alter event' => 'xx',
|
||||
'Create event' => 'xx',
|
||||
'At given time' => 'xx',
|
||||
'Every' => 'xx',
|
||||
'Schedule' => 'xx',
|
||||
'Start' => 'xx',
|
||||
'End' => 'xx',
|
||||
'On completion preserve' => 'xx',
|
||||
'Events' => 'Xx',
|
||||
'Event has been dropped.' => 'Xx.',
|
||||
'Event has been altered.' => 'Xx.',
|
||||
'Event has been created.' => 'Xx.',
|
||||
'Alter event' => 'Xx',
|
||||
'Create event' => 'Xx',
|
||||
'At given time' => 'Xx',
|
||||
'Every' => 'Xx',
|
||||
'Schedule' => 'Xx',
|
||||
'Start' => 'Xx',
|
||||
'End' => 'Xx',
|
||||
'On completion preserve' => 'Xx',
|
||||
|
||||
'Tables' => 'xx',
|
||||
'Tables and views' => 'xx',
|
||||
'Table' => 'xx',
|
||||
'No tables.' => 'xx',
|
||||
'Alter table' => 'xx',
|
||||
'Create table' => 'xx',
|
||||
'Create new table' => 'xx',
|
||||
'Table has been dropped.' => 'xx',
|
||||
'Tables have been dropped.' => 'xx',
|
||||
'Tables have been optimized.' => 'xx',
|
||||
'Table has been altered.' => 'xx',
|
||||
'Table has been created.' => 'xx',
|
||||
'Table name' => 'xx',
|
||||
'Show structure' => 'xx',
|
||||
'Tables' => 'Xx',
|
||||
'Tables and views' => 'Xx',
|
||||
'Table' => 'Xx',
|
||||
'No tables.' => 'Xx.',
|
||||
'Alter table' => 'Xx',
|
||||
'Create table' => 'Xx',
|
||||
'Table has been dropped.' => 'Xx.',
|
||||
'Tables have been dropped.' => 'Xx.',
|
||||
'Tables have been optimized.' => 'Xx.',
|
||||
'Table has been altered.' => 'Xx.',
|
||||
'Table has been created.' => 'Xx.',
|
||||
'Table name' => 'Xx',
|
||||
'Show structure' => 'Xx',
|
||||
'engine' => 'xx',
|
||||
'collation' => 'xx',
|
||||
'Column name' => 'xx',
|
||||
'Type' => 'xx',
|
||||
'Length' => 'xx',
|
||||
'Auto Increment' => 'xx',
|
||||
'Options' => 'xx',
|
||||
'Comment' => 'xx',
|
||||
'Default values' => 'xx',
|
||||
'Drop' => 'xx',
|
||||
'Are you sure?' => 'xx',
|
||||
'Move up' => 'xx',
|
||||
'Move down' => 'xx',
|
||||
'Remove' => 'xx',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => 'xx',
|
||||
'Column name' => 'Xx',
|
||||
'Type' => 'Xx',
|
||||
'Length' => 'Xx',
|
||||
'Auto Increment' => 'Xx',
|
||||
'Options' => 'Xx',
|
||||
'Comment' => 'Xx',
|
||||
'Default value' => 'Xx',
|
||||
'Default values' => 'Xx',
|
||||
'Drop' => 'Xx',
|
||||
'Drop %s?' => 'Xx %s?',
|
||||
'Are you sure?' => 'Xx?',
|
||||
'Size' => 'Xx',
|
||||
'Compute' => 'Xx',
|
||||
'Move up' => 'Xx',
|
||||
'Move down' => 'Xx',
|
||||
'Remove' => 'Xx',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => 'Xx %s.',
|
||||
|
||||
'Partition by' => 'xx',
|
||||
'Partitions' => 'xx',
|
||||
'Partition name' => 'xx',
|
||||
'Values' => 'xx',
|
||||
'Partition by' => 'Xx',
|
||||
'Partitions' => 'Xx',
|
||||
'Partition name' => 'Xx',
|
||||
'Values' => 'Xx',
|
||||
|
||||
'View' => 'xx',
|
||||
'View has been dropped.' => 'xx',
|
||||
'View has been altered.' => 'xx',
|
||||
'View has been created.' => 'xx',
|
||||
'Alter view' => 'xx',
|
||||
'Create view' => 'xx',
|
||||
'View' => 'Xx',
|
||||
'Materialized view' => 'Xx',
|
||||
'View has been dropped.' => 'Xx.',
|
||||
'View has been altered.' => 'Xx.',
|
||||
'View has been created.' => 'Xx.',
|
||||
'Alter view' => 'Xx',
|
||||
'Create view' => 'Xx',
|
||||
|
||||
'Indexes' => 'xx',
|
||||
'Indexes have been altered.' => 'xx',
|
||||
'Alter indexes' => 'xx',
|
||||
'Add next' => 'xx',
|
||||
'Index Type' => 'xx',
|
||||
'Column (length)' => 'xx',
|
||||
'Indexes' => 'Xx',
|
||||
'Indexes have been altered.' => 'Xx.',
|
||||
'Alter indexes' => 'Xx',
|
||||
'Add next' => 'Xx',
|
||||
'Index Type' => 'Xx',
|
||||
'Column (length)' => 'Xx',
|
||||
|
||||
'Foreign keys' => 'xx',
|
||||
'Foreign key' => 'xx',
|
||||
'Foreign key has been dropped.' => 'xx',
|
||||
'Foreign key has been altered.' => 'xx',
|
||||
'Foreign key has been created.' => 'xx',
|
||||
'Target table' => 'xx',
|
||||
'Change' => 'xx',
|
||||
'Source' => 'xx',
|
||||
'Target' => 'xx',
|
||||
'Add column' => 'xx',
|
||||
'Alter' => 'xx',
|
||||
'Add foreign key' => 'xx',
|
||||
'ON DELETE' => 'xx',
|
||||
'ON UPDATE' => 'xx',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'xx',
|
||||
'Foreign keys' => 'Xx',
|
||||
'Foreign key' => 'Xx',
|
||||
'Foreign key has been dropped.' => 'Xx.',
|
||||
'Foreign key has been altered.' => 'Xx.',
|
||||
'Foreign key has been created.' => 'Xx.',
|
||||
'Target table' => 'Xx',
|
||||
'Change' => 'Xx',
|
||||
'Source' => 'Xx',
|
||||
'Target' => 'Xx',
|
||||
'Add column' => 'Xx',
|
||||
'Alter' => 'Xx',
|
||||
'Add foreign key' => 'Xx',
|
||||
'ON DELETE' => 'Xx',
|
||||
'ON UPDATE' => 'Xx',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => 'Xx.',
|
||||
|
||||
'Triggers' => 'xx',
|
||||
'Add trigger' => 'xx',
|
||||
'Trigger has been dropped.' => 'xx',
|
||||
'Trigger has been altered.' => 'xx',
|
||||
'Trigger has been created.' => 'xx',
|
||||
'Alter trigger' => 'xx',
|
||||
'Create trigger' => 'xx',
|
||||
'Time' => 'xx',
|
||||
'Event' => 'xx',
|
||||
'Name' => 'xx',
|
||||
'Triggers' => 'Xx',
|
||||
'Add trigger' => 'Xx',
|
||||
'Trigger has been dropped.' => 'Xx.',
|
||||
'Trigger has been altered.' => 'Xx.',
|
||||
'Trigger has been created.' => 'Xx.',
|
||||
'Alter trigger' => 'Xx',
|
||||
'Create trigger' => 'Xx',
|
||||
'Time' => 'Xx',
|
||||
'Event' => 'Xx',
|
||||
'Name' => 'Xx',
|
||||
|
||||
'select' => 'xx',
|
||||
'Select' => 'xx',
|
||||
'Select data' => 'xx',
|
||||
'Functions' => 'xx',
|
||||
'Aggregation' => 'xx',
|
||||
'Search' => 'xx',
|
||||
'Select' => 'Xx',
|
||||
'Select data' => 'Xx',
|
||||
'Functions' => 'Xx',
|
||||
'Aggregation' => 'Xx',
|
||||
'Search' => 'Xx',
|
||||
'anywhere' => 'xx',
|
||||
'Search data in tables' => 'xx',
|
||||
'Sort' => 'xx',
|
||||
'Search data in tables' => 'Xx',
|
||||
'Sort' => 'Xx',
|
||||
'descending' => 'xx',
|
||||
'Limit' => 'xx',
|
||||
'Text length' => 'xx',
|
||||
'Action' => 'xx',
|
||||
'Full table scan' => 'xx',
|
||||
'Unable to select the table' => 'xx',
|
||||
'No rows.' => 'xx',
|
||||
'%d row(s)' => array('xx', 'xx'),
|
||||
'Page' => 'xx',
|
||||
'Limit' => 'Xx',
|
||||
'Limit rows' => 'Xx',
|
||||
'Text length' => 'Xx',
|
||||
'Action' => 'Xx',
|
||||
'Full table scan' => 'Xx',
|
||||
'Unable to select the table' => 'Xx',
|
||||
'No rows.' => 'Xx.',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => array('%d xx', '%d xx'),
|
||||
'Page' => 'Xx',
|
||||
'last' => 'xx',
|
||||
'Last page' => 'xx',
|
||||
'Load more data' => 'xx',
|
||||
'Loading' => 'xx',
|
||||
'whole result' => 'xx',
|
||||
'%d byte(s)' => array('xx', 'xx'),
|
||||
'Load more data' => 'Xx',
|
||||
'Loading' => 'Xx',
|
||||
'Whole result' => 'Xx',
|
||||
'%d byte(s)' => array('%d xx', '%d xx'),
|
||||
|
||||
'Import' => 'xx',
|
||||
'%d row(s) have been imported.' => array('xx', 'xx'),
|
||||
'Import' => 'Xx',
|
||||
'%d row(s) have been imported.' => array('%d xx.', '%d xx.'),
|
||||
'File must be in UTF-8 encoding.' => 'Xx.',
|
||||
|
||||
// in-place editing in select
|
||||
'Ctrl+click on a value to modify it.' => 'xx',
|
||||
'Use edit link to modify this value.' => 'xx',
|
||||
'Modify' => 'Xx',
|
||||
'Ctrl+click on a value to modify it.' => 'Xx.',
|
||||
'Use edit link to modify this value.' => 'Xx.',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => 'xx',
|
||||
'Item has been deleted.' => 'xx',
|
||||
'Item has been updated.' => 'xx',
|
||||
'%d item(s) have been affected.' => array('xx', 'xx'),
|
||||
'New item' => 'xx',
|
||||
'Item%s has been inserted.' => 'Xx%s.',
|
||||
'Item has been deleted.' => 'Xx.',
|
||||
'Item has been updated.' => 'Xx.',
|
||||
'%d item(s) have been affected.' => array('%d xx.', '%d xx.'),
|
||||
'New item' => 'Xx',
|
||||
'original' => 'xx',
|
||||
// label for value '' in enum data type
|
||||
'empty' => 'xx',
|
||||
'edit' => 'xx',
|
||||
'Edit' => 'xx',
|
||||
'Insert' => 'xx',
|
||||
'Save' => 'xx',
|
||||
'Save and continue edit' => 'xx',
|
||||
'Save and insert next' => 'xx',
|
||||
'Clone' => 'xx',
|
||||
'Delete' => 'xx',
|
||||
'You have no privileges to update this table.' => 'xx',
|
||||
'Edit' => 'Xx',
|
||||
'Insert' => 'Xx',
|
||||
'Save' => 'Xx',
|
||||
'Save and continue edit' => 'Xx',
|
||||
'Save and insert next' => 'Xx',
|
||||
'Selected' => 'Xx',
|
||||
'Clone' => 'Xx',
|
||||
'Delete' => 'Xx',
|
||||
'You have no privileges to update this table.' => 'Xx.',
|
||||
|
||||
'E-mail' => 'xx',
|
||||
'From' => 'xx',
|
||||
'Subject' => 'xx',
|
||||
'Attachments' => 'xx',
|
||||
'Send' => 'xx',
|
||||
'%d e-mail(s) have been sent.' => array('xx', 'xx'),
|
||||
'E-mail' => 'Xx',
|
||||
'From' => 'Xx',
|
||||
'Subject' => 'Xx',
|
||||
'Attachments' => 'Xx',
|
||||
'Send' => 'Xx',
|
||||
'%d e-mail(s) have been sent.' => array('%d xx.', '%d xx.'),
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => 'xx',
|
||||
'Date and time' => 'xx',
|
||||
'Strings' => 'xx',
|
||||
'Binary' => 'xx',
|
||||
'Lists' => 'xx',
|
||||
'Network' => 'xx',
|
||||
'Geometry' => 'xx',
|
||||
'Relations' => 'xx',
|
||||
'Numbers' => 'Xx',
|
||||
'Date and time' => 'Xx',
|
||||
'Strings' => 'Xx',
|
||||
'Binary' => 'Xx',
|
||||
'Lists' => 'Xx',
|
||||
'Network' => 'Xx',
|
||||
'Geometry' => 'Xx',
|
||||
'Relations' => 'Xx',
|
||||
|
||||
'Editor' => 'xx',
|
||||
'Editor' => 'Xx',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => 'xx',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => 'xx',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'xx',
|
||||
'HH:MM:SS' => 'Xx',
|
||||
'now' => 'xx',
|
||||
'yes' => 'xx',
|
||||
'no' => 'xx',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => 'xx',
|
||||
'Please use one of the extensions %s.' => 'xx',
|
||||
'File exists.' => 'Xx.',
|
||||
'Please use one of the extensions %s.' => 'Xx %s.',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => 'xx',
|
||||
'Create schema' => 'xx',
|
||||
'Schema has been dropped.' => 'xx',
|
||||
'Schema has been created.' => 'xx',
|
||||
'Schema has been altered.' => 'xx',
|
||||
'schema' => 'xx',
|
||||
'Schema' => 'xx',
|
||||
'Invalid schema.' => 'xx',
|
||||
'Alter schema' => 'Xx',
|
||||
'Create schema' => 'Xx',
|
||||
'Schema has been dropped.' => 'Xx.',
|
||||
'Schema has been created.' => 'Xx.',
|
||||
'Schema has been altered.' => 'Xx.',
|
||||
'Schema' => 'Xx',
|
||||
'Invalid schema.' => 'Xx.',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => 'xx',
|
||||
'Create sequence' => 'xx',
|
||||
'Sequence has been dropped.' => 'xx',
|
||||
'Sequence has been created.' => 'xx',
|
||||
'Sequence has been altered.' => 'xx',
|
||||
'Alter sequence' => 'xx',
|
||||
'Sequences' => 'Xx',
|
||||
'Create sequence' => 'Xx',
|
||||
'Sequence has been dropped.' => 'Xx.',
|
||||
'Sequence has been created.' => 'Xx.',
|
||||
'Sequence has been altered.' => 'Xx.',
|
||||
'Alter sequence' => 'Xx',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => 'xx',
|
||||
'Create type' => 'xx',
|
||||
'Type has been dropped.' => 'xx',
|
||||
'Type has been created.' => 'xx',
|
||||
'Alter type' => 'xx',
|
||||
'User types' => 'Xx',
|
||||
'Create type' => 'Xx',
|
||||
'Type has been dropped.' => 'Xx.',
|
||||
'Type has been created.' => 'Xx.',
|
||||
'Alter type' => 'Xx',
|
||||
);
|
||||
|
||||
@@ -1,271 +1,349 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => '登入',
|
||||
'Logout successful.' => '登出成功。',
|
||||
'Invalid credentials.' => '無效的憑證。',
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => '資料庫系統',
|
||||
'Server' => '伺服器',
|
||||
'Username' => '帳號',
|
||||
'Password' => '密碼',
|
||||
'Select database' => '選擇資料庫',
|
||||
'Invalid database.' => '無效的資料庫。',
|
||||
'Create new database' => '建立新資料庫',
|
||||
'Table has been altered.' => '資料表已更改。',
|
||||
'Table has been created.' => '資料表已更改。',
|
||||
'Alter table' => '更改資料表',
|
||||
'Create table' => '建立資料表表',
|
||||
'Table name' => '資料表名稱',
|
||||
'engine' => '引擎',
|
||||
'collation' => '校對',
|
||||
'Column name' => '列名',
|
||||
'Type' => '類型',
|
||||
'Length' => '長度',
|
||||
'Auto Increment' => '自動增加',
|
||||
'Options' => '選項',
|
||||
'Save' => '儲存',
|
||||
'Drop' => '丟棄',
|
||||
'Database has been dropped.' => '資料庫已刪除。',
|
||||
'Database has been created.' => '已建立資料庫。',
|
||||
'Database has been renamed.' => '已重新命名資料庫。',
|
||||
'Database has been altered.' => '已更改資料庫。',
|
||||
'Alter database' => '更改資料庫',
|
||||
'Create database' => '建立資料庫',
|
||||
'SQL command' => 'SQL命令',
|
||||
'Dump' => '導入/導出',
|
||||
'Permanent login' => '永久登入',
|
||||
'Login' => '登入',
|
||||
'Logout' => '登出',
|
||||
'database' => '資料庫',
|
||||
'Use' => '使用',
|
||||
'No tables.' => '沒有資料表。',
|
||||
'select' => '選擇',
|
||||
'Create new table' => '建立新資料表',
|
||||
'Item has been updated.' => '已更新項目。',
|
||||
'Item%s has been inserted.' => '已插入項目%s。',
|
||||
'Edit' => '編輯',
|
||||
'Insert' => '插入',
|
||||
'Save and insert next' => '儲存並插入下一個',
|
||||
'Delete' => '刪除',
|
||||
'Database' => '資料庫',
|
||||
'Routines' => '程序',
|
||||
'Indexes have been altered.' => '已更改索引。',
|
||||
'Indexes' => '索引',
|
||||
'Alter indexes' => '更改索引',
|
||||
'Add next' => '新增下一個',
|
||||
'Logged as: %s' => '登錄為: %s',
|
||||
'Logout successful.' => '成功登出。',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感謝使用Adminer,請考慮為我們<a href="https://www.adminer.org/en/donation/">捐款(英文網頁)</a>.',
|
||||
'Invalid credentials.' => '無效的憑證。',
|
||||
'There is a space in the input password which might be the cause.' => '您輸入的密碼中有一個空格,這可能是導致問題的原因。',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer預設不支援訪問沒有密碼的資料庫,<a href="https://www.adminer.org/en/password/"%s>詳情見這裡</a>.',
|
||||
'Database does not support password.' => '資料庫不支援密碼。',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => '登錄失敗次數過多,請 %d 分鐘後重試。',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => '主密碼已過期。<a href="https://www.adminer.org/en/extension/"%s>請擴展</a> %s 方法讓它永久化。',
|
||||
'Language' => '語言',
|
||||
'Select' => '選擇',
|
||||
'New item' => '新建項',
|
||||
'Search' => '搜尋',
|
||||
'Sort' => '排序',
|
||||
'descending' => '降冪',
|
||||
'Limit' => '限定',
|
||||
'No rows.' => '沒有行。',
|
||||
'Action' => '動作',
|
||||
'edit' => '編輯',
|
||||
'Page' => '頁',
|
||||
'Query executed OK, %d row(s) affected.' => '執行查詢OK,%d行受影響',
|
||||
'Error in query' => '查詢出錯',
|
||||
'Execute' => '執行',
|
||||
'Table' => '資料表',
|
||||
'Foreign keys' => '外鍵',
|
||||
'Triggers' => '觸發器',
|
||||
'View' => '檢視表',
|
||||
'Unable to select the table' => '無法選擇該資料表',
|
||||
'Invalid CSRF token. Send the form again.' => '無效的 CSRF token。請重新發送表單。',
|
||||
'Comment' => '註解',
|
||||
'Default values' => '預設值',
|
||||
'%d byte(s)' => '%d byte(s)',
|
||||
'No commands to execute.' => '沒有命令可執行。',
|
||||
'Unable to upload a file.' => '無法上傳檔案。',
|
||||
'File upload' => '檔案上傳',
|
||||
'File uploads are disabled.' => '檔案上傳被禁用。',
|
||||
'Routine has been called, %d row(s) affected.' => '程序已被執行,%d行被影響',
|
||||
'Call' => '呼叫',
|
||||
'No extension' => '沒有 擴充模組',
|
||||
'None of the supported PHP extensions (%s) are available.' => '沒有任何支援的PHP擴充模組(%s)。',
|
||||
'If you did not send this request from Adminer then close this page.' => '如果您並沒有從Adminer發送請求,請關閉此頁面。',
|
||||
'No extension' => '無擴充模組',
|
||||
'None of the supported PHP extensions (%s) are available.' => '沒有任何支援的 PHP 擴充模組(%s)。',
|
||||
'Connecting to privileged ports is not allowed.' => '不允許連接到特權埠。',
|
||||
'Disable %s or enable %s or %s extensions.' => '禁用 %s 或啟用 %s 或 %s 擴充模組。',
|
||||
'Session support must be enabled.' => 'Session 必須被啟用。',
|
||||
'Session expired, please login again.' => 'Session 已過期,請重新登入。',
|
||||
'Text length' => 'Text 長度',
|
||||
'Foreign key has been dropped.' => '已刪除外鍵。',
|
||||
'Foreign key has been altered.' => '已更改外鍵。',
|
||||
'Foreign key has been created.' => '已建立外鍵。',
|
||||
'Foreign key' => '外鍵',
|
||||
'Target table' => '目標資料表',
|
||||
'Change' => '更改',
|
||||
'Source' => '來源',
|
||||
'Target' => '目標',
|
||||
'Add column' => '新增資料列',
|
||||
'Alter' => '更改',
|
||||
'Add foreign key' => '新增外鍵',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => '索引類型',
|
||||
'Column (length)' => '列(長度)',
|
||||
'View has been dropped.' => '已丟棄檢視表。',
|
||||
'View has been altered.' => '已更改檢視表。',
|
||||
'View has been created.' => '已建立檢視表。',
|
||||
'Alter view' => '更改檢視表',
|
||||
'Create view' => '建立檢視表',
|
||||
'Name' => '名稱',
|
||||
'Process list' => '進程列表',
|
||||
'%d process(es) have been killed.' => '%d 個 Process(es) 被終止',
|
||||
'Kill' => '終止',
|
||||
'Parameter name' => '參數名稱',
|
||||
'Database schema' => '資料庫架構',
|
||||
'Create procedure' => '建立預存程序',
|
||||
'Create function' => '建立函數',
|
||||
'Routine has been dropped.' => '已丟棄程序。',
|
||||
'Routine has been altered.' => '已更改子程序。',
|
||||
'Routine has been created.' => '已建立子程序。',
|
||||
'Alter function' => '更改函數',
|
||||
'Alter procedure' => '更改過程',
|
||||
'Return type' => '返回類型',
|
||||
'Add trigger' => '建立觸發器',
|
||||
'Trigger has been dropped.' => '已丟棄觸發器。',
|
||||
'Trigger has been altered.' => '已更改觸發器。',
|
||||
'Trigger has been created.' => '已建立觸發器。',
|
||||
'Alter trigger' => '更改觸發器',
|
||||
'Create trigger' => '建立觸發器',
|
||||
'Time' => '時間',
|
||||
'Event' => '事件',
|
||||
'%s version: %s through PHP extension %s' => '%s版本:%s 透過PHP擴充模組 %s',
|
||||
'%d row(s)' => '%d行',
|
||||
'Remove' => '移除',
|
||||
'Are you sure?' => '你確定嗎?',
|
||||
'The action will be performed after successful login with the same credentials.' => '此操作將在成功使用相同的憑據登錄後執行。',
|
||||
'%s version: %s through PHP extension %s' => '%s 版本:%s 透過 PHP 擴充模組 %s',
|
||||
'Refresh' => '重新載入',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => '權限',
|
||||
'Create user' => '建立使用者',
|
||||
'User has been dropped.' => '已丟棄使用者。',
|
||||
'User has been altered.' => '已更改使用者。',
|
||||
'User has been dropped.' => '已刪除使用者。',
|
||||
'User has been altered.' => '已修改使用者。',
|
||||
'User has been created.' => '已建立使用者。',
|
||||
'Hashed' => 'Hashed',
|
||||
'Column' => '列',
|
||||
'Column' => '欄位',
|
||||
'Routine' => '程序',
|
||||
'Grant' => '授權',
|
||||
'Revoke' => '廢除',
|
||||
'Logged as: %s' => '登錄為:%s',
|
||||
|
||||
'Process list' => '處理程序列表',
|
||||
'%d process(es) have been killed.' => '%d 個 Process(es) 被終止',
|
||||
'Kill' => '終止',
|
||||
|
||||
'Variables' => '變數',
|
||||
'Status' => '狀態',
|
||||
|
||||
'SQL command' => 'SQL 命令',
|
||||
'%d query(s) executed OK.' => '已順利執行 %d 個查詢。',
|
||||
'Query executed OK, %d row(s) affected.' => '執行查詢 OK,%d 行受影響。',
|
||||
'No commands to execute.' => '沒有命令可執行。',
|
||||
'Error in query' => '查詢發生錯誤',
|
||||
'Unknown error.' => '未知錯誤。',
|
||||
'Warnings' => '警告',
|
||||
'ATTACH queries are not supported.' => '不支援ATTACH查詢。',
|
||||
'Execute' => '執行',
|
||||
'Stop on error' => '出錯時停止',
|
||||
'Show only errors' => '僅顯示錯誤訊息',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f 秒',
|
||||
'History' => '紀錄',
|
||||
'Clear' => '清除',
|
||||
'Edit all' => '編輯全部',
|
||||
|
||||
'File upload' => '檔案上傳',
|
||||
'From server' => '從伺服器',
|
||||
'Webserver file %s' => '網頁伺服器檔案 %s',
|
||||
'Run file' => '執行檔案',
|
||||
'File does not exist.' => '檔案不存在',
|
||||
'File uploads are disabled.' => '檔案上傳已經被停用。',
|
||||
'Unable to upload a file.' => '無法上傳檔案。',
|
||||
'Maximum allowed file size is %sB.' => '允許的檔案上限大小為 %sB',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 資料太大。減少資料或者增加 %s 的設定值。',
|
||||
'Move up' => '上移',
|
||||
'Move down' => '下移',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => '您可以通過FTP上傳大型SQL檔並從伺服器導入。',
|
||||
'You are offline.' => '您離線了。',
|
||||
|
||||
'Export' => '匯出',
|
||||
'Tables' => '資料表',
|
||||
'Data' => '資料',
|
||||
'Output' => '輸出',
|
||||
'open' => '打開',
|
||||
'save' => '儲存',
|
||||
'Saving' => '保存中',
|
||||
'Format' => '格式',
|
||||
'Functions' => '函數',
|
||||
'Aggregation' => '集合',
|
||||
'Event has been dropped.' => '已丟棄事件。',
|
||||
'Event has been altered.' => '已更改事件。',
|
||||
'Event has been created.' => '已建立事件。',
|
||||
'Alter event' => '更改事件',
|
||||
'Create event' => '建立事件',
|
||||
'Start' => '開始',
|
||||
'End' => '結束',
|
||||
'Every' => '每',
|
||||
'Status' => '狀態',
|
||||
'On completion preserve' => '在完成後保存',
|
||||
'Events' => '事件',
|
||||
'Schedule' => '調度',
|
||||
'At given time' => '在指定時間',
|
||||
'Tables have been truncated.' => '已清空資料表。',
|
||||
'Tables have been moved.' => '已轉移資料表。',
|
||||
'Tables and views' => '資料表和檢視表',
|
||||
'Data' => '資料',
|
||||
|
||||
'Database' => '資料庫',
|
||||
'database' => '資料庫',
|
||||
'DB' => '資料庫',
|
||||
'Use' => '使用',
|
||||
'Select database' => '選擇資料庫',
|
||||
'Invalid database.' => '無效的資料庫。',
|
||||
'Database has been dropped.' => '資料庫已刪除。',
|
||||
'Databases have been dropped.' => '資料庫已刪除。',
|
||||
'Database has been created.' => '已建立資料庫。',
|
||||
'Database has been renamed.' => '已重新命名資料庫。',
|
||||
'Database has been altered.' => '已修改資料庫。',
|
||||
'Alter database' => '修改資料庫',
|
||||
'Create database' => '建立資料庫',
|
||||
'Database schema' => '資料庫結構',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => '永久連結',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => '引擎',
|
||||
'Collation' => '校對',
|
||||
'Data Length' => '資料長度',
|
||||
'Index Length' => '索引長度',
|
||||
'Data Free' => '資料空閒',
|
||||
'Rows' => '行數',
|
||||
',' => ',',
|
||||
'%d in total' => '總共 %d 個',
|
||||
'Analyze' => '分析',
|
||||
'Optimize' => '優化',
|
||||
'Optimize' => '最佳化',
|
||||
'Vacuum' => '整理(Vacuum)',
|
||||
'Check' => '檢查',
|
||||
'Repair' => '修復',
|
||||
'Truncate' => '清空',
|
||||
'Tables have been truncated.' => '已清空資料表。',
|
||||
'Move to other database' => '轉移到其它資料庫',
|
||||
'Move' => '轉移',
|
||||
'Save and continue edit' => '保存並繼續編輯',
|
||||
'original' => '原始',
|
||||
'%d item(s) have been affected.' => '%d個項目受到影響。',
|
||||
'whole result' => '所有結果',
|
||||
'Tables have been dropped.' => '已丟棄表。',
|
||||
'Clone' => '複製',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => '超過最多允許的字段數量。請增加%s和%s 。',
|
||||
'Tables have been moved.' => '已轉移資料表。',
|
||||
'Copy' => '複製',
|
||||
'Tables have been copied.' => '資料表已經複製',
|
||||
'overwrite' => '覆蓋',
|
||||
|
||||
'Routines' => '程序',
|
||||
'Routine has been called, %d row(s) affected.' => '程序已被執行,%d 行被影響',
|
||||
'Call' => '呼叫',
|
||||
'Parameter name' => '參數名稱',
|
||||
'Create procedure' => '建立預存程序',
|
||||
'Create function' => '建立函式',
|
||||
'Routine has been dropped.' => '已刪除程序。',
|
||||
'Routine has been altered.' => '已修改子程序。',
|
||||
'Routine has been created.' => '已建立子程序。',
|
||||
'Alter function' => '修改函式',
|
||||
'Alter procedure' => '修改預存程序',
|
||||
'Return type' => '回傳類型',
|
||||
|
||||
'Events' => '事件',
|
||||
'Event has been dropped.' => '已刪除事件。',
|
||||
'Event has been altered.' => '已修改事件。',
|
||||
'Event has been created.' => '已建立事件。',
|
||||
'Alter event' => '修改事件',
|
||||
'Create event' => '建立事件',
|
||||
'At given time' => '在指定時間',
|
||||
'Every' => '每',
|
||||
'Schedule' => '排程',
|
||||
'Start' => '開始',
|
||||
'End' => '結束',
|
||||
'On completion preserve' => '在完成後儲存',
|
||||
|
||||
'Tables' => '資料表',
|
||||
'Tables and views' => '資料表和檢視表',
|
||||
'Table' => '資料表',
|
||||
'No tables.' => '沒有資料表。',
|
||||
'Alter table' => '修改資料表',
|
||||
'Create table' => '建立資料表',
|
||||
'Table has been dropped.' => '已經刪除資料表。',
|
||||
'Tables have been dropped.' => '已經將資料表刪除。',
|
||||
'Tables have been optimized.' => '已優化資料表。',
|
||||
'Table has been altered.' => '資料表已修改。',
|
||||
'Table has been created.' => '資料表已建立。',
|
||||
'Table name' => '資料表名稱',
|
||||
'Show structure' => '顯示結構',
|
||||
'engine' => '引擎',
|
||||
'collation' => '校對',
|
||||
'Column name' => '欄位名稱',
|
||||
'Type' => '類型',
|
||||
'Length' => '長度',
|
||||
'Auto Increment' => '自動遞增',
|
||||
'Options' => '選項',
|
||||
'Comment' => '註解',
|
||||
'Default value' => '預設值',
|
||||
'Default values' => '預設值',
|
||||
'Drop' => '刪除',
|
||||
'Drop %s?' => '刪除 %s?',
|
||||
'Are you sure?' => '你確定嗎?',
|
||||
'Size' => '大小',
|
||||
'Compute' => '計算',
|
||||
'Move up' => '上移',
|
||||
'Move down' => '下移',
|
||||
'Remove' => '移除',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '超過允許的字段數量的最大值。請增加 %s。',
|
||||
|
||||
'Partition by' => '分區類型',
|
||||
'Partitions' => '分區',
|
||||
'Partition name' => '分區名',
|
||||
'Partition name' => '分區名稱',
|
||||
'Values' => '值',
|
||||
'%d row(s) have been imported.' => '%d行已導入。',
|
||||
|
||||
'View' => '檢視表',
|
||||
'Materialized view' => '物化視圖',
|
||||
'View has been dropped.' => '已刪除檢視表。',
|
||||
'View has been altered.' => '已修改檢視表。',
|
||||
'View has been created.' => '已建立檢視表。',
|
||||
'Alter view' => '修改檢視表',
|
||||
'Create view' => '建立檢視表',
|
||||
|
||||
'Indexes' => '索引',
|
||||
'Indexes have been altered.' => '已修改索引。',
|
||||
'Alter indexes' => '修改索引',
|
||||
'Add next' => '新增下一筆',
|
||||
'Index Type' => '索引類型',
|
||||
'Column (length)' => '欄位(長度)',
|
||||
|
||||
'Foreign keys' => '外來鍵',
|
||||
'Foreign key' => '外來鍵',
|
||||
'Foreign key has been dropped.' => '已刪除外來鍵。',
|
||||
'Foreign key has been altered.' => '已修改外來鍵。',
|
||||
'Foreign key has been created.' => '已建立外來鍵。',
|
||||
'Target table' => '目標資料表',
|
||||
'Change' => '變更',
|
||||
'Source' => '來源',
|
||||
'Target' => '目標',
|
||||
'Add column' => '新增欄位',
|
||||
'Alter' => '修改',
|
||||
'Add foreign key' => '新增外來鍵',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '來源列和目標列必須具有相同的資料類型,在目標列上必須有一個索引並且引用的資料必須存在。',
|
||||
|
||||
'Triggers' => '觸發器',
|
||||
'Add trigger' => '建立觸發器',
|
||||
'Trigger has been dropped.' => '已刪除觸發器。',
|
||||
'Trigger has been altered.' => '已修改觸發器。',
|
||||
'Trigger has been created.' => '已建立觸發器。',
|
||||
'Alter trigger' => '修改觸發器',
|
||||
'Create trigger' => '建立觸發器',
|
||||
'Time' => '時間',
|
||||
'Event' => '事件',
|
||||
'Name' => '名稱',
|
||||
|
||||
'select' => '選擇',
|
||||
'Select' => '選擇',
|
||||
'Select data' => '選擇資料',
|
||||
'Functions' => '函式',
|
||||
'Aggregation' => '集合',
|
||||
'Search' => '搜尋',
|
||||
'anywhere' => '任意位置',
|
||||
'Search data in tables' => '在資料庫搜尋',
|
||||
'Sort' => '排序',
|
||||
'descending' => '降冪 (遞減)',
|
||||
'Limit' => '限定',
|
||||
'Limit rows' => '限制行數',
|
||||
'Text length' => 'Text 長度',
|
||||
'Action' => '動作',
|
||||
'Full table scan' => '全資料表掃描',
|
||||
'Unable to select the table' => '無法選擇該資料表',
|
||||
'No rows.' => '沒有資料行。',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => '%d 行',
|
||||
'Page' => '頁',
|
||||
'last' => '最後一頁',
|
||||
'Load more data' => '載入更多資料',
|
||||
'Loading' => '載入中',
|
||||
'Whole result' => '所有結果',
|
||||
'%d byte(s)' => '%d byte(s)',
|
||||
|
||||
'Import' => '匯入',
|
||||
'Stop on error' => '出錯時停止',
|
||||
'%.3f s' => '%.3f秒',
|
||||
'$1-$3-$5' => '$1.$3.$5',
|
||||
'[yyyy]-mm-dd' => '[yyyy].mm.dd',
|
||||
'History' => '歷史',
|
||||
'Variables' => '變數',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '源列和目標列必須具有相同的數據類型,在目標列上必須有一個索引並且引用的數據必須存在。',
|
||||
'Relations' => '關聯',
|
||||
'Run file' => '執行檔案',
|
||||
'Clear' => '清除',
|
||||
'Maximum allowed file size is %sB.' => '允許的檔案上限大小為%sB',
|
||||
'Numbers' => '數字',
|
||||
'Date and time' => '日期時間',
|
||||
'Strings' => '字符串',
|
||||
'Binary' => '二進制',
|
||||
'Lists' => '列表',
|
||||
'Editor' => '編輯器',
|
||||
'%d row(s) have been imported.' => '已匯入 %d 行。',
|
||||
'File must be in UTF-8 encoding.' => '檔必須使用UTF-8編碼。',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => '修改',
|
||||
'Ctrl+click on a value to modify it.' => '按住Ctrl並按一下某個值進行修改。',
|
||||
'Use edit link to modify this value.' => '使用編輯連結來修改。',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => '已新增項目 %s。',
|
||||
'Item has been deleted.' => '該項目已被刪除',
|
||||
'Item has been updated.' => '已更新項目。',
|
||||
'%d item(s) have been affected.' => '%d 個項目受到影響。',
|
||||
'New item' => '新增項目',
|
||||
'original' => '原始',
|
||||
// label for value '' in enum data type
|
||||
'empty' => '空值',
|
||||
'edit' => '編輯',
|
||||
'Edit' => '編輯',
|
||||
'Insert' => '新增',
|
||||
'Save' => '儲存',
|
||||
'Save and continue edit' => '儲存並繼續編輯',
|
||||
'Save and insert next' => '儲存並新增下一筆',
|
||||
'Selected' => '已選中',
|
||||
'Clone' => '複製',
|
||||
'Delete' => '刪除',
|
||||
'You have no privileges to update this table.' => '您沒有許可權更新這個資料表。',
|
||||
|
||||
'E-mail' => '電子郵件',
|
||||
'From' => '來自',
|
||||
'Subject' => '主題',
|
||||
'Send' => '發送',
|
||||
'%d e-mail(s) have been sent.' => '已發送 %d 封郵件。',
|
||||
'Webserver file %s' => '網頁伺服器檔案 %s',
|
||||
'File does not exist.' => '檔案不存在',
|
||||
'Item has been deleted.' => '該項目已被刪除',
|
||||
'%d in total' => '總共 %d 個',
|
||||
'Permanent login' => '永久登入',
|
||||
'Table has been dropped.' => '已經刪除資料表。',
|
||||
'Databases have been dropped.' => '資料庫已刪除。',
|
||||
'Search data in tables' => '在資料庫搜尋',
|
||||
'schema' => '資料表結構',
|
||||
'Schema' => '資料表結構',
|
||||
'Alter schema' => '更改資料表結構',
|
||||
'Subject' => '主旨',
|
||||
'Attachments' => '附件',
|
||||
'Send' => '寄出',
|
||||
'%d e-mail(s) have been sent.' => '已寄出 %d 封郵件。',
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => '數字',
|
||||
'Date and time' => '日期時間',
|
||||
'Strings' => '字串',
|
||||
'Binary' => '二進位',
|
||||
'Lists' => '列表',
|
||||
'Network' => '網路',
|
||||
'Geometry' => '幾何',
|
||||
'Relations' => '關聯',
|
||||
|
||||
'Editor' => '編輯器',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1.$3.$5',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => '[yyyy].mm.dd',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => '現在',
|
||||
'yes' => '是',
|
||||
'no' => '否',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => '檔案已存在。',
|
||||
'Please use one of the extensions %s.' => '請使用下列其中一個擴充模組 %s。',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => '修改資料表結構',
|
||||
'Create schema' => '建立資料表結構',
|
||||
'Schema has been dropped.' => '已刪除資料表結構。',
|
||||
'Schema has been created.' => '已建立資料表結構。',
|
||||
'Schema has been altered.' => '已更改資料表結構。',
|
||||
'Sequences' => 'Sequences',
|
||||
'Create sequence' => '建立 sequence',
|
||||
'Alter sequence' => '更改 sequence',
|
||||
'Sequence has been dropped.' => '已刪除 sequence。',
|
||||
'Sequence has been created.' => '已建立 sequence。',
|
||||
'Sequence has been altered.' => '已更改 sequence。',
|
||||
'Schema has been altered.' => '已修改資料表結構。',
|
||||
'Schema' => '資料表結構',
|
||||
'Invalid schema.' => '無效的資料表結構。',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => '序列',
|
||||
'Create sequence' => '建立序列',
|
||||
'Sequence has been dropped.' => '已刪除序列。',
|
||||
'Sequence has been created.' => '已建立序列。',
|
||||
'Sequence has been altered.' => '已修改序列。',
|
||||
'Alter sequence' => '修改序列',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => '使用者類型',
|
||||
'Create type' => '建立類型',
|
||||
'Alter type' => '更改類型',
|
||||
'Type has been dropped.' => '已刪除類型。',
|
||||
'Type has been created.' => '已建立類型。',
|
||||
'Use edit link to modify this value.' => '使用編輯連結來修改。',
|
||||
'last' => '最後一頁',
|
||||
'From server' => '從伺服器',
|
||||
'System' => '資料庫系統',
|
||||
'Select data' => '選擇資料',
|
||||
'Show structure' => '秀出結構',
|
||||
'empty' => '空值',
|
||||
'Network' => '網路',
|
||||
'Geometry' => '幾何',
|
||||
'File exists.' => '檔案已存在。',
|
||||
'Attachments' => '附件',
|
||||
'%d query(s) executed OK.' => '已順利執行 %d 個查詢。',
|
||||
'Show only errors' => '僅顯示錯誤訊息',
|
||||
'Last page' => '最後一頁',
|
||||
'Refresh' => '重新載入',
|
||||
'Invalid schema.' => '無效的資料表結構。',
|
||||
'Please use one of the extensions %s.' => '請使用下列其中一個 extension %s。',
|
||||
'now' => '現在',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => '表格已經複製',
|
||||
'Copy' => '複製',
|
||||
'Permanent link' => '永久鏈接',
|
||||
'Edit all' => '編輯全部',
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'Alter type' => '修改類型',
|
||||
);
|
||||
|
||||
@@ -1,271 +1,349 @@
|
||||
<?php
|
||||
$translations = array(
|
||||
'Login' => '登录',
|
||||
'Logout successful.' => '注销成功。',
|
||||
'Invalid credentials.' => '无效凭据。',
|
||||
// label for database system selection (MySQL, SQLite, ...)
|
||||
'System' => '系统',
|
||||
'Server' => '服务器',
|
||||
'Username' => '用户名',
|
||||
'Password' => '密码',
|
||||
'Select database' => '选择数据库',
|
||||
'Invalid database.' => '无效数据库。',
|
||||
'Create new database' => '创建新数据库',
|
||||
'Table has been dropped.' => '已丢弃表。',
|
||||
'Table has been altered.' => '已更改表。',
|
||||
'Table has been created.' => '已创建表。',
|
||||
'Alter table' => '更改表',
|
||||
'Create table' => '创建表',
|
||||
'Table name' => '表名',
|
||||
'engine' => '引擎',
|
||||
'collation' => '校对',
|
||||
'Column name' => '列名',
|
||||
'Type' => '类型',
|
||||
'Length' => '长度',
|
||||
'Auto Increment' => '自动增量',
|
||||
'Options' => '选项',
|
||||
'Save' => '保存',
|
||||
'Drop' => '丢弃',
|
||||
'Database has been dropped.' => '已丢弃数据库。',
|
||||
'Database has been created.' => '已创建数据库。',
|
||||
'Database has been renamed.' => '已重命名数据库。',
|
||||
'Database has been altered.' => '已更改数据库。',
|
||||
'Alter database' => '更改数据库',
|
||||
'Create database' => '创建数据库',
|
||||
'SQL command' => 'SQL命令',
|
||||
'Dump' => '导出',
|
||||
'Logout' => '注销',
|
||||
'database' => '数据库',
|
||||
'Use' => '使用',
|
||||
'No tables.' => '没有表。',
|
||||
'select' => '选择',
|
||||
'Create new table' => '创建新表',
|
||||
'Item has been deleted.' => '已删除项目。',
|
||||
'Item has been updated.' => '已更新项目。',
|
||||
'Item%s has been inserted.' => '已插入项目%s。',
|
||||
'Edit' => '编辑',
|
||||
'Insert' => '插入',
|
||||
'Save and insert next' => '保存并插入下一个',
|
||||
'Delete' => '删除',
|
||||
'Database' => '数据库',
|
||||
'Routines' => '子程序',
|
||||
'Indexes have been altered.' => '已更改索引。',
|
||||
'Indexes' => '索引',
|
||||
'Alter indexes' => '更改索引',
|
||||
'Add next' => '添加下一个',
|
||||
'Permanent login' => '保持登录',
|
||||
'Login' => '登录',
|
||||
'Logout' => '登出',
|
||||
'Logged as: %s' => '登录用户:%s',
|
||||
'Logout successful.' => '成功登出。',
|
||||
'Thanks for using Adminer, consider <a href="https://www.adminer.org/en/donation/">donating</a>.' => '感谢使用Adminer,请考虑为我们<a href="https://www.adminer.org/en/donation/">捐款(英文页面)</a>.',
|
||||
'Invalid credentials.' => '无效凭据。',
|
||||
'There is a space in the input password which might be the cause.' => '您输入的密码中有一个空格,这可能是导致问题的原因。',
|
||||
'Adminer does not support accessing a database without a password, <a href="https://www.adminer.org/en/password/"%s>more information</a>.' => 'Adminer默认不支持访问没有密码的数据库,<a href="https://www.adminer.org/en/password/"%s>详情见这里</a>.',
|
||||
'Database does not support password.' => '数据库不支持密码。',
|
||||
'Too many unsuccessful logins, try again in %d minute(s).' => '登录失败次数过多,请 %d 分钟后重试。',
|
||||
'Master password expired. <a href="https://www.adminer.org/en/extension/"%s>Implement</a> %s method to make it permanent.' => '主密码已过期。<a href="https://www.adminer.org/en/extension/"%s>请扩展</a> %s 方法让它永久化。',
|
||||
'Language' => '语言',
|
||||
'Select' => '选择',
|
||||
'New item' => '新建项',
|
||||
'Search' => '搜索',
|
||||
'Sort' => '排序',
|
||||
'descending' => '降序',
|
||||
'Limit' => '限定',
|
||||
'No rows.' => '没有行。',
|
||||
'Action' => '动作',
|
||||
'edit' => '编辑',
|
||||
'Page' => '页面',
|
||||
'Query executed OK, %d row(s) affected.' => '执行查询OK,%d 行受影响。',
|
||||
'Error in query' => '查询出错',
|
||||
'Execute' => '执行',
|
||||
'Table' => '表',
|
||||
'Foreign keys' => '外键',
|
||||
'Triggers' => '触发器',
|
||||
'View' => '视图',
|
||||
'Unable to select the table' => '不能选择该表',
|
||||
'Invalid CSRF token. Send the form again.' => '无效 CSRF 令牌。重新发送表单。',
|
||||
'Comment' => '注释',
|
||||
'Default values' => '默认值',
|
||||
'%d byte(s)' => '%d 字节',
|
||||
'No commands to execute.' => '没有命令执行。',
|
||||
'Unable to upload a file.' => '不能上传文件。',
|
||||
'File upload' => '文件上传',
|
||||
'File uploads are disabled.' => '文件上传被禁用。',
|
||||
'Routine has been called, %d row(s) affected.' => '子程序被调用,%d 行被影响。',
|
||||
'Call' => '调用',
|
||||
'Invalid CSRF token. Send the form again.' => '无效 CSRF 令牌。请重新发送表单。',
|
||||
'If you did not send this request from Adminer then close this page.' => '如果您并没有从Adminer发送请求,请关闭此页面。',
|
||||
'No extension' => '没有扩展',
|
||||
'None of the supported PHP extensions (%s) are available.' => '没有支持的 PHP 扩展可用(%s)。',
|
||||
'Session support must be enabled.' => '会话必须被启用。',
|
||||
'Connecting to privileged ports is not allowed.' => '不允许连接到特权端口。',
|
||||
'Disable %s or enable %s or %s extensions.' => '禁用 %s 或启用 %s 或 %s 扩展。',
|
||||
'Session support must be enabled.' => '必须启用会话支持。',
|
||||
'Session expired, please login again.' => '会话已过期,请重新登录。',
|
||||
'Text length' => '文本长度',
|
||||
'Foreign key has been dropped.' => '已删除外键。',
|
||||
'Foreign key has been altered.' => '已更改外键。',
|
||||
'Foreign key has been created.' => '已创建外键。',
|
||||
'Foreign key' => '外键',
|
||||
'Target table' => '目标表',
|
||||
'Change' => '更改',
|
||||
'Source' => '源',
|
||||
'Target' => '目标',
|
||||
'Add column' => '增加列',
|
||||
'Alter' => '更改',
|
||||
'Add foreign key' => '添加外键',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Index Type' => '索引类型',
|
||||
'Column (length)' => '列(长度)',
|
||||
'View has been dropped.' => '已丢弃视图。',
|
||||
'View has been altered.' => '已更改视图。',
|
||||
'View has been created.' => '已创建视图。',
|
||||
'Alter view' => '更改视图',
|
||||
'Create view' => '创建视图',
|
||||
'Name' => '名称',
|
||||
'Process list' => '进程列表',
|
||||
'%d process(es) have been killed.' => '%d 个进程被终止',
|
||||
'Kill' => '终止',
|
||||
'Parameter name' => '参数名',
|
||||
'Database schema' => '数据库概要',
|
||||
'Create procedure' => '创建过程',
|
||||
'Create function' => '创建函数',
|
||||
'Routine has been dropped.' => '已丢弃子程序。',
|
||||
'Routine has been altered.' => '已更改子程序。',
|
||||
'Routine has been created.' => '已创建子程序。',
|
||||
'Alter function' => '更改函数',
|
||||
'Alter procedure' => '更改过程',
|
||||
'Return type' => '返回类型',
|
||||
'Add trigger' => '创建触发器',
|
||||
'Trigger has been dropped.' => '已丢弃触发器。',
|
||||
'Trigger has been altered.' => '已更改触发器。',
|
||||
'Trigger has been created.' => '已创建触发器。',
|
||||
'Alter trigger' => '更改触发器',
|
||||
'Create trigger' => '创建触发器',
|
||||
'Time' => '时间',
|
||||
'Event' => '事件',
|
||||
'%s version: %s through PHP extension %s' => '%s 版本:%s 通过 PHP 扩展 %s',
|
||||
'%d row(s)' => '%d 行',
|
||||
'Remove' => '移除',
|
||||
'Are you sure?' => '你确定吗?',
|
||||
'The action will be performed after successful login with the same credentials.' => '此操作将在成功使用相同的凭据登录后执行。',
|
||||
'%s version: %s through PHP extension %s' => '%s 版本:%s, 使用PHP扩展 %s',
|
||||
'Refresh' => '刷新',
|
||||
|
||||
// text direction - 'ltr' or 'rtl'
|
||||
'ltr' => 'ltr',
|
||||
|
||||
'Privileges' => '权限',
|
||||
'Create user' => '创建用户',
|
||||
'User has been dropped.' => '已丢弃用户。',
|
||||
'User has been altered.' => '已更改用户。',
|
||||
'User has been dropped.' => '已删除用户。',
|
||||
'User has been altered.' => '已修改用户。',
|
||||
'User has been created.' => '已创建用户。',
|
||||
'Hashed' => 'Hashed',
|
||||
'Column' => '列',
|
||||
'Routine' => '子程序',
|
||||
'Grant' => '授权',
|
||||
'Revoke' => '废除',
|
||||
'Logged as: %s' => '登录为:%s',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => '太大的 POST 数据。减少数据或者增加 %s 配置命令。',
|
||||
'Move up' => '上移',
|
||||
'Move down' => '下移',
|
||||
|
||||
'Process list' => '进程列表',
|
||||
'%d process(es) have been killed.' => '%d 个进程被终止',
|
||||
'Kill' => '终止',
|
||||
|
||||
'Variables' => '变量',
|
||||
'Status' => '状态',
|
||||
|
||||
'SQL command' => 'SQL命令',
|
||||
'%d query(s) executed OK.' => '%d 条查询已成功执行。',
|
||||
'Query executed OK, %d row(s) affected.' => '查询执行完毕,%d 行受影响。',
|
||||
'No commands to execute.' => '没有命令被执行。',
|
||||
'Error in query' => '查询出错',
|
||||
'Unknown error.' => '未知错误。',
|
||||
'Warnings' => '警告',
|
||||
'ATTACH queries are not supported.' => '不支持ATTACH查询。',
|
||||
'Execute' => '执行',
|
||||
'Stop on error' => '出错时停止',
|
||||
'Show only errors' => '仅显示错误',
|
||||
// sprintf() format for time of the command
|
||||
'%.3f s' => '%.3f 秒',
|
||||
'History' => '历史',
|
||||
'Clear' => '清除',
|
||||
'Edit all' => '编辑全部',
|
||||
|
||||
'File upload' => '文件上传',
|
||||
'From server' => '来自服务器',
|
||||
'Webserver file %s' => 'Web服务器文件 %s',
|
||||
'Run file' => '运行文件',
|
||||
'File does not exist.' => '文件不存在。',
|
||||
'File uploads are disabled.' => '文件上传被禁用。',
|
||||
'Unable to upload a file.' => '不能上传文件。',
|
||||
'Maximum allowed file size is %sB.' => '最多允许的文件大小为 %sB。',
|
||||
'Too big POST data. Reduce the data or increase the %s configuration directive.' => 'POST 数据太大。请减少数据或者增加 %s 配置命令。',
|
||||
'You can upload a big SQL file via FTP and import it from server.' => '您可以通过FTP上传大型SQL文件并从服务器导入。',
|
||||
'You are offline.' => '您离线了。',
|
||||
|
||||
'Export' => '导出',
|
||||
'Tables' => '表',
|
||||
'Data' => '数据',
|
||||
'Output' => '输出',
|
||||
'open' => '打开',
|
||||
'save' => '保存',
|
||||
'Saving' => '保存中',
|
||||
'Format' => '格式',
|
||||
'Functions' => '函数',
|
||||
'Aggregation' => '集合',
|
||||
'Event has been dropped.' => '已丢弃事件。',
|
||||
'Event has been altered.' => '已更改事件。',
|
||||
'Event has been created.' => '已创建事件。',
|
||||
'Alter event' => '更改事件',
|
||||
'Create event' => '创建事件',
|
||||
'Start' => '开始',
|
||||
'End' => '结束',
|
||||
'Every' => '每',
|
||||
'Status' => '状态',
|
||||
'On completion preserve' => '完成后保存',
|
||||
'Events' => '事件',
|
||||
'Schedule' => '调度',
|
||||
'At given time' => '在指定时间',
|
||||
'Tables have been truncated.' => '已清空表。',
|
||||
'Tables have been moved.' => '已转移表。',
|
||||
'Tables and views' => '表和视图',
|
||||
'Data' => '数据',
|
||||
|
||||
'Database' => '数据库',
|
||||
'database' => '数据库',
|
||||
'DB' => '数据库',
|
||||
'Use' => '使用',
|
||||
'Select database' => '选择数据库',
|
||||
'Invalid database.' => '无效数据库。',
|
||||
'Database has been dropped.' => '已删除数据库。',
|
||||
'Databases have been dropped.' => '已删除数据库。',
|
||||
'Database has been created.' => '已创建数据库。',
|
||||
'Database has been renamed.' => '已重命名数据库。',
|
||||
'Database has been altered.' => '已修改数据库。',
|
||||
'Alter database' => '修改数据库',
|
||||
'Create database' => '创建数据库',
|
||||
'Database schema' => '数据库概要',
|
||||
|
||||
// link to current database schema layout
|
||||
'Permanent link' => '固定链接',
|
||||
|
||||
// thousands separator - must contain single byte
|
||||
',' => ',',
|
||||
'0123456789' => '0123456789',
|
||||
'Engine' => '引擎',
|
||||
'Collation' => '校对',
|
||||
'Data Length' => '数据长度',
|
||||
'Index Length' => '索引长度',
|
||||
'Data Free' => '数据空闲',
|
||||
'Rows' => '行数',
|
||||
',' => ',',
|
||||
'%d in total' => '共计 %d',
|
||||
'Analyze' => '分析',
|
||||
'Optimize' => '优化',
|
||||
'Vacuum' => '整理(Vacuum)',
|
||||
'Check' => '检查',
|
||||
'Repair' => '修复',
|
||||
'Truncate' => '清空',
|
||||
'Tables have been truncated.' => '已清空表。',
|
||||
'Move to other database' => '转移到其它数据库',
|
||||
'Move' => '转移',
|
||||
'Save and continue edit' => '保存并继续编辑',
|
||||
'original' => '原始',
|
||||
'%d item(s) have been affected.' => '%d 个项目受到影响。',
|
||||
'whole result' => '所有结果',
|
||||
'Tables have been dropped.' => '已丢弃表。',
|
||||
'Clone' => '克隆',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s and %s.' => '超过最多允许的字段数量。请增加 %s 和 %s 。',
|
||||
'Tables have been moved.' => '已转移表。',
|
||||
'Copy' => '复制',
|
||||
'Tables have been copied.' => '已复制表。',
|
||||
'overwrite' => '覆盖',
|
||||
|
||||
'Routines' => '子程序',
|
||||
'Routine has been called, %d row(s) affected.' => '子程序被调用,%d 行被影响。',
|
||||
'Call' => '调用',
|
||||
'Parameter name' => '参数名',
|
||||
'Create procedure' => '创建过程',
|
||||
'Create function' => '创建函数',
|
||||
'Routine has been dropped.' => '已删除子程序。',
|
||||
'Routine has been altered.' => '已修改子程序。',
|
||||
'Routine has been created.' => '已创建子程序。',
|
||||
'Alter function' => '修改函数',
|
||||
'Alter procedure' => '修改过程',
|
||||
'Return type' => '返回类型',
|
||||
|
||||
'Events' => '事件',
|
||||
'Event has been dropped.' => '已删除事件。',
|
||||
'Event has been altered.' => '已修改事件。',
|
||||
'Event has been created.' => '已创建事件。',
|
||||
'Alter event' => '修改事件',
|
||||
'Create event' => '创建事件',
|
||||
'At given time' => '在指定时间',
|
||||
'Every' => '每',
|
||||
'Schedule' => '调度',
|
||||
'Start' => '开始',
|
||||
'End' => '结束',
|
||||
'On completion preserve' => '完成后仍保留',
|
||||
|
||||
'Tables' => '表',
|
||||
'Tables and views' => '表和视图',
|
||||
'Table' => '表',
|
||||
'No tables.' => '没有表。',
|
||||
'Alter table' => '修改表',
|
||||
'Create table' => '创建表',
|
||||
'Table has been dropped.' => '已删除表。',
|
||||
'Tables have been dropped.' => '已删除表。',
|
||||
'Tables have been optimized.' => '已优化表。',
|
||||
'Table has been altered.' => '已修改表。',
|
||||
'Table has been created.' => '已创建表。',
|
||||
'Table name' => '表名',
|
||||
'Show structure' => '显示结构',
|
||||
'engine' => '引擎',
|
||||
'collation' => '校对',
|
||||
'Column name' => '字段名',
|
||||
'Type' => '类型',
|
||||
'Length' => '长度',
|
||||
'Auto Increment' => '自动增量',
|
||||
'Options' => '选项',
|
||||
'Comment' => '注释',
|
||||
'Default value' => '默认值',
|
||||
'Default values' => '默认值',
|
||||
'Drop' => '删除',
|
||||
'Drop %s?' => '删除 %s?',
|
||||
'Are you sure?' => '您确定吗?',
|
||||
'Size' => '大小',
|
||||
'Compute' => '计算',
|
||||
'Move up' => '上移',
|
||||
'Move down' => '下移',
|
||||
'Remove' => '移除',
|
||||
'Maximum number of allowed fields exceeded. Please increase %s.' => '超过最多允许的字段数量。请增加 %s。',
|
||||
|
||||
'Partition by' => '分区类型',
|
||||
'Partitions' => '分区',
|
||||
'Partition name' => '分区名',
|
||||
'Values' => '值',
|
||||
'%d row(s) have been imported.' => '%d 行已导入。',
|
||||
'anywhere' => '任意位置',
|
||||
'Import' => '导入',
|
||||
'Stop on error' => '出错时停止',
|
||||
'%.3f s' => '%.3f 秒',
|
||||
'$1-$3-$5' => '$1.$3.$5',
|
||||
'[yyyy]-mm-dd' => '[yyyy].mm.dd',
|
||||
'History' => '历史',
|
||||
'Variables' => '变量',
|
||||
|
||||
'View' => '视图',
|
||||
'Materialized view' => '物化视图',
|
||||
'View has been dropped.' => '已删除视图。',
|
||||
'View has been altered.' => '已修改视图。',
|
||||
'View has been created.' => '已创建视图。',
|
||||
'Alter view' => '修改视图',
|
||||
'Create view' => '创建视图',
|
||||
|
||||
'Indexes' => '索引',
|
||||
'Indexes have been altered.' => '已修改索引。',
|
||||
'Alter indexes' => '修改索引',
|
||||
'Add next' => '下一行插入',
|
||||
'Index Type' => '索引类型',
|
||||
'Column (length)' => '列(长度)',
|
||||
|
||||
'Foreign keys' => '外键',
|
||||
'Foreign key' => '外键',
|
||||
'Foreign key has been dropped.' => '已删除外键。',
|
||||
'Foreign key has been altered.' => '已修改外键。',
|
||||
'Foreign key has been created.' => '已创建外键。',
|
||||
'Target table' => '目标表',
|
||||
'Change' => '修改',
|
||||
'Source' => '源',
|
||||
'Target' => '目标',
|
||||
'Add column' => '增加列',
|
||||
'Alter' => '修改',
|
||||
'Add foreign key' => '添加外键',
|
||||
'ON DELETE' => 'ON DELETE',
|
||||
'ON UPDATE' => 'ON UPDATE',
|
||||
'Source and target columns must have the same data type, there must be an index on the target columns and referenced data must exist.' => '源列和目标列必须具有相同的数据类型,在目标列上必须有一个索引并且引用的数据必须存在。',
|
||||
'Relations' => '关联信息',
|
||||
'Run file' => '运行文件',
|
||||
'Clear' => '清除',
|
||||
'Maximum allowed file size is %sB.' => '最多允许的文件大小为 %sB',
|
||||
|
||||
'Triggers' => '触发器',
|
||||
'Add trigger' => '创建触发器',
|
||||
'Trigger has been dropped.' => '已删除触发器。',
|
||||
'Trigger has been altered.' => '已修改触发器。',
|
||||
'Trigger has been created.' => '已创建触发器。',
|
||||
'Alter trigger' => '修改触发器',
|
||||
'Create trigger' => '创建触发器',
|
||||
'Time' => '时间',
|
||||
'Event' => '事件',
|
||||
'Name' => '名称',
|
||||
|
||||
'select' => '选择',
|
||||
'Select' => '选择',
|
||||
'Select data' => '选择数据',
|
||||
'Functions' => '函数',
|
||||
'Aggregation' => '集合',
|
||||
'Search' => '搜索',
|
||||
'anywhere' => '任意位置',
|
||||
'Search data in tables' => '在表中搜索数据',
|
||||
'Sort' => '排序',
|
||||
'descending' => '降序',
|
||||
'Limit' => '范围',
|
||||
'Limit rows' => '限制行数',
|
||||
'Text length' => '文本显示限制',
|
||||
'Action' => '动作',
|
||||
'Full table scan' => '全表扫描',
|
||||
'Unable to select the table' => '不能选择该表',
|
||||
'No rows.' => '无数据。',
|
||||
'%d / ' => '%d / ',
|
||||
'%d row(s)' => '%d 行',
|
||||
'Page' => '页面',
|
||||
'last' => '最后',
|
||||
'Load more data' => '加载更多数据',
|
||||
'Loading' => '加载中',
|
||||
'Whole result' => '所有结果',
|
||||
'%d byte(s)' => '%d 字节',
|
||||
|
||||
'Import' => '导入',
|
||||
'%d row(s) have been imported.' => '%d 行已导入。',
|
||||
'File must be in UTF-8 encoding.' => '文件必须使用UTF-8编码。',
|
||||
|
||||
// in-place editing in select
|
||||
'Modify' => '修改',
|
||||
'Ctrl+click on a value to modify it.' => '按住Ctrl并单击某个值进行修改。',
|
||||
'Use edit link to modify this value.' => '使用编辑链接修改该值。',
|
||||
|
||||
// %s can contain auto-increment value
|
||||
'Item%s has been inserted.' => '已插入项目%s。',
|
||||
'Item has been deleted.' => '已删除项目。',
|
||||
'Item has been updated.' => '已更新项目。',
|
||||
'%d item(s) have been affected.' => '%d 个项目受到影响。',
|
||||
'New item' => '新建数据',
|
||||
'original' => '原始',
|
||||
// label for value '' in enum data type
|
||||
'empty' => '空',
|
||||
'edit' => '编辑',
|
||||
'Edit' => '编辑',
|
||||
'Insert' => '插入',
|
||||
'Save' => '保存',
|
||||
'Save and continue edit' => '保存并继续编辑',
|
||||
'Save and insert next' => '保存并插入下一个',
|
||||
'Selected' => '已选中',
|
||||
'Clone' => '复制',
|
||||
'Delete' => '删除',
|
||||
'You have no privileges to update this table.' => '您没有权限更新这个表。',
|
||||
|
||||
'E-mail' => '电子邮件',
|
||||
'From' => '来自',
|
||||
'Subject' => '主题',
|
||||
'Attachments' => '附件',
|
||||
'Send' => '发送',
|
||||
'%d e-mail(s) have been sent.' => '%d 封邮件已发送。',
|
||||
|
||||
// data type descriptions
|
||||
'Numbers' => '数字',
|
||||
'Date and time' => '日期时间',
|
||||
'Strings' => '字符串',
|
||||
'Binary' => '二进制',
|
||||
'Lists' => '列表',
|
||||
'Editor' => '编辑器',
|
||||
'E-mail' => '电子邮件',
|
||||
'From' => '来自',
|
||||
'Subject' => '主题',
|
||||
'Send' => '发送',
|
||||
'%d e-mail(s) have been sent.' => '%d 封邮件已发送。',
|
||||
'Webserver file %s' => 'Web服务器文件 %s',
|
||||
'File does not exist.' => '文件不存在。',
|
||||
'%d in total' => '共计 %d',
|
||||
'Permanent login' => '保持登录',
|
||||
'Databases have been dropped.' => '已丢弃数据库。',
|
||||
'Search data in tables' => '在表中搜索数据',
|
||||
'schema' => '模式',
|
||||
'Schema' => '模式',
|
||||
'Alter schema' => '更改模式',
|
||||
'Create schema' => '创建模式',
|
||||
'Schema has been dropped.' => '已丢弃模式。',
|
||||
'Schema has been created.' => '已创建模式。',
|
||||
'Schema has been altered.' => '已更改模式。',
|
||||
'Sequences' => '序列',
|
||||
'Create sequence' => '创建序列',
|
||||
'Alter sequence' => '更改序列',
|
||||
'Sequence has been dropped.' => '已丢弃序列。',
|
||||
'Sequence has been created.' => '已创建序列。',
|
||||
'Sequence has been altered.' => '已更改序列。',
|
||||
'User types' => '用户类型',
|
||||
'Create type' => '创建类型',
|
||||
'Alter type' => '更改类型',
|
||||
'Type has been dropped.' => '已丢弃类型。',
|
||||
'Type has been created.' => '已创建类型。',
|
||||
'Use edit link to modify this value.' => '使用编辑链接来修改该值。',
|
||||
'last' => '最后',
|
||||
'From server' => '来自服务器',
|
||||
'System' => '系统',
|
||||
'Select data' => '选择数据',
|
||||
'Show structure' => '显示结构',
|
||||
'empty' => '空',
|
||||
'Network' => '网络',
|
||||
'Geometry' => '几何图形',
|
||||
'File exists.' => '文件已存在。',
|
||||
'Attachments' => '附件',
|
||||
'%d query(s) executed OK.' => '%d 条查询已成功执行。',
|
||||
'Show only errors' => '仅显示错误',
|
||||
'Last page' => '末页',
|
||||
'Refresh' => '刷新',
|
||||
'Invalid schema.' => '非法模式。',
|
||||
'Please use one of the extensions %s.' => '请使用这些扩展中的一个:%s。',
|
||||
'now' => '现在',
|
||||
'ltr' => 'ltr',
|
||||
'Tables have been copied.' => '表已复制。',
|
||||
'Copy' => '复制',
|
||||
'Permanent link' => '固定链接',
|
||||
'Edit all' => '编辑全部',
|
||||
'Relations' => '关联信息',
|
||||
|
||||
'Editor' => '编辑器',
|
||||
// date format in Editor: $1 yyyy, $2 yy, $3 mm, $4 m, $5 dd, $6 d
|
||||
'$1-$3-$5' => '$1.$3.$5',
|
||||
// hint for date format - use language equivalents for day, month and year shortcuts
|
||||
'[yyyy]-mm-dd' => '[yyyy].mm.dd',
|
||||
// hint for time format - use language equivalents for hour, minute and second shortcuts
|
||||
'HH:MM:SS' => 'HH:MM:SS',
|
||||
'now' => '现在',
|
||||
'yes' => '是',
|
||||
'no' => '否',
|
||||
|
||||
// general SQLite error in create, drop or rename database
|
||||
'File exists.' => '文件已存在。',
|
||||
'Please use one of the extensions %s.' => '请使用其中一个扩展:%s。',
|
||||
|
||||
// PostgreSQL and MS SQL schema support
|
||||
'Alter schema' => '修改模式',
|
||||
'Create schema' => '创建模式',
|
||||
'Schema has been dropped.' => '已删除模式。',
|
||||
'Schema has been created.' => '已创建模式。',
|
||||
'Schema has been altered.' => '已修改模式。',
|
||||
'Schema' => '模式',
|
||||
'Invalid schema.' => '非法模式。',
|
||||
|
||||
// PostgreSQL sequences support
|
||||
'Sequences' => '序列',
|
||||
'Create sequence' => '创建序列',
|
||||
'Sequence has been dropped.' => '已删除序列。',
|
||||
'Sequence has been created.' => '已创建序列。',
|
||||
'Sequence has been altered.' => '已修改序列。',
|
||||
'Alter sequence' => '修改序列',
|
||||
|
||||
// PostgreSQL user types support
|
||||
'User types' => '用户类型',
|
||||
'Create type' => '创建类型',
|
||||
'Type has been dropped.' => '已删除类型。',
|
||||
'Type has been created.' => '已创建类型。',
|
||||
'Alter type' => '修改类型',
|
||||
);
|
||||
|
||||
@@ -8,16 +8,23 @@ function adminer_object() {
|
||||
include_once $filename;
|
||||
}
|
||||
|
||||
// enable extra drivers just by including them
|
||||
//~ include "../plugins/drivers/simpledb.php";
|
||||
|
||||
$plugins = array(
|
||||
// specify enabled plugins here
|
||||
new AdminerDatabaseHide(array('information_schema')),
|
||||
new AdminerDumpJson,
|
||||
new AdminerDumpBz2,
|
||||
new AdminerDumpZip,
|
||||
new AdminerDumpXml,
|
||||
new AdminerDumpAlter,
|
||||
//~ new AdminerSqlLog("past-" . rtrim(`git describe --tags --abbrev=0`) . ".sql"),
|
||||
//~ new AdminerEditCalendar("<script type='text/javascript' src='../externals/jquery-ui/jquery-1.4.4.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.core.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.widget.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.datepicker.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.mouse.js'></script>\n<script type='text/javascript' src='../externals/jquery-ui/ui/jquery.ui.slider.js'></script>\n<script type='text/javascript' src='../externals/jquery-timepicker/jquery-ui-timepicker-addon.js'></script>\n<link rel='stylesheet' href='../externals/jquery-ui/themes/base/jquery.ui.all.css'>\n<style type='text/css'>\n.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }\n.ui-timepicker-div dl { text-align: left; }\n.ui-timepicker-div dl dt { height: 25px; }\n.ui-timepicker-div dl dd { margin: -25px 0 10px 65px; }\n.ui-timepicker-div td { font-size: 90%; }\n</style>\n", "../externals/jquery-ui/ui/i18n/jquery.ui.datepicker-%s.js"),
|
||||
//~ new AdminerEditCalendar(script_src("../externals/jquery-ui/jquery-1.4.4.js") . script_src("../externals/jquery-ui/ui/jquery.ui.core.js") . script_src("../externals/jquery-ui/ui/jquery.ui.widget.js") . script_src("../externals/jquery-ui/ui/jquery.ui.datepicker.js") . script_src("../externals/jquery-ui/ui/jquery.ui.mouse.js") . script_src("../externals/jquery-ui/ui/jquery.ui.slider.js") . script_src("../externals/jquery-timepicker/jquery-ui-timepicker-addon.js") . "<link rel='stylesheet' href='../externals/jquery-ui/themes/base/jquery.ui.all.css'>\n<style>\n.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }\n.ui-timepicker-div dl { text-align: left; }\n.ui-timepicker-div dl dt { height: 25px; }\n.ui-timepicker-div dl dd { margin: -25px 0 10px 65px; }\n.ui-timepicker-div td { font-size: 90%; }\n</style>\n", "../externals/jquery-ui/ui/i18n/jquery.ui.datepicker-%s.js"),
|
||||
//~ new AdminerTinymce("../externals/tinymce/jscripts/tiny_mce/tiny_mce_dev.js"),
|
||||
//~ new AdminerWymeditor(array("../externals/wymeditor/src/jquery/jquery.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.explorer.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.mozilla.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.opera.js", "../externals/wymeditor/src/wymeditor/jquery.wymeditor.safari.js")),
|
||||
new AdminerFileUpload(""),
|
||||
new AdminerJsonColumn,
|
||||
new AdminerSlugify,
|
||||
new AdminerTranslation,
|
||||
new AdminerForeignSystem,
|
||||
|
||||
@@ -1,25 +1,29 @@
|
||||
<?php
|
||||
page_header(lang('Privileges'));
|
||||
|
||||
echo '<p class="links"><a href="' . h(ME) . 'user=">' . lang('Create user') . "</a>";
|
||||
|
||||
$result = $connection->query("SELECT User, Host FROM mysql." . (DB == "" ? "user" : "db WHERE " . q(DB) . " LIKE Db") . " ORDER BY Host, User");
|
||||
$grant = $result;
|
||||
if (!$result) {
|
||||
// list logged user, information_schema.USER_PRIVILEGES lists just the current user too
|
||||
$result = $connection->query("SELECT SUBSTRING_INDEX(CURRENT_USER, '@', 1) AS User, SUBSTRING_INDEX(CURRENT_USER, '@', -1) AS Host");
|
||||
}
|
||||
|
||||
echo "<form action=''><p>\n";
|
||||
hidden_fields_get();
|
||||
echo "<input type='hidden' name='db' value='" . h(DB) . "'>\n";
|
||||
echo ($grant ? "" : "<input type='hidden' name='grant' value=''>\n");
|
||||
echo "<table cellspacing='0'>\n";
|
||||
echo "<thead><tr><th>" . lang('Username') . "<th>" . lang('Server') . "<th> </thead>\n";
|
||||
echo "<thead><tr><th>" . lang('Username') . "<th>" . lang('Server') . "<th></thead>\n";
|
||||
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
echo '<tr' . odd() . '><td>' . h($row["User"]) . "<td>" . h($row["Host"]) . '<td><a href="' . h(ME . 'user=' . urlencode($row["User"]) . '&host=' . urlencode($row["Host"])) . '">' . lang('Edit') . "</a>\n";
|
||||
}
|
||||
|
||||
if (!$grant || DB != "") {
|
||||
echo "<tr" . odd() . "><td><input name='user'><td><input name='host' value='localhost'><td><input type='submit' value='" . lang('Edit') . "'>\n";
|
||||
echo "<tr" . odd() . "><td><input name='user' autocapitalize='off'><td><input name='host' value='localhost' autocapitalize='off'><td><input type='submit' value='" . lang('Edit') . "'>\n";
|
||||
}
|
||||
|
||||
echo "</table>\n";
|
||||
echo "</form>\n";
|
||||
|
||||
echo '<p><a href="' . h(ME) . 'user=">' . lang('Create user') . "</a>";
|
||||
|
||||
@@ -1,60 +1,58 @@
|
||||
<?php
|
||||
$PROCEDURE = $_GET["procedure"];
|
||||
$PROCEDURE = ($_GET["name"] ? $_GET["name"] : $_GET["procedure"]);
|
||||
$routine = (isset($_GET["function"]) ? "FUNCTION" : "PROCEDURE");
|
||||
$routine_languages = routine_languages();
|
||||
$row = $_POST;
|
||||
$row["fields"] = (array) $row["fields"];
|
||||
|
||||
$dropped = false;
|
||||
if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"] && !$_POST["up"] && !$_POST["down"]) {
|
||||
$set = array();
|
||||
$fields = (array) $_POST["fields"];
|
||||
ksort($fields); // enforce fields order
|
||||
foreach ($fields as $field) {
|
||||
if ($field["field"] != "") {
|
||||
$set[] = (ereg("^($inout)\$", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
|
||||
}
|
||||
}
|
||||
$dropped = drop_create(
|
||||
"DROP $routine " . idf_escape($PROCEDURE),
|
||||
"CREATE $routine " . idf_escape(trim($_POST["name"])) . " (" . implode(", ", $set) . ")" . (isset($_GET["function"]) ? " RETURNS" . process_type($_POST["returns"], "CHARACTER SET") : "") . (in_array($_POST["language"], $routine_languages) ? " LANGUAGE $_POST[language]" : "") . rtrim("\n$_POST[definition]", ";") . ";",
|
||||
if ($_POST && !process_fields($row["fields"]) && !$error) {
|
||||
$orig = routine($_GET["procedure"], $routine);
|
||||
$temp_name = "$row[name]_adminer_" . uniqid();
|
||||
drop_create(
|
||||
"DROP $routine " . routine_id($PROCEDURE, $orig),
|
||||
create_routine($routine, $row),
|
||||
"DROP $routine " . routine_id($row["name"], $row),
|
||||
create_routine($routine, array("name" => $temp_name) + $row),
|
||||
"DROP $routine " . routine_id($temp_name, $row),
|
||||
substr(ME, 0, -1),
|
||||
lang('Routine has been dropped.'),
|
||||
lang('Routine has been altered.'),
|
||||
lang('Routine has been created.'),
|
||||
$PROCEDURE
|
||||
$PROCEDURE,
|
||||
$row["name"]
|
||||
);
|
||||
}
|
||||
|
||||
page_header(($PROCEDURE != "" ? (isset($_GET["function"]) ? lang('Alter function') : lang('Alter procedure')) . ": " . h($PROCEDURE) : (isset($_GET["function"]) ? lang('Create function') : lang('Create procedure'))), $error);
|
||||
|
||||
$collations = get_vals("SHOW CHARACTER SET");
|
||||
sort($collations);
|
||||
$row = array("fields" => array());
|
||||
if ($_POST) {
|
||||
$row = $_POST;
|
||||
$row["fields"] = (array) $row["fields"];
|
||||
process_fields($row["fields"]);
|
||||
} elseif ($PROCEDURE != "") {
|
||||
$row = routine($PROCEDURE, $routine);
|
||||
if (!$_POST && $PROCEDURE != "") {
|
||||
$row = routine($_GET["procedure"], $routine);
|
||||
$row["name"] = $PROCEDURE;
|
||||
}
|
||||
|
||||
$collations = get_vals("SHOW CHARACTER SET");
|
||||
sort($collations);
|
||||
$routine_languages = routine_languages();
|
||||
?>
|
||||
|
||||
<form action="" method="post" id="form">
|
||||
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" maxlength="64">
|
||||
<?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) : ""); ?>
|
||||
<p><?php echo lang('Name'); ?>: <input name="name" value="<?php echo h($row["name"]); ?>" data-maxlength="64" autocapitalize="off">
|
||||
<?php echo ($routine_languages ? lang('Language') . ": " . html_select("language", $routine_languages, $row["language"]) . "\n" : ""); ?>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<div class="scrollable">
|
||||
<table cellspacing="0" class="nowrap">
|
||||
<?php
|
||||
edit_fields($row["fields"], $collations, $routine);
|
||||
if (isset($_GET["function"])) {
|
||||
echo "<tr><td>" . lang('Return type');
|
||||
edit_type("returns", $row["returns"], $collations);
|
||||
edit_type("returns", $row["returns"], $collations, array(), ($jush == "pgsql" ? array("void", "trigger") : array()));
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
<?php echo script("editFields();"); ?>
|
||||
</div>
|
||||
<p><?php textarea("definition", $row["definition"]); ?>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php if ($PROCEDURE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"<?php echo confirm(); ?>><?php } ?>
|
||||
<?php if ($dropped) { ?><input type="hidden" name="dropped" value="1"><?php } ?>
|
||||
<?php if ($PROCEDURE != "") { ?><input type="submit" name="drop" value="<?php echo lang('Drop'); ?>"><?php echo confirm(lang('Drop %s?', $PROCEDURE)); ?><?php } ?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
|
||||
@@ -1,47 +1,61 @@
|
||||
<?php
|
||||
if (support("kill") && $_POST && !$error) {
|
||||
$killed = 0;
|
||||
foreach ((array) $_POST["kill"] as $val) {
|
||||
if (queries("KILL " . (+$val))) {
|
||||
$killed++;
|
||||
if (support("kill")) {
|
||||
if ($_POST && !$error) {
|
||||
$killed = 0;
|
||||
foreach ((array) $_POST["kill"] as $val) {
|
||||
if (kill_process($val)) {
|
||||
$killed++;
|
||||
}
|
||||
}
|
||||
queries_redirect(ME . "processlist=", lang('%d process(es) have been killed.', $killed), $killed || !$_POST["kill"]);
|
||||
}
|
||||
queries_redirect(ME . "processlist=", lang('%d process(es) have been killed.', $killed), $killed || !$_POST["kill"]);
|
||||
}
|
||||
|
||||
page_header(lang('Process list'), $error);
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<table cellspacing="0" onclick="tableClick(event);" ondblclick="tableClick(event, true);" class="nowrap checkable">
|
||||
<div class="scrollable">
|
||||
<table cellspacing="0" class="nowrap checkable">
|
||||
<?php
|
||||
echo script("mixin(qsl('table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true)});");
|
||||
// HTML valid because there is always at least one process
|
||||
$i = -1;
|
||||
foreach (process_list() as $i => $row) {
|
||||
|
||||
if (!$i) {
|
||||
echo "<thead><tr lang='en'>" . (support("kill") ? "<th> " : "") . "<th>" . implode("<th>", array_keys($row)) . "</thead>\n";
|
||||
echo "<thead><tr lang='en'>" . (support("kill") ? "<th>" : "");
|
||||
foreach ($row as $key => $val) {
|
||||
echo "<th>$key" . doc_link(array(
|
||||
'sql' => "show-processlist.html#processlist_" . strtolower($key),
|
||||
'pgsql' => "monitoring-stats.html#PG-STAT-ACTIVITY-VIEW",
|
||||
'oracle' => "REFRN30223",
|
||||
));
|
||||
}
|
||||
echo "</thead>\n";
|
||||
}
|
||||
echo "<tr" . odd() . ">" . (support("kill") ? "<td>" . checkbox("kill[]", $row["Id"], 0) : "");
|
||||
echo "<tr" . odd() . ">" . (support("kill") ? "<td>" . checkbox("kill[]", $row[$jush == "sql" ? "Id" : "pid"], 0) : "");
|
||||
foreach ($row as $key => $val) {
|
||||
echo "<td>" . (
|
||||
($jush == "sql" && $key == "Info" && ereg("Query|Killed", $row["Command"]) && $val != "") ||
|
||||
($jush == "sql" && $key == "Info" && preg_match("~Query|Killed~", $row["Command"]) && $val != "") ||
|
||||
($jush == "pgsql" && $key == "current_query" && $val != "<IDLE>") ||
|
||||
($jush == "oracle" && $key == "sql_text" && $val != "")
|
||||
? "<code class='jush-$jush'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Edit') . '</a>'
|
||||
: nbsp($val)
|
||||
? "<code class='jush-$jush'>" . shorten_utf8($val, 100, "</code>") . ' <a href="' . h(ME . ($row["db"] != "" ? "db=" . urlencode($row["db"]) . "&" : "") . "sql=" . urlencode($val)) . '">' . lang('Clone') . '</a>'
|
||||
: h($val)
|
||||
);
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
<script type='text/javascript'>tableCheck();</script>
|
||||
</div>
|
||||
<p>
|
||||
<?php
|
||||
if (support("kill")) {
|
||||
echo ($i + 1) . "/" . lang('%d in total', $connection->result("SELECT @@max_connections"));
|
||||
echo ($i + 1) . "/" . lang('%d in total', max_connections());
|
||||
echo "<p><input type='submit' value='" . lang('Kill') . "'>\n";
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
</form>
|
||||
<?php echo script("tableCheck();"); ?>
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
<?php
|
||||
page_header(lang('Database schema'), "", array(), DB . ($_GET["ns"] ? ".$_GET[ns]" : ""));
|
||||
page_header(lang('Database schema'), "", array(), h(DB . ($_GET["ns"] ? ".$_GET[ns]" : "")));
|
||||
|
||||
$table_pos = array();
|
||||
$table_pos_js = array();
|
||||
$name = "adminer_schema";
|
||||
$SCHEMA = ($_GET["schema"] ? $_GET["schema"] : $_COOKIE[($_COOKIE["$name-" . DB] ? "$name-" . DB : $name)]); // $_COOKIE["adminer_schema"] was used before 3.2.0 //! ':' in table name
|
||||
$SCHEMA = ($_GET["schema"] ? $_GET["schema"] : $_COOKIE["adminer_schema-" . str_replace(".", "_", DB)]); // $_COOKIE["adminer_schema"] was used before 3.2.0 //! ':' in table name
|
||||
preg_match_all('~([^:]+):([-0-9.]+)x([-0-9.]+)(_|$)~', $SCHEMA, $matches, PREG_SET_ORDER);
|
||||
foreach ($matches as $i => $match) {
|
||||
$table_pos[$match[1]] = array($match[2], $match[3]);
|
||||
@@ -16,23 +15,23 @@ $base_left = -1;
|
||||
$schema = array(); // table => array("fields" => array(name => field), "pos" => array(top, left), "references" => array(table => array(left => array(source, target))))
|
||||
$referenced = array(); // target_table => array(table => array(left => target_column))
|
||||
$lefts = array(); // float => bool
|
||||
foreach (table_status() as $table_status) {
|
||||
if (!isset($table_status["Engine"])) { // view
|
||||
foreach (table_status('', true) as $table => $table_status) {
|
||||
if (is_view($table_status)) {
|
||||
continue;
|
||||
}
|
||||
$pos = 0;
|
||||
$schema[$table_status["Name"]]["fields"] = array();
|
||||
foreach (fields($table_status["Name"]) as $name => $field) {
|
||||
$schema[$table]["fields"] = array();
|
||||
foreach (fields($table) as $name => $field) {
|
||||
$pos += 1.25;
|
||||
$field["pos"] = $pos;
|
||||
$schema[$table_status["Name"]]["fields"][$name] = $field;
|
||||
$schema[$table]["fields"][$name] = $field;
|
||||
}
|
||||
$schema[$table_status["Name"]]["pos"] = ($table_pos[$table_status["Name"]] ? $table_pos[$table_status["Name"]] : array($top, 0));
|
||||
foreach ($adminer->foreignKeys($table_status["Name"]) as $val) {
|
||||
$schema[$table]["pos"] = ($table_pos[$table] ? $table_pos[$table] : array($top, 0));
|
||||
foreach ($adminer->foreignKeys($table) as $val) {
|
||||
if (!$val["db"]) {
|
||||
$left = $base_left;
|
||||
if ($table_pos[$table_status["Name"]][1] || $table_pos[$val["table"]][1]) {
|
||||
$left = min(floatval($table_pos[$table_status["Name"]][1]), floatval($table_pos[$val["table"]][1])) - 1;
|
||||
if ($table_pos[$table][1] || $table_pos[$val["table"]][1]) {
|
||||
$left = min(floatval($table_pos[$table][1]), floatval($table_pos[$val["table"]][1])) - 1;
|
||||
} else {
|
||||
$base_left -= .1;
|
||||
}
|
||||
@@ -40,32 +39,34 @@ foreach (table_status() as $table_status) {
|
||||
// find free $left
|
||||
$left -= .0001;
|
||||
}
|
||||
$schema[$table_status["Name"]]["references"][$val["table"]][(string) $left] = array($val["source"], $val["target"]);
|
||||
$referenced[$val["table"]][$table_status["Name"]][(string) $left] = $val["target"];
|
||||
$schema[$table]["references"][$val["table"]][(string) $left] = array($val["source"], $val["target"]);
|
||||
$referenced[$val["table"]][$table][(string) $left] = $val["target"];
|
||||
$lefts[(string) $left] = true;
|
||||
}
|
||||
}
|
||||
$top = max($top, $schema[$table_status["Name"]]["pos"][0] + 2.5 + $pos);
|
||||
$top = max($top, $schema[$table]["pos"][0] + 2.5 + $pos);
|
||||
}
|
||||
|
||||
?>
|
||||
<div id="schema" style="height: <?php echo $top; ?>em;" onselectstart="return false;">
|
||||
<script type="text/javascript">
|
||||
<div id="schema" style="height: <?php echo $top; ?>em;">
|
||||
<script<?php echo nonce(); ?>>
|
||||
qs('#schema').onselectstart = function () { return false; };
|
||||
var tablePos = {<?php echo implode(",", $table_pos_js) . "\n"; ?>};
|
||||
var em = document.getElementById('schema').offsetHeight / <?php echo $top; ?>;
|
||||
var em = qs('#schema').offsetHeight / <?php echo $top; ?>;
|
||||
document.onmousemove = schemaMousemove;
|
||||
document.onmouseup = function (ev) {
|
||||
schemaMouseup(ev, '<?php echo js_escape(DB); ?>');
|
||||
};
|
||||
document.onmouseup = partialArg(schemaMouseup, '<?php echo js_escape(DB); ?>');
|
||||
</script>
|
||||
<?php
|
||||
foreach ($schema as $name => $table) {
|
||||
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;' onmousedown='schemaMousedown(this, event);'>";
|
||||
echo "<div class='table' style='top: " . $table["pos"][0] . "em; left: " . $table["pos"][1] . "em;'>";
|
||||
echo '<a href="' . h(ME) . 'table=' . urlencode($name) . '"><b>' . h($name) . "</b></a>";
|
||||
echo script("qsl('div').onmousedown = schemaMousedown;");
|
||||
|
||||
foreach ($table["fields"] as $field) {
|
||||
$val = '<span' . type_class($field["type"]) . ' title="' . h($field["full_type"] . ($field["null"] ? " NULL" : '')) . '">' . h($field["field"]) . '</span>';
|
||||
echo "<br>" . ($field["primary"] ? "<i>$val</i>" : $val);
|
||||
}
|
||||
|
||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||
foreach ($refs as $left => $ref) {
|
||||
$left1 = $left - $table_pos[$name][1];
|
||||
@@ -75,6 +76,7 @@ foreach ($schema as $name => $table) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ((array) $referenced[$name] as $target_name => $refs) {
|
||||
foreach ($refs as $left => $columns) {
|
||||
$left1 = $left - $table_pos[$name][1];
|
||||
@@ -84,8 +86,10 @@ foreach ($schema as $name => $table) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo "\n</div>\n";
|
||||
}
|
||||
|
||||
foreach ($schema as $name => $table) {
|
||||
foreach ((array) $table["references"] as $target_name => $refs) {
|
||||
foreach ($refs as $left => $ref) {
|
||||
@@ -103,4 +107,4 @@ foreach ($schema as $name => $table) {
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
<p><a href="<?php echo h(ME . "schema=" . urlencode($SCHEMA)); ?>" id="schema-link"><?php echo lang('Permanent link'); ?></a>
|
||||
<p class="links"><a href="<?php echo h(ME . "schema=" . urlencode($SCHEMA)); ?>" id="schema-link"><?php echo lang('Permanent link'); ?></a>
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
<?php
|
||||
$row = $_POST;
|
||||
|
||||
if ($_POST && !$error) {
|
||||
$link = preg_replace('~ns=[^&]*&~', '', ME) . "ns=";
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP SCHEMA " . idf_escape($_GET["ns"]), $link, lang('Schema has been dropped.'));
|
||||
} else {
|
||||
$name = trim($_POST["name"]);
|
||||
$name = trim($row["name"]);
|
||||
$link .= urlencode($name);
|
||||
if ($_GET["ns"] == "") {
|
||||
query_redirect("CREATE SCHEMA " . idf_escape($name), $link, lang('Schema has been created.'));
|
||||
@@ -18,19 +20,18 @@ if ($_POST && !$error) {
|
||||
|
||||
page_header($_GET["ns"] != "" ? lang('Alter schema') : lang('Create schema'), $error);
|
||||
|
||||
$row = $_POST;
|
||||
if (!$row) {
|
||||
$row = array("name" => $_GET["ns"]);
|
||||
$row["name"] = $_GET["ns"];
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<p><input id="name" name="name" value="<?php echo h($row["name"]); ?>">
|
||||
<script type='text/javascript'>document.getElementById('name').focus();</script>
|
||||
<p><input name="name" id="name" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||
<?php echo script("focus(qs('#name'));"); ?>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php
|
||||
if ($_GET["ns"] != "") {
|
||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm(lang('Drop %s?', $_GET["ns"])) . "\n";
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
|
||||
@@ -3,17 +3,16 @@ header("Content-Type: text/javascript; charset=utf-8");
|
||||
|
||||
if ($_GET["script"] == "db") {
|
||||
$sums = array("Data_length" => 0, "Index_length" => 0, "Data_free" => 0);
|
||||
foreach (table_status() as $table_status) {
|
||||
$id = js_escape($table_status["Name"]);
|
||||
json_row("Comment-$id", nbsp($table_status["Comment"]));
|
||||
foreach (table_status() as $name => $table_status) {
|
||||
json_row("Comment-$name", h($table_status["Comment"]));
|
||||
if (!is_view($table_status)) {
|
||||
foreach (array("Engine", "Collation") as $key) {
|
||||
json_row("$key-$id", nbsp($table_status[$key]));
|
||||
json_row("$key-$name", h($table_status[$key]));
|
||||
}
|
||||
foreach ($sums + array("Auto_increment" => 0, "Rows" => 0) as $key => $val) {
|
||||
if ($table_status[$key] != "") {
|
||||
$val = number_format($table_status[$key], 0, '.', lang(','));
|
||||
json_row("$key-$id", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
|
||||
$val = format_number($table_status[$key]);
|
||||
json_row("$key-$name", ($key == "Rows" && $val && $table_status["Engine"] == ($sql == "pgsql" ? "table" : "InnoDB")
|
||||
? "~ $val"
|
||||
: $val
|
||||
));
|
||||
@@ -22,22 +21,23 @@ if ($_GET["script"] == "db") {
|
||||
$sums[$key] += ($table_status["Engine"] != "InnoDB" || $key != "Data_free" ? $table_status[$key] : 0);
|
||||
}
|
||||
} elseif (array_key_exists($key, $table_status)) {
|
||||
json_row("$key-$id");
|
||||
json_row("$key-$name");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ($sums as $key => $val) {
|
||||
json_row("sum-$key", number_format($val, 0, '.', lang(',')));
|
||||
json_row("sum-$key", format_number($val));
|
||||
}
|
||||
json_row("");
|
||||
|
||||
} elseif ($_GET["script"] == "kill") {
|
||||
$connection->query("KILL " . (+$_POST["kill"]));
|
||||
$connection->query("KILL " . number($_POST["kill"]));
|
||||
|
||||
} else { // connect
|
||||
foreach (count_tables($adminer->databases()) as $db => $val) {
|
||||
json_row("tables-" . js_escape($db), $val);
|
||||
json_row("tables-$db", $val);
|
||||
json_row("size-$db", db_size($db));
|
||||
}
|
||||
json_row("");
|
||||
}
|
||||
|
||||
@@ -1,14 +1,10 @@
|
||||
<?php
|
||||
$TABLE = $_GET["select"];
|
||||
$table_status = table_status($TABLE);
|
||||
$table_status = table_status1($TABLE);
|
||||
$indexes = indexes($TABLE);
|
||||
$fields = fields($TABLE);
|
||||
$foreign_keys = column_foreign_keys($TABLE);
|
||||
$oid = "";
|
||||
if ($table_status["Oid"] == "t") {
|
||||
$oid = ($jush == "sqlite" ? "rowid" : "oid");
|
||||
$indexes[] = array("type" => "PRIMARY", "columns" => array($oid));
|
||||
}
|
||||
$oid = $table_status["Oid"];
|
||||
parse_str($_COOKIE["adminer_import"], $adminer_import);
|
||||
|
||||
$rights = array(); // privilege => 0
|
||||
@@ -17,7 +13,7 @@ $text_length = null;
|
||||
foreach ($fields as $key => $field) {
|
||||
$name = $adminer->fieldName($field);
|
||||
if (isset($field["privileges"]["select"]) && $name != "") {
|
||||
$columns[$key] = html_entity_decode(strip_tags($name));
|
||||
$columns[$key] = html_entity_decode(strip_tags($name), ENT_QUOTES);
|
||||
if (is_shortable($field)) {
|
||||
$text_length = $adminer->selectLengthProcess();
|
||||
}
|
||||
@@ -30,52 +26,59 @@ $is_group = count($group) < count($select);
|
||||
$where = $adminer->selectSearchProcess($fields, $indexes);
|
||||
$order = $adminer->selectOrderProcess($fields, $indexes);
|
||||
$limit = $adminer->selectLimitProcess();
|
||||
$from = ($select ? implode(", ", $select) : "*" . ($oid ? ", $oid" : ""));
|
||||
if ($jush == "sql") {
|
||||
foreach ($columns as $key => $val) {
|
||||
$as = convert_field($fields[$key]);
|
||||
if ($as) {
|
||||
$from .= ", $as AS " . idf_escape($key);
|
||||
}
|
||||
}
|
||||
}
|
||||
$from .= "\nFROM " . table($TABLE);
|
||||
$group_by = ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : "");
|
||||
|
||||
if ($_GET["val"] && is_ajax()) {
|
||||
header("Content-Type: text/plain; charset=utf-8");
|
||||
foreach ($_GET["val"] as $unique_idf => $row) {
|
||||
$as = convert_field($fields[key($row)]);
|
||||
echo $connection->result("SELECT" . limit(($as ? $as : idf_escape(key($row))) . " FROM " . table($TABLE), " WHERE " . where_check($unique_idf, $fields) . ($where ? " AND " . implode(" AND ", $where) : "") . ($order ? " ORDER BY " . implode(", ", $order) : ""), 1));
|
||||
$select = array($as ? $as : idf_escape(key($row)));
|
||||
$where[] = where_check($unique_idf, $fields);
|
||||
$return = $driver->select($TABLE, $select, $where, $select);
|
||||
if ($return) {
|
||||
echo reset($return->fetch_row());
|
||||
}
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
$primary = $unselected = null;
|
||||
foreach ($indexes as $index) {
|
||||
if ($index["type"] == "PRIMARY") {
|
||||
$primary = array_flip($index["columns"]);
|
||||
$unselected = ($select ? $primary : array());
|
||||
foreach ($unselected as $key => $val) {
|
||||
if (in_array(idf_escape($key), $select)) {
|
||||
unset($unselected[$key]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($oid && !$primary) {
|
||||
$primary = $unselected = array($oid => 0);
|
||||
$indexes[] = array("type" => "PRIMARY", "columns" => array($oid));
|
||||
}
|
||||
|
||||
if ($_POST && !$error) {
|
||||
$where_check = "(" . implode(") OR (", array_map('where_check', (array) $_POST["check"])) . ")";
|
||||
$primary = $unselected = null;
|
||||
foreach ($indexes as $index) {
|
||||
if ($index["type"] == "PRIMARY") {
|
||||
$primary = array_flip($index["columns"]);
|
||||
$unselected = ($select ? $primary : array());
|
||||
break;
|
||||
}
|
||||
}
|
||||
foreach ((array) $unselected as $key => $val) {
|
||||
if (in_array(idf_escape($key), $select)) {
|
||||
unset($unselected[$key]);
|
||||
$where_check = $where;
|
||||
if (!$_POST["all"] && is_array($_POST["check"])) {
|
||||
$checks = array();
|
||||
foreach ($_POST["check"] as $check) {
|
||||
$checks[] = where_check($check, $fields);
|
||||
}
|
||||
$where_check[] = "((" . implode(") OR (", $checks) . "))";
|
||||
}
|
||||
$where_check = ($where_check ? "\nWHERE " . implode(" AND ", $where_check) : "");
|
||||
if ($_POST["export"]) {
|
||||
cookie("adminer_import", "output=" . urlencode($_POST["output"]) . "&format=" . urlencode($_POST["format"]));
|
||||
dump_headers($TABLE);
|
||||
$adminer->dumpTable($TABLE, "");
|
||||
if (!is_array($_POST["check"]) || $unselected === array()) {
|
||||
$where2 = $where;
|
||||
if (is_array($_POST["check"])) {
|
||||
$where2[] = "($where_check)";
|
||||
}
|
||||
$query = "SELECT $from" . ($where2 ? "\nWHERE " . implode(" AND ", $where2) : "") . $group_by;
|
||||
$from = ($select ? implode(", ", $select) : "*")
|
||||
. convert_fields($columns, $fields, $select)
|
||||
. "\nFROM " . table($TABLE);
|
||||
$group_by = ($group && $is_group ? "\nGROUP BY " . implode(", ", $group) : "") . ($order ? "\nORDER BY " . implode(", ", $order) : "");
|
||||
if (!is_array($_POST["check"]) || $primary) {
|
||||
$query = "SELECT $from$where_check$group_by";
|
||||
} else {
|
||||
$union = array();
|
||||
foreach ($_POST["check"] as $val) {
|
||||
@@ -87,42 +90,44 @@ if ($_POST && !$error) {
|
||||
$adminer->dumpData($TABLE, "table", $query);
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!$adminer->selectEmailProcess($where, $foreign_keys)) {
|
||||
if ($_POST["save"] || $_POST["delete"]) { // edit
|
||||
$result = true;
|
||||
$affected = 0;
|
||||
$query = table($TABLE);
|
||||
$set = array();
|
||||
if (!$_POST["delete"]) {
|
||||
foreach ($columns as $name => $val) { //! should check also for edit or insert privileges
|
||||
$val = process_input($fields[$name]);
|
||||
if ($val !== null) {
|
||||
if ($_POST["clone"]) {
|
||||
$set[idf_escape($name)] = ($val !== false ? $val : idf_escape($name));
|
||||
} elseif ($val !== false) {
|
||||
$set[] = idf_escape($name) . " = $val";
|
||||
}
|
||||
if ($val !== null && ($_POST["clone"] || $val !== false)) {
|
||||
$set[idf_escape($name)] = ($val !== false ? $val : idf_escape($name));
|
||||
}
|
||||
}
|
||||
$query .= ($_POST["clone"] ? " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . table($TABLE) : " SET\n" . implode(",\n", $set));
|
||||
}
|
||||
if ($_POST["delete"] || $set) {
|
||||
$command = "UPDATE";
|
||||
if ($_POST["delete"]) {
|
||||
$command = "DELETE";
|
||||
$query = "FROM $query";
|
||||
}
|
||||
if ($_POST["clone"]) {
|
||||
$command = "INSERT";
|
||||
$query = "INTO $query";
|
||||
$query = "INTO " . table($TABLE) . " (" . implode(", ", array_keys($set)) . ")\nSELECT " . implode(", ", $set) . "\nFROM " . table($TABLE);
|
||||
}
|
||||
if ($_POST["all"] || ($unselected === array() && $_POST["check"]) || $is_group) {
|
||||
$result = queries("$command $query" . ($_POST["all"] ? ($where ? "\nWHERE " . implode(" AND ", $where) : "") : "\nWHERE $where_check"));
|
||||
if ($_POST["all"] || ($primary && is_array($_POST["check"])) || $is_group) {
|
||||
$result = ($_POST["delete"]
|
||||
? $driver->delete($TABLE, $where_check)
|
||||
: ($_POST["clone"]
|
||||
? queries("INSERT $query$where_check")
|
||||
: $driver->update($TABLE, $set, $where_check)
|
||||
)
|
||||
);
|
||||
$affected = $connection->affected_rows;
|
||||
} else {
|
||||
foreach ((array) $_POST["check"] as $val) {
|
||||
// where is not unique so OR can't be used
|
||||
$result = queries($command . limit1($query, "\nWHERE " . where_check($val, $fields)));
|
||||
$where2 = "\nWHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($val, $fields);
|
||||
$result = ($_POST["delete"]
|
||||
? $driver->delete($TABLE, $where2, 1)
|
||||
: ($_POST["clone"]
|
||||
? queries("INSERT" . limit1($TABLE, $query, $where2))
|
||||
: $driver->update($TABLE, $set, $where2, 1)
|
||||
)
|
||||
);
|
||||
if (!$result) {
|
||||
break;
|
||||
}
|
||||
@@ -137,8 +142,13 @@ if ($_POST && !$error) {
|
||||
$message = lang('Item%s has been inserted.', " $last_id");
|
||||
}
|
||||
}
|
||||
queries_redirect(remove_from_uri("page"), $message, $result);
|
||||
//! display edit page in case of an error
|
||||
queries_redirect(remove_from_uri($_POST["all"] && $_POST["delete"] ? "page" : ""), $message, $result);
|
||||
if (!$_POST["delete"]) {
|
||||
edit_form($TABLE, $fields, (array) $_POST["fields"], !$_POST["clone"]);
|
||||
page_footer();
|
||||
exit;
|
||||
}
|
||||
|
||||
} elseif (!$_POST["import"]) { // modify
|
||||
if (!$_POST["val"]) {
|
||||
$error = lang('Ctrl+click on a value to modify it.');
|
||||
@@ -149,11 +159,15 @@ if ($_POST && !$error) {
|
||||
$set = array();
|
||||
foreach ($row as $key => $val) {
|
||||
$key = bracket_escape($key, 1); // 1 - back
|
||||
$set[] = idf_escape($key) . " = " . (ereg('char|text', $fields[$key]["type"]) || $val != "" ? $adminer->processInput($fields[$key], $val) : "NULL");
|
||||
$set[idf_escape($key)] = (preg_match('~char|text~', $fields[$key]["type"]) || $val != "" ? $adminer->processInput($fields[$key], $val) : "NULL");
|
||||
}
|
||||
$query = table($TABLE) . " SET " . implode(", ", $set);
|
||||
$where2 = " WHERE " . where_check($unique_idf, $fields) . ($where ? " AND " . implode(" AND ", $where) : "");
|
||||
$result = queries("UPDATE" . ($is_group ? " $query$where2" : limit1($query, $where2))); // can change row on a different page without unique key
|
||||
$result = $driver->update(
|
||||
$TABLE,
|
||||
$set,
|
||||
" WHERE " . ($where ? implode(" AND ", $where) . " AND " : "") . where_check($unique_idf, $fields),
|
||||
!$is_group && !$primary,
|
||||
" "
|
||||
);
|
||||
if (!$result) {
|
||||
break;
|
||||
}
|
||||
@@ -161,15 +175,20 @@ if ($_POST && !$error) {
|
||||
}
|
||||
queries_redirect(remove_from_uri(), lang('%d item(s) have been affected.', $affected), $result);
|
||||
}
|
||||
} elseif (is_string($file = get_file("csv_file", true))) {
|
||||
//! character set
|
||||
|
||||
} elseif (!is_string($file = get_file("csv_file", true))) {
|
||||
$error = upload_error($file);
|
||||
} elseif (!preg_match('~~u', $file)) {
|
||||
$error = lang('File must be in UTF-8 encoding.');
|
||||
} else {
|
||||
cookie("adminer_import", "output=" . urlencode($adminer_import["output"]) . "&format=" . urlencode($_POST["separator"]));
|
||||
$result = true;
|
||||
$cols = array_keys($fields);
|
||||
preg_match_all('~(?>"[^"]*"|[^"\\r\\n]+)+~', $file, $matches);
|
||||
preg_match_all('~(?>"[^"]*"|[^"\r\n]+)+~', $file, $matches);
|
||||
$affected = count($matches[0]);
|
||||
begin();
|
||||
$driver->begin();
|
||||
$separator = ($_POST["separator"] == "csv" ? "," : ($_POST["separator"] == "tsv" ? "\t" : ";"));
|
||||
$rows = array();
|
||||
foreach ($matches[0] as $key => $val) {
|
||||
preg_match_all("~((?>\"[^\"]*\")+|[^$separator]*)$separator~", $val . $separator, $matches2);
|
||||
if (!$key && !array_diff($matches2[1], $cols)) { //! doesn't work with column names containing ",\n
|
||||
@@ -181,36 +200,34 @@ if ($_POST && !$error) {
|
||||
foreach ($matches2[1] as $i => $col) {
|
||||
$set[idf_escape($cols[$i])] = ($col == "" && $fields[$cols[$i]]["null"] ? "NULL" : q(str_replace('""', '"', preg_replace('~^"|"$~', '', $col))));
|
||||
}
|
||||
$result = insert_update($TABLE, $set, $primary);
|
||||
if (!$result) {
|
||||
break;
|
||||
}
|
||||
$rows[] = $set;
|
||||
}
|
||||
}
|
||||
$result = (!$rows || $driver->insertUpdate($TABLE, $rows, $primary));
|
||||
if ($result) {
|
||||
queries("COMMIT");
|
||||
$result = $driver->commit();
|
||||
}
|
||||
queries_redirect(remove_from_uri("page"), lang('%d row(s) have been imported.', $affected), $result);
|
||||
queries("ROLLBACK"); // after queries_redirect() to not overwrite error
|
||||
} else {
|
||||
$error = upload_error($file);
|
||||
$driver->rollback(); // after queries_redirect() to not overwrite error
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$table_name = $adminer->tableName($table_status);
|
||||
if (is_ajax()) {
|
||||
// needs to send headers
|
||||
page_headers();
|
||||
ob_start();
|
||||
} else {
|
||||
page_header(lang('Select') . ": $table_name", $error);
|
||||
}
|
||||
page_header(lang('Select') . ": $table_name", $error);
|
||||
|
||||
$set = null;
|
||||
if (isset($rights["insert"])) {
|
||||
if (isset($rights["insert"]) || !support("table")) {
|
||||
$set = "";
|
||||
foreach ((array) $_GET["where"] as $val) {
|
||||
if (count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
|
||||
|| (!$val["op"] && !ereg('[_%]', $val["val"])) // LIKE in Editor
|
||||
if ($foreign_keys[$val["col"]] && count($foreign_keys[$val["col"]]) == 1 && ($val["op"] == "="
|
||||
|| (!$val["op"] && !preg_match('~[_%]~', $val["val"])) // LIKE in Editor
|
||||
)) {
|
||||
$set .= "&set" . urlencode("[" . bracket_escape($val["col"]) . "]") . "=" . urlencode($val["val"]);
|
||||
}
|
||||
@@ -218,7 +235,7 @@ if (isset($rights["insert"])) {
|
||||
}
|
||||
$adminer->selectLinks($table_status, $set);
|
||||
|
||||
if (!$columns) {
|
||||
if (!$columns && support("table")) {
|
||||
echo "<p class='error'>" . lang('Unable to select the table') . ($fields ? "." : ": " . error()) . "\n";
|
||||
} else {
|
||||
echo "<form action='' id='form'>\n";
|
||||
@@ -234,30 +251,42 @@ if (!$columns) {
|
||||
$adminer->selectLengthPrint($text_length);
|
||||
$adminer->selectActionPrint($indexes);
|
||||
echo "</form>\n";
|
||||
|
||||
|
||||
$page = $_GET["page"];
|
||||
if ($page == "last") {
|
||||
$found_rows = $connection->result("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : ""));
|
||||
$found_rows = $connection->result(count_rows($TABLE, $where, $is_group, $group));
|
||||
$page = floor(max(0, $found_rows - 1) / $limit);
|
||||
}
|
||||
|
||||
$query = $adminer->selectQueryBuild($select, $where, $group, $order, $limit, $page);
|
||||
if (!$query) {
|
||||
$query = "SELECT" . limit(
|
||||
(+$limit && $group && $is_group && $jush == "sql" ? "SQL_CALC_FOUND_ROWS " : "") . $from,
|
||||
($where ? "\nWHERE " . implode(" AND ", $where) : "") . $group_by,
|
||||
($limit != "" ? +$limit : null),
|
||||
($page ? $limit * $page : 0),
|
||||
"\n"
|
||||
);
|
||||
$select2 = $select;
|
||||
$group2 = $group;
|
||||
if (!$select2) {
|
||||
$select2[] = "*";
|
||||
$convert_fields = convert_fields($columns, $fields, $select);
|
||||
if ($convert_fields) {
|
||||
$select2[] = substr($convert_fields, 2);
|
||||
}
|
||||
}
|
||||
echo $adminer->selectQuery($query);
|
||||
|
||||
$result = $connection->query($query);
|
||||
foreach ($select as $key => $val) {
|
||||
$field = $fields[idf_unescape($val)];
|
||||
if ($field && ($as = convert_field($field))) {
|
||||
$select2[$key] = "$as AS $val";
|
||||
}
|
||||
}
|
||||
if (!$is_group && $unselected) {
|
||||
foreach ($unselected as $key => $val) {
|
||||
$select2[] = idf_escape($key);
|
||||
if ($group2) {
|
||||
$group2[] = idf_escape($key);
|
||||
}
|
||||
}
|
||||
}
|
||||
$result = $driver->select($TABLE, $select2, $where, $group2, $order, $limit, $page, true);
|
||||
|
||||
if (!$result) {
|
||||
echo "<p class='error'>" . error() . "\n";
|
||||
} else {
|
||||
if ($jush == "mssql") {
|
||||
if ($jush == "mssql" && $page) {
|
||||
$result->seek($limit * $page);
|
||||
}
|
||||
$email_fields = array();
|
||||
@@ -269,43 +298,47 @@ if (!$columns) {
|
||||
}
|
||||
$rows[] = $row;
|
||||
}
|
||||
|
||||
// use count($rows) without LIMIT, COUNT(*) without grouping, FOUND_ROWS otherwise (slowest)
|
||||
if ($_GET["page"] != "last") {
|
||||
$found_rows = (+$limit && $group && $is_group
|
||||
? ($jush == "sql" ? $connection->result(" SELECT FOUND_ROWS()") : $connection->result("SELECT COUNT(*) FROM ($query) x")) // space to allow mysql.trace_mode
|
||||
: count($rows)
|
||||
);
|
||||
if ($_GET["page"] != "last" && $limit != "" && $group && $is_group && $jush == "sql") {
|
||||
$found_rows = $connection->result(" SELECT FOUND_ROWS()"); // space to allow mysql.trace_mode
|
||||
}
|
||||
|
||||
|
||||
if (!$rows) {
|
||||
echo "<p class='message'>" . lang('No rows.') . "\n";
|
||||
} else {
|
||||
$backward_keys = $adminer->backwardKeys($TABLE, $table_name);
|
||||
|
||||
echo "<table id='table' cellspacing='0' class='nowrap checkable' onclick='tableClick(event);' ondblclick='tableClick(event, true);' onkeydown='return editingKeydown(event);'>\n";
|
||||
echo "<thead><tr>" . (!$group && $select ? "" : "<td><input type='checkbox' id='all-page' onclick='formCheck(this, /check/);'> <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('edit') . "</a>");
|
||||
|
||||
echo "<div class='scrollable'>";
|
||||
echo "<table id='table' cellspacing='0' class='nowrap checkable'>";
|
||||
echo script("mixin(qs('#table'), {onclick: tableClick, ondblclick: partialArg(tableClick, true), onkeydown: editingKeydown});");
|
||||
echo "<thead><tr>" . (!$group && $select
|
||||
? ""
|
||||
: "<td><input type='checkbox' id='all-page' class='jsonly'>" . script("qs('#all-page').onclick = partial(formCheck, /check/);", "")
|
||||
. " <a href='" . h($_GET["modify"] ? remove_from_uri("modify") : $_SERVER["REQUEST_URI"] . "&modify=1") . "'>" . lang('Modify') . "</a>");
|
||||
$names = array();
|
||||
$functions = array();
|
||||
reset($select);
|
||||
$rank = 1;
|
||||
foreach ($rows[0] as $key => $val) {
|
||||
if ($key != $oid) {
|
||||
if (!isset($unselected[$key])) {
|
||||
$val = $_GET["columns"][key($select)];
|
||||
$field = $fields[$select ? ($val ? $val["col"] : current($select)) : $key];
|
||||
$name = ($field ? $adminer->fieldName($field, $rank) : "*");
|
||||
$name = ($field ? $adminer->fieldName($field, $rank) : ($val["fun"] ? "*" : $key));
|
||||
if ($name != "") {
|
||||
$rank++;
|
||||
$names[$key] = $name;
|
||||
$column = idf_escape($key);
|
||||
$href = remove_from_uri('(order|desc)[^=]*|page') . '&order%5B0%5D=' . urlencode($key);
|
||||
$desc = "&desc%5B0%5D=1";
|
||||
echo '<th onmouseover="columnMouse(this);" onmouseout="columnMouse(this, \' hidden\');">';
|
||||
echo "<th id='th[" . h(bracket_escape($key)) . "]'>" . script("mixin(qsl('th'), {onmouseover: partial(columnMouse), onmouseout: partial(columnMouse, ' hidden')});", "");
|
||||
echo '<a href="' . h($href . ($order[0] == $column || $order[0] == $key || (!$order && $is_group && $group[0] == $column) ? $desc : '')) . '">'; // $order[0] == $key - COUNT(*)
|
||||
echo (!$select || $val ? apply_sql_function($val["fun"], $name) : h(current($select))) . "</a>"; //! columns looking like functions
|
||||
echo apply_sql_function($val["fun"], $name) . "</a>"; //! columns looking like functions
|
||||
echo "<span class='column hidden'>";
|
||||
echo "<a href='" . h($href . $desc) . "' title='" . lang('descending') . "' class='text'> ↓</a>";
|
||||
if (!$val["fun"]) {
|
||||
echo '<a href="#fieldset-search" onclick="selectSearch(\'' . h(js_escape($key)) . '\'); return false;" title="' . lang('Search') . '" class="text jsonly"> =</a>';
|
||||
echo '<a href="#fieldset-search" title="' . lang('Search') . '" class="text jsonly"> =</a>';
|
||||
echo script("qsl('a').onclick = partial(selectSearch, '" . js_escape($key) . "');");
|
||||
}
|
||||
echo "</span>";
|
||||
}
|
||||
@@ -313,6 +346,7 @@ if (!$columns) {
|
||||
next($select);
|
||||
}
|
||||
}
|
||||
|
||||
$lengths = array();
|
||||
if ($_GET["modify"]) {
|
||||
foreach ($rows as $row) {
|
||||
@@ -321,166 +355,231 @@ if (!$columns) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo ($backward_keys ? "<th>" . lang('Relations') : "") . "</thead>\n";
|
||||
|
||||
if (is_ajax()) {
|
||||
if ($limit % 2 == 1 && $page % 2 == 1) {
|
||||
odd();
|
||||
}
|
||||
ob_end_clean();
|
||||
}
|
||||
|
||||
foreach ($adminer->rowDescriptions($rows, $foreign_keys) as $n => $row) {
|
||||
$unique_array = unique_array($rows[$n], $indexes);
|
||||
if (!$unique_array) {
|
||||
$unique_array = array();
|
||||
foreach ($rows[$n] as $key => $val) {
|
||||
if (!preg_match('~^(COUNT\((\*|(DISTINCT )?`(?:[^`]|``)+`)\)|(AVG|GROUP_CONCAT|MAX|MIN|SUM)\(`(?:[^`]|``)+`\))$~', $key)) { //! columns looking like functions
|
||||
$unique_array[$key] = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
$unique_idf = "";
|
||||
foreach ($unique_array as $key => $val) {
|
||||
$unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val) : "null%5B%5D=" . urlencode($key));
|
||||
if (($jush == "sql" || $jush == "pgsql") && preg_match('~char|text|enum|set~', $fields[$key]["type"]) && strlen($val) > 64) {
|
||||
$key = (strpos($key, '(') ? $key : idf_escape($key)); //! columns looking like functions
|
||||
$key = "MD5(" . ($jush != 'sql' || preg_match("~^utf8~", $fields[$key]["collation"]) ? $key : "CONVERT($key USING " . charset($connection) . ")") . ")";
|
||||
$val = md5($val);
|
||||
}
|
||||
$unique_idf .= "&" . ($val !== null ? urlencode("where[" . bracket_escape($key) . "]") . "=" . urlencode($val === false ? "f" : $val) : "null%5B%5D=" . urlencode($key));
|
||||
}
|
||||
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>" . checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]), "", "this.form['all'].checked = false; formUncheck('all-page');") . ($is_group || information_schema(DB) ? "" : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "'>" . lang('edit') . "</a>"));
|
||||
echo "<tr" . odd() . ">" . (!$group && $select ? "" : "<td>"
|
||||
. checkbox("check[]", substr($unique_idf, 1), in_array(substr($unique_idf, 1), (array) $_POST["check"]))
|
||||
. ($is_group || information_schema(DB) ? "" : " <a href='" . h(ME . "edit=" . urlencode($TABLE) . $unique_idf) . "' class='edit'>" . lang('edit') . "</a>")
|
||||
);
|
||||
|
||||
foreach ($row as $key => $val) {
|
||||
if (isset($names[$key])) {
|
||||
$field = $fields[$key];
|
||||
$val = $driver->value($val, $field);
|
||||
if ($val != "" && (!isset($email_fields[$key]) || $email_fields[$key] != "")) {
|
||||
$email_fields[$key] = (is_mail($val) ? $names[$key] : ""); //! filled e-mails can be contained on other pages
|
||||
}
|
||||
|
||||
$link = "";
|
||||
$val = $adminer->editVal($val, $field);
|
||||
if ($val !== null) {
|
||||
if (ereg('blob|bytea|raw|file', $field["type"]) && $val != "") {
|
||||
$link = ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf;
|
||||
}
|
||||
if ($val === "") { // === - may be int
|
||||
$val = " ";
|
||||
} elseif (is_utf8($val)) {
|
||||
if ($text_length != "" && is_shortable($field)) {
|
||||
$val = shorten_utf8($val, max(0, +$text_length)); // usage of LEFT() would reduce traffic but complicate query - expected average speedup: .001 s VS .01 s on local network
|
||||
} else {
|
||||
$val = h($val);
|
||||
}
|
||||
}
|
||||
|
||||
if (!$link) { // link related items
|
||||
foreach ((array) $foreign_keys[$key] as $foreign_key) {
|
||||
if (count($foreign_keys[$key]) == 1 || end($foreign_key["source"]) == $key) {
|
||||
$link = "";
|
||||
foreach ($foreign_key["source"] as $i => $source) {
|
||||
$link .= where_link($i, $foreign_key["target"][$i], $rows[$n][$source]);
|
||||
}
|
||||
$link = ($foreign_key["db"] != "" ? preg_replace('~([?&]db=)[^&]+~', '\\1' . urlencode($foreign_key["db"]), ME) : ME) . 'select=' . urlencode($foreign_key["table"]) . $link; // InnoDB supports non-UNIQUE keys
|
||||
if (count($foreign_key["source"]) == 1) {
|
||||
break;
|
||||
}
|
||||
if (preg_match('~blob|bytea|raw|file~', $field["type"]) && $val != "") {
|
||||
$link = ME . 'download=' . urlencode($TABLE) . '&field=' . urlencode($key) . $unique_idf;
|
||||
}
|
||||
if (!$link && $val !== null) { // link related items
|
||||
foreach ((array) $foreign_keys[$key] as $foreign_key) {
|
||||
if (count($foreign_keys[$key]) == 1 || end($foreign_key["source"]) == $key) {
|
||||
$link = "";
|
||||
foreach ($foreign_key["source"] as $i => $source) {
|
||||
$link .= where_link($i, $foreign_key["target"][$i], $rows[$n][$source]);
|
||||
}
|
||||
$link = ($foreign_key["db"] != "" ? preg_replace('~([?&]db=)[^&]+~', '\1' . urlencode($foreign_key["db"]), ME) : ME) . 'select=' . urlencode($foreign_key["table"]) . $link; // InnoDB supports non-UNIQUE keys
|
||||
if ($foreign_key["ns"]) {
|
||||
$link = preg_replace('~([?&]ns=)[^&]+~', '\1' . urlencode($foreign_key["ns"]), $link);
|
||||
}
|
||||
if (count($foreign_key["source"]) == 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($key == "COUNT(*)") { //! columns looking like functions
|
||||
$link = ME . "select=" . urlencode($TABLE);
|
||||
$i = 0;
|
||||
foreach ((array) $_GET["where"] as $v) {
|
||||
if (!array_key_exists($v["col"], $unique_array)) {
|
||||
$link .= where_link($i++, $v["col"], $v["val"], $v["op"]);
|
||||
}
|
||||
}
|
||||
foreach ($unique_array as $k => $v) {
|
||||
$link .= where_link($i++, $k, $v);
|
||||
}
|
||||
if ($key == "COUNT(*)") { //! columns looking like functions
|
||||
$link = ME . "select=" . urlencode($TABLE);
|
||||
$i = 0;
|
||||
foreach ((array) $_GET["where"] as $v) {
|
||||
if (!array_key_exists($v["col"], $unique_array)) {
|
||||
$link .= where_link($i++, $v["col"], $v["val"], $v["op"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!$link) {
|
||||
if (is_mail($val)) {
|
||||
$link = "mailto:$val";
|
||||
}
|
||||
if ($protocol = is_url($row[$key])) {
|
||||
$link = ($protocol == "http" && $HTTPS
|
||||
? $row[$key] // HTTP links from HTTPS pages don't receive Referer automatically
|
||||
: "$protocol://www.adminer.org/redirect/?url=" . urlencode($row[$key]) // intermediate page to hide Referer, may be changed to rel="noreferrer" in HTML5
|
||||
);
|
||||
foreach ($unique_array as $k => $v) {
|
||||
$link .= where_link($i++, $k, $v);
|
||||
}
|
||||
}
|
||||
|
||||
$val = select_value($val, $link, $field, $text_length);
|
||||
$id = h("val[$unique_idf][" . bracket_escape($key) . "]");
|
||||
$value = $_POST["val"][$unique_idf][bracket_escape($key)];
|
||||
$h_value = h($value !== null ? $value : $row[$key]);
|
||||
$long = strpos($val, "<i>...</i>");
|
||||
$editable = is_utf8($val) && $rows[$n][$key] == $row[$key] && !$functions[$key];
|
||||
$text = ereg('text|lob', $field["type"]);
|
||||
echo (($_GET["modify"] && $editable) || $value !== null
|
||||
? "<td>" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "'>$h_value</textarea>" : "<input name='$id' value='$h_value' size='$lengths[$key]'>")
|
||||
: "<td id='$id' onclick=\"selectClick(this, event, " . ($long ? 2 : ($text ? 1 : 0)) . ($editable ? "" : ", '" . h(lang('Use edit link to modify this value.')) . "'") . ");\">" . $adminer->selectVal($val, $link, $field)
|
||||
);
|
||||
$editable = !is_array($row[$key]) && is_utf8($val) && $rows[$n][$key] == $row[$key] && !$functions[$key];
|
||||
$text = preg_match('~text|lob~', $field["type"]);
|
||||
echo "<td id='$id'";
|
||||
if (($_GET["modify"] && $editable) || $value !== null) {
|
||||
$h_value = h($value !== null ? $value : $row[$key]);
|
||||
echo ">" . ($text ? "<textarea name='$id' cols='30' rows='" . (substr_count($row[$key], "\n") + 1) . "'>$h_value</textarea>" : "<input name='$id' value='$h_value' size='$lengths[$key]'>");
|
||||
} else {
|
||||
$long = strpos($val, "<i>…</i>");
|
||||
echo " data-text='" . ($long ? 2 : ($text ? 1 : 0)) . "'"
|
||||
. ($editable ? "" : " data-warning='" . h(lang('Use edit link to modify this value.')) . "'")
|
||||
. ">$val</td>"
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($backward_keys) {
|
||||
echo "<td>";
|
||||
}
|
||||
$adminer->backwardKeysPrint($backward_keys, $rows[$n]);
|
||||
echo "</tr>\n"; // close to allow white-space: pre
|
||||
}
|
||||
|
||||
if (is_ajax()) {
|
||||
exit;
|
||||
}
|
||||
echo "</table>\n";
|
||||
echo (!$group && $select ? "" : "<script type='text/javascript'>tableCheck();</script>\n");
|
||||
echo "</div>\n";
|
||||
}
|
||||
|
||||
if (($rows || $page) && !is_ajax()) {
|
||||
$exact_count = true;
|
||||
if ($_GET["page"] != "last" && +$limit && !$is_group && ($found_rows >= $limit || $page)) {
|
||||
$found_rows = found_rows($table_status, $where);
|
||||
if ($found_rows < max(1e4, 2 * ($page + 1) * $limit)) {
|
||||
// slow with big tables
|
||||
$found_rows = reset(slow_query("SELECT COUNT(*) FROM " . table($TABLE) . ($where ? " WHERE " . implode(" AND ", $where) : "")));
|
||||
} else {
|
||||
$exact_count = false;
|
||||
|
||||
if (!is_ajax()) {
|
||||
if ($rows || $page) {
|
||||
$exact_count = true;
|
||||
if ($_GET["page"] != "last") {
|
||||
if ($limit == "" || (count($rows) < $limit && ($rows || !$page))) {
|
||||
$found_rows = ($page ? $page * $limit : 0) + count($rows);
|
||||
} elseif ($jush != "sql" || !$is_group) {
|
||||
$found_rows = ($is_group ? false : found_rows($table_status, $where));
|
||||
if ($found_rows < max(1e4, 2 * ($page + 1) * $limit)) {
|
||||
// slow with big tables
|
||||
$found_rows = reset(slow_query(count_rows($TABLE, $where, $is_group, $group)));
|
||||
} else {
|
||||
$exact_count = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$pagination = ($limit != "" && ($found_rows === false || $found_rows > $limit || $page));
|
||||
if ($pagination) {
|
||||
echo (($found_rows === false ? count($rows) + 1 : $found_rows - $page * $limit) > $limit
|
||||
? '<p><a href="' . h(remove_from_uri("page") . "&page=" . ($page + 1)) . '" class="loadmore">' . lang('Load more data') . '</a>'
|
||||
. script("qsl('a').onclick = partial(selectLoadMore, " . (+$limit) . ", '" . lang('Loading') . "…');", "")
|
||||
: ''
|
||||
);
|
||||
echo "\n";
|
||||
}
|
||||
}
|
||||
echo "<p class='pages'>";
|
||||
if (+$limit && ($found_rows === false || $found_rows > $limit)) {
|
||||
// display first, previous 4, next 4 and last page
|
||||
$max_page = ($found_rows === false
|
||||
? $page + (count($rows) >= $limit ? 2 : 1)
|
||||
: floor(($found_rows - 1) / $limit)
|
||||
);
|
||||
echo '<a href="' . h(remove_from_uri("page")) . "\" onclick=\"pageClick(this.href, +prompt('" . lang('Page') . "', '" . ($page + 1) . "'), event); return false;\">" . lang('Page') . "</a>:";
|
||||
echo pagination(0, $page) . ($page > 5 ? " ..." : "");
|
||||
for ($i = max(1, $page - 4); $i < min($max_page, $page + 5); $i++) {
|
||||
echo pagination($i, $page);
|
||||
}
|
||||
echo ($page + 5 < $max_page ? " ..." : "") . ($exact_count && $found_rows !== false ? pagination($max_page, $page) : ' <a href="' . h(remove_from_uri("page") . "&page=last") . '">' . lang('last') . "</a>");
|
||||
}
|
||||
echo ($found_rows !== false ? " (" . ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) . ")" : "");
|
||||
echo (+$limit && ($found_rows === false ? count($rows) + 1 : $found_rows - $page * $limit) > $limit ? ' <a href="' . h(remove_from_uri("page") . "&page=" . ($page + 1)) . '" onclick="return !selectLoadMore(this, ' . (+$limit) . ', \'' . lang('Loading') . '\');">' . lang('Load more data') . '</a>' : '');
|
||||
echo " " . checkbox("all", 1, 0, lang('whole result')) . "\n";
|
||||
|
||||
if ($adminer->selectCommandPrint()) {
|
||||
?>
|
||||
<fieldset><legend><?php echo lang('Edit'); ?></legend><div>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>"<?php echo ($_GET["modify"] ? '' : ' title="' . lang('Ctrl+click on a value to modify it.') . '" class="jsonly"'); ?>>
|
||||
echo "<div class='footer'><div>\n";
|
||||
if ($rows || $page) {
|
||||
if ($pagination) {
|
||||
// display first, previous 4, next 4 and last page
|
||||
$max_page = ($found_rows === false
|
||||
? $page + (count($rows) >= $limit ? 2 : 1)
|
||||
: floor(($found_rows - 1) / $limit)
|
||||
);
|
||||
echo "<fieldset>";
|
||||
if ($jush != "simpledb") {
|
||||
echo "<legend><a href='" . h(remove_from_uri("page")) . "'>" . lang('Page') . "</a></legend>";
|
||||
echo script("qsl('a').onclick = function () { pageClick(this.href, +prompt('" . lang('Page') . "', '" . ($page + 1) . "')); return false; };");
|
||||
echo pagination(0, $page) . ($page > 5 ? " …" : "");
|
||||
for ($i = max(1, $page - 4); $i < min($max_page, $page + 5); $i++) {
|
||||
echo pagination($i, $page);
|
||||
}
|
||||
if ($max_page > 0) {
|
||||
echo ($page + 5 < $max_page ? " …" : "");
|
||||
echo ($exact_count && $found_rows !== false
|
||||
? pagination($max_page, $page)
|
||||
: " <a href='" . h(remove_from_uri("page") . "&page=last") . "' title='~$max_page'>" . lang('last') . "</a>"
|
||||
);
|
||||
}
|
||||
} else {
|
||||
echo "<legend>" . lang('Page') . "</legend>";
|
||||
echo pagination(0, $page) . ($page > 1 ? " …" : "");
|
||||
echo ($page ? pagination($page, $page) : "");
|
||||
echo ($max_page > $page ? pagination($page + 1, $page) . ($max_page > $page + 1 ? " …" : "") : "");
|
||||
}
|
||||
echo "</fieldset>\n";
|
||||
}
|
||||
|
||||
echo "<fieldset>";
|
||||
echo "<legend>" . lang('Whole result') . "</legend>";
|
||||
$display_rows = ($exact_count ? "" : "~ ") . $found_rows;
|
||||
echo checkbox("all", 1, 0, ($found_rows !== false ? ($exact_count ? "" : "~ ") . lang('%d row(s)', $found_rows) : ""), "var checked = formChecked(this, /check/); selectCount('selected', this.checked ? '$display_rows' : checked); selectCount('selected2', this.checked || !checked ? '$display_rows' : checked);") . "\n";
|
||||
echo "</fieldset>\n";
|
||||
|
||||
if ($adminer->selectCommandPrint()) {
|
||||
?>
|
||||
<fieldset<?php echo ($_GET["modify"] ? '' : ' class="jsonly"'); ?>><legend><?php echo lang('Modify'); ?></legend><div>
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>"<?php echo ($_GET["modify"] ? '' : ' title="' . lang('Ctrl+click on a value to modify it.') . '"'); ?>>
|
||||
</div></fieldset>
|
||||
<fieldset><legend><?php echo lang('Selected'); ?> <span id="selected"></span></legend><div>
|
||||
<input type="submit" name="edit" value="<?php echo lang('Edit'); ?>">
|
||||
<input type="submit" name="clone" value="<?php echo lang('Clone'); ?>">
|
||||
<input type="submit" name="delete" value="<?php echo lang('Delete'); ?>" onclick="return confirm('<?php echo lang('Are you sure?'); ?> (' + (this.form['all'].checked ? <?php echo $found_rows; ?> : formChecked(this, /check/)) + ')');">
|
||||
<input type="submit" name="delete" value="<?php echo lang('Delete'); ?>"><?php echo confirm(); ?>
|
||||
</div></fieldset>
|
||||
<?php
|
||||
}
|
||||
|
||||
$format = $adminer->dumpFormat();
|
||||
foreach ((array) $_GET["columns"] as $column) {
|
||||
if ($column["fun"]) {
|
||||
unset($format['sql']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($format) {
|
||||
print_fieldset("export", lang('Export') . " <span id='selected2'></span>");
|
||||
$output = $adminer->dumpOutput();
|
||||
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
||||
echo html_select("format", $format, $adminer_import["format"]);
|
||||
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
$adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
|
||||
}
|
||||
$format = $adminer->dumpFormat();
|
||||
if ($format) {
|
||||
print_fieldset("export", lang('Export'));
|
||||
$output = $adminer->dumpOutput();
|
||||
echo ($output ? html_select("output", $output, $adminer_import["output"]) . " " : "");
|
||||
echo html_select("format", $format, $adminer_import["format"]);
|
||||
echo " <input type='submit' name='export' value='" . lang('Export') . "'>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
|
||||
echo "</div></div>\n";
|
||||
|
||||
if ($adminer->selectImportPrint()) {
|
||||
echo "<div>";
|
||||
echo "<a href='#import'>" . lang('Import') . "</a>";
|
||||
echo script("qsl('a').onclick = partial(toggle, 'import');", "");
|
||||
echo "<span id='import' class='hidden'>: ";
|
||||
echo "<input type='file' name='csv_file'> ";
|
||||
echo html_select("separator", array("csv" => "CSV,", "csv;" => "CSV;", "tsv" => "TSV"), $adminer_import["format"], 1); // 1 - select
|
||||
echo " <input type='submit' name='import' value='" . lang('Import') . "'>";
|
||||
echo "</span>";
|
||||
echo "</div>";
|
||||
}
|
||||
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
echo "</form>\n";
|
||||
echo (!$group && $select ? "" : script("tableCheck();"));
|
||||
}
|
||||
if ($adminer->selectImportPrint()) {
|
||||
print_fieldset("import", lang('Import'), !$rows);
|
||||
echo "<input type='file' name='csv_file'> ";
|
||||
echo html_select("separator", array("csv" => "CSV,", "csv;" => "CSV;", "tsv" => "TSV"), $adminer_import["format"], 1); // 1 - select
|
||||
echo " <input type='submit' name='import' value='" . lang('Import') . "'>";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
|
||||
$adminer->selectEmailPrint(array_filter($email_fields, 'strlen'), $columns);
|
||||
|
||||
echo "<p><input type='hidden' name='token' value='$token'></p>\n";
|
||||
echo "</form>\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
$SEQUENCE = $_GET["sequence"];
|
||||
$row = $_POST;
|
||||
|
||||
if ($_POST && !$error) {
|
||||
$link = substr(ME, 0, -1);
|
||||
$name = trim($_POST["name"]);
|
||||
$name = trim($row["name"]);
|
||||
if ($_POST["drop"]) {
|
||||
query_redirect("DROP SEQUENCE " . idf_escape($SEQUENCE), $link, lang('Sequence has been dropped.'));
|
||||
} elseif ($SEQUENCE == "") {
|
||||
@@ -17,18 +18,17 @@ if ($_POST && !$error) {
|
||||
|
||||
page_header($SEQUENCE != "" ? lang('Alter sequence') . ": " . h($SEQUENCE) : lang('Create sequence'), $error);
|
||||
|
||||
$row = $_POST;
|
||||
if (!$row) {
|
||||
$row = array("name" => $SEQUENCE);
|
||||
$row["name"] = $SEQUENCE;
|
||||
}
|
||||
?>
|
||||
|
||||
<form action="" method="post">
|
||||
<p><input name="name" value="<?php echo h($row["name"]); ?>">
|
||||
<p><input name="name" value="<?php echo h($row["name"]); ?>" autocapitalize="off">
|
||||
<input type="submit" value="<?php echo lang('Save'); ?>">
|
||||
<?php
|
||||
if ($SEQUENCE != "") {
|
||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'" . confirm() . ">\n";
|
||||
echo "<input type='submit' name='drop' value='" . lang('Drop') . "'>" . confirm(lang('Drop %s?', $SEQUENCE)) . "\n";
|
||||
}
|
||||
?>
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
|
||||
@@ -14,51 +14,59 @@ if (!$error && $_POST["clear"]) {
|
||||
redirect(remove_from_uri("history"));
|
||||
}
|
||||
|
||||
page_header(lang('SQL command'), $error);
|
||||
page_header((isset($_GET["import"]) ? lang('Import') : lang('SQL command')), $error);
|
||||
|
||||
if (!$error && $_POST) {
|
||||
$fp = false;
|
||||
$query = $_POST["query"];
|
||||
if ($_POST["webfile"]) {
|
||||
$fp = @fopen((file_exists("adminer.sql") ? "adminer.sql"
|
||||
: (file_exists("adminer.sql.gz") ? "compress.zlib://adminer.sql.gz"
|
||||
: "compress.bzip2://adminer.sql.bz2"
|
||||
)), "rb");
|
||||
if (!isset($_GET["import"])) {
|
||||
$query = $_POST["query"];
|
||||
} elseif ($_POST["webfile"]) {
|
||||
$sql_file_path = $adminer->importServerPath();
|
||||
$fp = @fopen((file_exists($sql_file_path)
|
||||
? $sql_file_path
|
||||
: "compress.zlib://$sql_file_path.gz"
|
||||
), "rb");
|
||||
$query = ($fp ? fread($fp, 1e6) : false);
|
||||
} elseif ($_FILES && $_FILES["sql_file"]["error"] != UPLOAD_ERR_NO_FILE) {
|
||||
} else {
|
||||
$query = get_file("sql_file", true);
|
||||
}
|
||||
|
||||
if (is_string($query)) { // get_file() returns error as number, fread() as false
|
||||
if (function_exists('memory_get_usage')) {
|
||||
@ini_set("memory_limit", max(ini_bytes("memory_limit"), 2 * strlen($query) + memory_get_usage() + 8e6)); // @ - may be disabled, 2 - substr and trim, 8e6 - other variables
|
||||
}
|
||||
|
||||
if ($query != "" && strlen($query) < 1e6) { // don't add big queries
|
||||
$q = $query . (ereg(";[ \t\r\n]*\$", $query) ? "" : ";"); //! doesn't work with DELIMITER |
|
||||
$q = $query . (preg_match("~;[ \t\r\n]*\$~", $query) ? "" : ";"); //! doesn't work with DELIMITER |
|
||||
if (!$history || reset(end($history)) != $q) { // no repeated queries
|
||||
restart_session();
|
||||
$history[] = array($q, time());
|
||||
$history[] = array($q, time()); //! add elapsed time
|
||||
set_session("queries", $history_all); // required because reference is unlinked by stop_session()
|
||||
stop_session();
|
||||
}
|
||||
}
|
||||
$space = "(?:\\s|/\\*.*\\*/|(?:#|-- )[^\n]*\n|--\n)";
|
||||
|
||||
$space = "(?:\\s|/\\*[\s\S]*?\\*/|(?:#|-- )[^\n]*\n?|--\r?\n)";
|
||||
$delimiter = ";";
|
||||
$offset = 0;
|
||||
$empty = true;
|
||||
$connection2 = connect(); // connection for exploring indexes and EXPLAIN (to not replace FOUND_ROWS()) //! PDO - silent error
|
||||
if (is_object($connection2) && DB != "") {
|
||||
$connection2->select_db(DB);
|
||||
if ($_GET["ns"] != "") {
|
||||
set_schema($_GET["ns"], $connection2);
|
||||
}
|
||||
}
|
||||
$commands = 0;
|
||||
$errors = array();
|
||||
$line = 0;
|
||||
$parse = '[\'"' . ($jush == "sql" ? '`#' : ($jush == "sqlite" ? '`[' : ($jush == "mssql" ? '[' : ''))) . ']|/\\*|-- |$' . ($jush == "pgsql" ? '|\\$[^$]*\\$' : '');
|
||||
$total_start = microtime();
|
||||
$parse = '[\'"' . ($jush == "sql" ? '`#' : ($jush == "sqlite" ? '`[' : ($jush == "mssql" ? '[' : ''))) . ']|/\*|-- |$' . ($jush == "pgsql" ? '|\$[^$]*\$' : '');
|
||||
$total_start = microtime(true);
|
||||
parse_str($_COOKIE["adminer_export"], $adminer_export);
|
||||
$dump_format = $adminer->dumpFormat();
|
||||
unset($dump_format["sql"]);
|
||||
|
||||
while ($query != "") {
|
||||
if (!$offset && preg_match("~^$space*DELIMITER\\s+(\\S+)~i", $query, $match)) {
|
||||
if (!$offset && preg_match("~^$space*+DELIMITER\\s+(\\S+)~i", $query, $match)) {
|
||||
$delimiter = $match[1];
|
||||
$query = substr($query, strlen($match[0]));
|
||||
} else {
|
||||
@@ -71,8 +79,9 @@ if (!$error && $_POST) {
|
||||
break;
|
||||
}
|
||||
$offset = $pos + strlen($found);
|
||||
|
||||
if ($found && rtrim($found) != $delimiter) { // find matching quote or comment end
|
||||
while (preg_match('(' . ($found == '/*' ? '\\*/' : ($found == '[' ? ']' : (ereg('^-- |^#', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
||||
while (preg_match('(' . ($found == '/*' ? '\*/' : ($found == '[' ? ']' : (preg_match('~^-- |^#~', $found) ? "\n" : preg_quote($found) . "|\\\\."))) . '|$)s', $query, $match, PREG_OFFSET_CAPTURE, $offset)) { //! respect sql_mode NO_BACKSLASH_ESCAPES
|
||||
$s = $match[0][0];
|
||||
if (!$s && $fp && !feof($fp)) {
|
||||
$query .= fread($fp, 1e5);
|
||||
@@ -83,82 +92,116 @@ if (!$error && $_POST) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else { // end of a query
|
||||
$empty = false;
|
||||
$q = substr($query, 0, $pos);
|
||||
$commands++;
|
||||
$print = "<pre id='sql-$commands'><code class='jush-$jush'>" . shorten_utf8(trim($q), 1000) . "</code></pre>\n";
|
||||
if (!$_POST["only_errors"]) {
|
||||
$print = "<pre id='sql-$commands'><code class='jush-$jush'>" . $adminer->sqlCommandQuery($q) . "</code></pre>\n";
|
||||
if ($jush == "sqlite" && preg_match("~^$space*+ATTACH\\b~i", $q, $match)) {
|
||||
// PHP doesn't support setting SQLITE_LIMIT_ATTACHED
|
||||
echo $print;
|
||||
ob_flush();
|
||||
flush(); // can take a long time - show the running query
|
||||
}
|
||||
$start = microtime(); // microtime(true) is available since PHP 5
|
||||
//! don't allow changing of character_set_results, convert encoding of displayed query
|
||||
if ($connection->multi_query($q) && is_object($connection2) && preg_match("~^$space*USE\\b~isU", $q)) {
|
||||
$connection2->query($q);
|
||||
}
|
||||
do {
|
||||
$result = $connection->store_result();
|
||||
$end = microtime();
|
||||
$time = format_time($start, $end) . (strlen($q) < 1000 ? " <a href='" . h(ME) . "sql=" . urlencode(trim($q)) . "'>" . lang('Edit') . "</a>" : ""); // 1000 - maximum length of encoded URL in IE is 2083 characters
|
||||
if ($connection->error) {
|
||||
echo ($_POST["only_errors"] ? $print : "");
|
||||
echo "<p class='error'>" . lang('Error in query') . ": " . error() . "\n";
|
||||
$errors[] = " <a href='#sql-$commands'>$commands</a>";
|
||||
if ($_POST["error_stops"]) {
|
||||
break 2;
|
||||
}
|
||||
} elseif (is_object($result)) {
|
||||
$orgtables = select($result, $connection2);
|
||||
if (!$_POST["only_errors"]) {
|
||||
echo "<form action='' method='post'>\n";
|
||||
echo "<p>" . ($result->num_rows ? lang('%d row(s)', $result->num_rows) : "") . $time;
|
||||
$id = "export-$commands";
|
||||
$export = ", <a href='#$id' onclick=\"return !toggle('$id');\">" . lang('Export') . "</a><span id='$id' class='hidden'>: "
|
||||
. html_select("output", $adminer->dumpOutput(), $adminer_export["output"]) . " "
|
||||
. html_select("format", $dump_format, $adminer_export["format"])
|
||||
. "<input type='hidden' name='query' value='" . h($q) . "'>"
|
||||
. " <input type='submit' name='export' value='" . lang('Export') . "'><input type='hidden' name='token' value='$token'></span>\n"
|
||||
;
|
||||
if ($connection2 && preg_match("~^($space|\\()*SELECT\\b~isU", $q) && ($explain = explain($connection2, $q))) {
|
||||
$id = "explain-$commands";
|
||||
echo ", <a href='#$id' onclick=\"return !toggle('$id');\">EXPLAIN</a>$export";
|
||||
echo "<div id='$id' class='hidden'>\n";
|
||||
select($explain, $connection2, ($jush == "sql" ? "http://dev.mysql.com/doc/refman/" . substr($connection->server_info, 0, 3) . "/en/explain-output.html#explain_" : ""), $orgtables);
|
||||
echo "</div>\n";
|
||||
} else {
|
||||
echo $export;
|
||||
}
|
||||
echo "</form>\n";
|
||||
}
|
||||
} else {
|
||||
if (preg_match("~^$space*(CREATE|DROP|ALTER)$space+(DATABASE|SCHEMA)\\b~isU", $q)) {
|
||||
restart_session();
|
||||
set_session("dbs", null); // clear cache
|
||||
stop_session();
|
||||
}
|
||||
if (!$_POST["only_errors"]) {
|
||||
echo "<p class='message' title='" . h($connection->info) . "'>" . lang('Query executed OK, %d row(s) affected.', $connection->affected_rows) . "$time\n";
|
||||
}
|
||||
echo "<p class='error'>" . lang('ATTACH queries are not supported.') . "\n";
|
||||
$errors[] = " <a href='#sql-$commands'>$commands</a>";
|
||||
if ($_POST["error_stops"]) {
|
||||
break;
|
||||
}
|
||||
$start = $end;
|
||||
} while ($connection->next_result());
|
||||
$line += substr_count($q.$found, "\n");
|
||||
} else {
|
||||
if (!$_POST["only_errors"]) {
|
||||
echo $print;
|
||||
ob_flush();
|
||||
flush(); // can take a long time - show the running query
|
||||
}
|
||||
$start = microtime(true);
|
||||
//! don't allow changing of character_set_results, convert encoding of displayed query
|
||||
if ($connection->multi_query($q) && is_object($connection2) && preg_match("~^$space*+USE\\b~i", $q)) {
|
||||
$connection2->query($q);
|
||||
}
|
||||
|
||||
do {
|
||||
$result = $connection->store_result();
|
||||
|
||||
if ($connection->error) {
|
||||
echo ($_POST["only_errors"] ? $print : "");
|
||||
echo "<p class='error'>" . lang('Error in query') . ($connection->errno ? " ($connection->errno)" : "") . ": " . error() . "\n";
|
||||
$errors[] = " <a href='#sql-$commands'>$commands</a>";
|
||||
if ($_POST["error_stops"]) {
|
||||
break 2;
|
||||
}
|
||||
|
||||
} else {
|
||||
$time = " <span class='time'>(" . format_time($start) . ")</span>"
|
||||
. (strlen($q) < 1000 ? " <a href='" . h(ME) . "sql=" . urlencode(trim($q)) . "'>" . lang('Edit') . "</a>" : "") // 1000 - maximum length of encoded URL in IE is 2083 characters
|
||||
;
|
||||
$affected = $connection->affected_rows; // getting warnigns overwrites this
|
||||
$warnings = ($_POST["only_errors"] ? "" : $driver->warnings());
|
||||
$warnings_id = "warnings-$commands";
|
||||
if ($warnings) {
|
||||
$time .= ", <a href='#$warnings_id'>" . lang('Warnings') . "</a>" . script("qsl('a').onclick = partial(toggle, '$warnings_id');", "");
|
||||
}
|
||||
$explain = null;
|
||||
$explain_id = "explain-$commands";
|
||||
if (is_object($result)) {
|
||||
$limit = $_POST["limit"];
|
||||
$orgtables = select($result, $connection2, array(), $limit);
|
||||
if (!$_POST["only_errors"]) {
|
||||
echo "<form action='' method='post'>\n";
|
||||
$num_rows = $result->num_rows;
|
||||
echo "<p>" . ($num_rows ? ($limit && $num_rows > $limit ? lang('%d / ', $limit) : "") . lang('%d row(s)', $num_rows) : "");
|
||||
echo $time;
|
||||
if ($connection2 && preg_match("~^($space|\\()*+SELECT\\b~i", $q) && ($explain = explain($connection2, $q))) {
|
||||
echo ", <a href='#$explain_id'>Explain</a>" . script("qsl('a').onclick = partial(toggle, '$explain_id');", "");
|
||||
}
|
||||
$id = "export-$commands";
|
||||
echo ", <a href='#$id'>" . lang('Export') . "</a>" . script("qsl('a').onclick = partial(toggle, '$id');", "") . "<span id='$id' class='hidden'>: "
|
||||
. html_select("output", $adminer->dumpOutput(), $adminer_export["output"]) . " "
|
||||
. html_select("format", $dump_format, $adminer_export["format"])
|
||||
. "<input type='hidden' name='query' value='" . h($q) . "'>"
|
||||
. " <input type='submit' name='export' value='" . lang('Export') . "'><input type='hidden' name='token' value='$token'></span>\n"
|
||||
. "</form>\n"
|
||||
;
|
||||
}
|
||||
|
||||
} else {
|
||||
if (preg_match("~^$space*+(CREATE|DROP|ALTER)$space++(DATABASE|SCHEMA)\\b~i", $q)) {
|
||||
restart_session();
|
||||
set_session("dbs", null); // clear cache
|
||||
stop_session();
|
||||
}
|
||||
if (!$_POST["only_errors"]) {
|
||||
echo "<p class='message' title='" . h($connection->info) . "'>" . lang('Query executed OK, %d row(s) affected.', $affected) . "$time\n";
|
||||
}
|
||||
}
|
||||
echo ($warnings ? "<div id='$warnings_id' class='hidden'>\n$warnings</div>\n" : "");
|
||||
if ($explain) {
|
||||
echo "<div id='$explain_id' class='hidden'>\n";
|
||||
select($explain, $connection2, $orgtables);
|
||||
echo "</div>\n";
|
||||
}
|
||||
}
|
||||
|
||||
$start = microtime(true);
|
||||
} while ($connection->next_result());
|
||||
}
|
||||
|
||||
$query = substr($query, $offset);
|
||||
$offset = 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($empty) {
|
||||
echo "<p class='message'>" . lang('No commands to execute.') . "\n";
|
||||
} elseif ($_POST["only_errors"]) {
|
||||
echo "<p class='message'>" . lang('%d query(s) executed OK.', $commands - count($errors)) . format_time($total_start, microtime()) . "\n";
|
||||
echo "<p class='message'>" . lang('%d query(s) executed OK.', $commands - count($errors));
|
||||
echo " <span class='time'>(" . format_time($total_start) . ")</span>\n";
|
||||
} elseif ($errors && $commands > 1) {
|
||||
echo "<p class='error'>" . lang('Error in query') . ": " . implode("", $errors) . "\n";
|
||||
}
|
||||
//! MS SQL - SET SHOWPLAN_ALL OFF
|
||||
|
||||
} else {
|
||||
echo "<p class='error'>" . upload_error($query) . "\n";
|
||||
}
|
||||
@@ -166,51 +209,60 @@ if (!$error && $_POST) {
|
||||
?>
|
||||
|
||||
<form action="" method="post" enctype="multipart/form-data" id="form">
|
||||
<p><?php
|
||||
$q = $_GET["sql"]; // overwrite $q from if ($_POST) to save memory
|
||||
if ($_POST) {
|
||||
$q = $_POST["query"];
|
||||
} elseif ($_GET["history"] == "all") {
|
||||
$q = $history;
|
||||
} elseif ($_GET["history"] != "") {
|
||||
$q = $history[$_GET["history"]][0];
|
||||
}
|
||||
textarea("query", $q, 20);
|
||||
echo ($_POST ? "" : "<script type='text/javascript'>document.getElementsByTagName('textarea')[0].focus();</script>\n");
|
||||
echo "<p>" . (ini_bool("file_uploads")
|
||||
? lang('File upload') . ': <input type="file" name="sql_file"' . ($_FILES && $_FILES["sql_file"]["error"] != 4 ? '' : ' onchange="this.form[\'only_errors\'].checked = true;"') . '> (< ' . ini_get("upload_max_filesize") . 'B)' // ignore post_max_size because it is for all form fields together and bytes computing would be necessary
|
||||
: lang('File uploads are disabled.')
|
||||
);
|
||||
|
||||
?>
|
||||
<p>
|
||||
<input type="submit" value="<?php echo lang('Execute'); ?>" title="Ctrl+Enter">
|
||||
<input type="hidden" name="token" value="<?php echo $token; ?>">
|
||||
<?php
|
||||
echo checkbox("error_stops", 1, $_POST["error_stops"], lang('Stop on error')) . "\n";
|
||||
echo checkbox("only_errors", 1, $_POST["only_errors"], lang('Show only errors')) . "\n";
|
||||
|
||||
print_fieldset("webfile", lang('From server'), $_POST["webfile"], "document.getElementById('form')['only_errors'].checked = true; ");
|
||||
$compress = array();
|
||||
foreach (array("gz" => "zlib", "bz2" => "bz2") as $key => $val) {
|
||||
if (extension_loaded($val)) {
|
||||
$compress[] = ".$key";
|
||||
$execute = "<input type='submit' value='" . lang('Execute') . "' title='Ctrl+Enter'>";
|
||||
if (!isset($_GET["import"])) {
|
||||
$q = $_GET["sql"]; // overwrite $q from if ($_POST) to save memory
|
||||
if ($_POST) {
|
||||
$q = $_POST["query"];
|
||||
} elseif ($_GET["history"] == "all") {
|
||||
$q = $history;
|
||||
} elseif ($_GET["history"] != "") {
|
||||
$q = $history[$_GET["history"]][0];
|
||||
}
|
||||
echo "<p>";
|
||||
textarea("query", $q, 20);
|
||||
echo script(($_POST ? "" : "qs('textarea').focus();\n") . "qs('#form').onsubmit = partial(sqlSubmit, qs('#form'), '" . js_escape(remove_from_uri("sql|limit|error_stops|only_errors|history")) . "');");
|
||||
echo "<p>$execute\n";
|
||||
echo lang('Limit rows') . ": <input type='number' name='limit' class='size' value='" . h($_POST ? $_POST["limit"] : $_GET["limit"]) . "'>\n";
|
||||
|
||||
} else {
|
||||
echo "<fieldset><legend>" . lang('File upload') . "</legend><div>";
|
||||
$gz = (extension_loaded("zlib") ? "[.gz]" : "");
|
||||
echo (ini_bool("file_uploads")
|
||||
? "SQL$gz (< " . ini_get("upload_max_filesize") . "B): <input type='file' name='sql_file[]' multiple>\n$execute" // ignore post_max_size because it is for all form fields together and bytes computing would be necessary
|
||||
: lang('File uploads are disabled.')
|
||||
);
|
||||
echo "</div></fieldset>\n";
|
||||
$importServerPath = $adminer->importServerPath();
|
||||
if ($importServerPath) {
|
||||
echo "<fieldset><legend>" . lang('From server') . "</legend><div>";
|
||||
echo lang('Webserver file %s', "<code>" . h($importServerPath) . "$gz</code>");
|
||||
echo ' <input type="submit" name="webfile" value="' . lang('Run file') . '">';
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
echo "<p>";
|
||||
}
|
||||
echo lang('Webserver file %s', "<code>adminer.sql" . ($compress ? "[" . implode("|", $compress) . "]" : "") . "</code>");
|
||||
echo ' <input type="submit" name="webfile" value="' . lang('Run file') . '">';
|
||||
echo "</div></fieldset>\n";
|
||||
|
||||
if ($history) {
|
||||
echo checkbox("error_stops", 1, ($_POST ? $_POST["error_stops"] : isset($_GET["import"]) || $_GET["error_stops"]), lang('Stop on error')) . "\n";
|
||||
echo checkbox("only_errors", 1, ($_POST ? $_POST["only_errors"] : isset($_GET["import"]) || $_GET["only_errors"]), lang('Show only errors')) . "\n";
|
||||
echo "<input type='hidden' name='token' value='$token'>\n";
|
||||
|
||||
if (!isset($_GET["import"]) && $history) {
|
||||
print_fieldset("history", lang('History'), $_GET["history"] != "");
|
||||
foreach ($history as $key => $val) {
|
||||
list($q, $time) = $val;
|
||||
echo '<a href="' . h(ME . "sql=&history=$key") . '">' . lang('Edit') . "</a> <span class='time' title='" . @date('Y-m-d', $time) . "'>" . @date("H:i:s", $time) . "</span> <code class='jush-$jush'>" . shorten_utf8(ltrim(str_replace("\n", " ", str_replace("\r", "", preg_replace('~^(#|-- ).*~m', '', $q)))), 80, "</code>") . "<br>\n"; // @ - time zone may be not set
|
||||
for ($val = end($history); $val; $val = prev($history)) { // not array_reverse() to save memory
|
||||
$key = key($history);
|
||||
list($q, $time, $elapsed) = $val;
|
||||
echo '<a href="' . h(ME . "sql=&history=$key") . '">' . lang('Edit') . "</a>"
|
||||
. " <span class='time' title='" . @date('Y-m-d', $time) . "'>" . @date("H:i:s", $time) . "</span>" // @ - time zone may be not set
|
||||
. " <code class='jush-$jush'>" . shorten_utf8(ltrim(str_replace("\n", " ", str_replace("\r", "", preg_replace('~^(#|-- ).*~m', '', $q)))), 80, "</code>")
|
||||
. ($elapsed ? " <span class='time'>($elapsed)</span>" : "")
|
||||
. "<br>\n"
|
||||
;
|
||||
}
|
||||
echo "<input type='submit' name='clear' value='" . lang('Clear') . "'>\n";
|
||||
echo "<a href='" . h(ME . "sql=&history=all") . "'>" . lang('Edit all') . "</a>\n";
|
||||
echo "</div></fieldset>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
</form>
|
||||
|
||||
11
adminer/sqlite.php
Normal file
11
adminer/sqlite.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
function adminer_object() {
|
||||
include_once "../plugins/plugin.php";
|
||||
include_once "../plugins/login-password-less.php";
|
||||
return new AdminerPlugin(array(
|
||||
// TODO: inline the result of password_hash() so that the password is not visible in source codes
|
||||
new AdminerLoginPasswordLess(password_hash("YOUR_PASSWORD_HERE", PASSWORD_DEFAULT)),
|
||||
));
|
||||
}
|
||||
|
||||
include "./index.php";
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 74 B After Width: | Height: | Size: 82 B |
@@ -1,18 +1,20 @@
|
||||
/** @author Ondrej Valka, http://valka.info */
|
||||
body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; }
|
||||
a { color: blue; }
|
||||
body { color: #000; background: #fff; font: 90%/1.25 Verdana, Arial, Helvetica, sans-serif; margin: 0; width: -moz-fit-content; width: fit-content; }
|
||||
a { color: blue; text-decoration: none; }
|
||||
a:visited { color: navy; }
|
||||
a:hover { color: red; }
|
||||
a.text { text-decoration: none; }
|
||||
a:link:hover, a:visited:hover { color: red; text-decoration: underline; }
|
||||
a.text:hover { text-decoration: none; }
|
||||
a.jush-help:hover { color: inherit; }
|
||||
h1 { font-size: 150%; margin: 0; padding: .8em 1em; border-bottom: 1px solid #999; font-weight: normal; color: #777; background: #eee; }
|
||||
h2 { font-size: 150%; margin: 0 0 20px -18px; padding: .8em 1em; border-bottom: 1px solid #000; color: #000; font-weight: normal; background: #ddf; }
|
||||
h3 { font-weight: normal; font-size: 130%; margin: 1em 0 0; }
|
||||
form { margin: 0; }
|
||||
table { margin: 1em 20px 0 0; border: 0; border-top: 1px solid #999; border-left: 1px solid #999; font-size: 90%; }
|
||||
td, th { border: 0; border-right: 1px solid #999; border-bottom: 1px solid #999; padding: .2em .3em; }
|
||||
td table { width: 100%; margin: 0; }
|
||||
table { margin: 1em 20px 0 0; border-collapse: collapse; font-size: 90%; }
|
||||
td, th { border: 1px solid #999; padding: .2em .3em; }
|
||||
th { background: #eee; text-align: left; }
|
||||
thead th { text-align: center; padding: .2em .5em; }
|
||||
thead td, thead th { background: #ddf; }
|
||||
thead td, thead th { background: #ddf; } /* position: sticky; causes Firefox to lose borders */
|
||||
fieldset { display: inline; vertical-align: top; padding: .5em .8em; margin: .8em .5em 0 0; border: 1px solid #999; }
|
||||
p { margin: .8em 20px 0 0; }
|
||||
img { vertical-align: middle; border: 0; }
|
||||
@@ -20,39 +22,55 @@ td img { max-width: 200px; max-height: 200px; }
|
||||
code { background: #eee; }
|
||||
tbody tr:hover td, tbody tr:hover th { background: #eee; }
|
||||
pre { margin: 1em 0 0; }
|
||||
input[type=image] { vertical-align: middle; }
|
||||
pre, textarea { font: 100%/1.25 monospace; }
|
||||
input { vertical-align: middle; }
|
||||
input.default { box-shadow: 1px 1px 1px #777; }
|
||||
input.required { box-shadow: 1px 1px 1px red; }
|
||||
input.maxlength { box-shadow: 1px 1px 1px red; }
|
||||
input.wayoff { left: -1000px; position: absolute; }
|
||||
.block { display: block; }
|
||||
.version { color: #777; font-size: 67%; }
|
||||
.js .hidden, .nojs .jsonly { display: none; }
|
||||
.js .column { position: absolute; background: #ddf; padding: .3em 1ex .3em 0; margin-top: -.3em; }
|
||||
.nowrap td, .nowrap th, td.nowrap { white-space: pre; }
|
||||
.js .column { position: absolute; background: #ddf; padding: .27em 1ex .3em 0; margin-top: -.27em; }
|
||||
.nowrap td, .nowrap th, td.nowrap, p.nowrap { white-space: pre; }
|
||||
.wrap td { white-space: normal; }
|
||||
.error { color: red; background: #fee; }
|
||||
.error b { background: #fff; font-weight: normal; }
|
||||
.message { color: green; background: #efe; }
|
||||
.message table { color: #000; background: #fff; }
|
||||
.error, .message { padding: .5em .8em; margin: 1em 20px 0 0; }
|
||||
.char { color: #007F00; }
|
||||
.date { color: #7F007F; }
|
||||
.enum { color: #007F7F; }
|
||||
.binary { color: red; }
|
||||
.odd td { background: #F5F5F5; }
|
||||
.js .checked td, .js .checked th { background: #ddf; }
|
||||
.js .checkable .checked td, .js .checkable .checked th { background: #ddf; }
|
||||
.time { color: silver; font-size: 70%; }
|
||||
.function { text-align: right; }
|
||||
.number { text-align: right; }
|
||||
.datetime { text-align: right; }
|
||||
.type { width: 15ex; width: auto\9; }
|
||||
.options select { width: 20ex; width: auto\9; }
|
||||
.view { font-style: italic; }
|
||||
.active { font-weight: bold; }
|
||||
.sqlarea { width: 98%; }
|
||||
.icon { width: 18px; height: 18px; }
|
||||
.icon { width: 18px; height: 18px; background-color: navy; }
|
||||
.icon:hover { background-color: red; }
|
||||
.size { width: 6ex; }
|
||||
.help { cursor: help; }
|
||||
.footer { position: sticky; bottom: 0; margin-right: -20px; border-top: 20px solid rgba(255, 255, 255, .7); border-image: linear-gradient(rgba(255, 255, 255, .2), #fff) 100% 0; }
|
||||
.footer > div { background: #fff; padding: 0 0 .5em; }
|
||||
.footer fieldset { margin-top: 0; }
|
||||
.links a { white-space: nowrap; margin-right: 20px; }
|
||||
.logout { margin-top: .5em; position: absolute; top: 0; right: 0; }
|
||||
.loadmore { margin-left: 1ex; }
|
||||
/* .edit used in designs */
|
||||
#menu { position: absolute; margin: 10px 0 0; padding: 0 0 30px 0; top: 2em; left: 0; width: 19em; }
|
||||
#menu p { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
||||
#menu p, #logins, #tables { padding: .8em 1em; margin: 0; border-bottom: 1px solid #ccc; }
|
||||
#logins li, #tables li { list-style: none; }
|
||||
#dbs { overflow: hidden; }
|
||||
#logins, #tables { white-space: nowrap; overflow: auto; }
|
||||
#logins a, #tables a { background: #fff; }
|
||||
#logout { background: none; border: none; color: blue; font: inherit; padding: 0; text-decoration: underline; cursor: pointer; }
|
||||
#logout:hover { color: red; }
|
||||
#logins a, #tables a, #tables span { background: #fff; }
|
||||
#content { margin: 2em 0 0 21em; padding: 10px 20px 20px 0; }
|
||||
#lang { position: absolute; top: 0; left: 0; line-height: 1.8em; padding: .3em 1em; }
|
||||
#breadcrumb { white-space: nowrap; position: absolute; top: 0; left: 21em; background: #eee; height: 2em; line-height: 1.8em; padding: 0 1em; margin: 0 0 0 -18px; }
|
||||
@@ -61,13 +79,28 @@ input[type=image] { vertical-align: middle; }
|
||||
#schema { margin-left: 60px; position: relative; -moz-user-select: none; -webkit-user-select: none; }
|
||||
#schema .table { border: 1px solid silver; padding: 0 2px; cursor: move; position: absolute; }
|
||||
#schema .references { position: absolute; }
|
||||
#help { position: absolute; border: 1px solid #999; background: #eee; padding: 5px; font-family: monospace; z-index: 1; }
|
||||
|
||||
.rtl h2 { margin: 0 -18px 20px 0; }
|
||||
.rtl p, .rtl table, .rtl .error, .rtl .message { margin: 1em 0 0 20px; }
|
||||
.rtl .logout { left: 0; right: auto; }
|
||||
.rtl #content { margin: 2em 21em 0 0; padding: 10px 0 20px 20px; }
|
||||
.rtl #breadcrumb { left: auto; right: 21em; margin: 0 -18px 0 0; }
|
||||
.rtl .pages { left: auto; right: 21em; }
|
||||
.rtl input.wayoff { left: auto; right: -1000px; }
|
||||
.rtl #lang, .rtl #menu { left: auto; right: 0; }
|
||||
|
||||
@media all and (max-device-width: 880px) {
|
||||
.pages { left: auto; }
|
||||
#menu { position: static; width: auto; }
|
||||
#content { margin-left: 10px; }
|
||||
#lang { position: static; border-top: 1px solid #999; }
|
||||
#breadcrumb { left: auto; }
|
||||
.rtl .pages { right: auto; }
|
||||
.rtl #content { margin-right: 10px; }
|
||||
.rtl #breadcrumb { right: auto; }
|
||||
}
|
||||
|
||||
@media print {
|
||||
#lang, #menu { display: none; }
|
||||
#content { margin-left: 1em; }
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 71 B After Width: | Height: | Size: 79 B |
@@ -1,40 +1,48 @@
|
||||
// Adminer specific functions
|
||||
|
||||
var jushRoot = '../externals/jush/'; // global variable to allow simple customization
|
||||
|
||||
/** Load syntax highlighting
|
||||
* @param string first three characters of database system version
|
||||
* @param [boolean]
|
||||
*/
|
||||
function bodyLoad(version) {
|
||||
if (jushRoot) {
|
||||
// copy of jush.style to load JS and CSS at once
|
||||
var link = document.createElement('link');
|
||||
link.rel = 'stylesheet';
|
||||
link.type = 'text/css';
|
||||
link.href = jushRoot + 'jush.css';
|
||||
document.getElementsByTagName('head')[0].appendChild(link);
|
||||
|
||||
var script = document.createElement('script');
|
||||
script.src = jushRoot + 'jush.js';
|
||||
script.onload = function () {
|
||||
if (window.jush) { // IE runs in case of an error too
|
||||
jush.create_links = ' target="_blank" rel="noreferrer"';
|
||||
jush.urls.sql_sqlset = jush.urls.sql[0] = jush.urls.sqlset[0] = jush.urls.sqlstatus[0] = 'http://dev.mysql.com/doc/refman/' + version + '/en/$key';
|
||||
var pgsql = 'http://www.postgresql.org/docs/' + version + '/static/';
|
||||
jush.urls.pgsql_pgsqlset = jush.urls.pgsql[0] = pgsql + '$key';
|
||||
jush.urls.pgsqlset[0] = pgsql + 'runtime-config-$key.html#GUC-$1';
|
||||
if (window.jushLinks) {
|
||||
jush.custom_links = jushLinks;
|
||||
function bodyLoad(version, maria) {
|
||||
if (window.jush) {
|
||||
jush.create_links = ' target="_blank" rel="noreferrer noopener"';
|
||||
if (version) {
|
||||
for (var key in jush.urls) {
|
||||
var obj = jush.urls;
|
||||
if (typeof obj[key] != 'string') {
|
||||
obj = obj[key];
|
||||
key = 0;
|
||||
if (maria) {
|
||||
for (var i = 1; i < obj.length; i++) {
|
||||
obj[i] = obj[i]
|
||||
.replace(/\.html/, '/')
|
||||
.replace(/-type-syntax/, '-data-types')
|
||||
.replace(/numeric-(data-types)/, '$1-$&')
|
||||
.replace(/#statvar_.*/, '#$$1')
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
jush.highlight_tag('code', 0);
|
||||
obj[key] = (maria ? obj[key].replace(/dev\.mysql\.com\/doc\/mysql\/en\//, 'mariadb.com/kb/en/library/') : obj[key]) // MariaDB
|
||||
.replace(/\/doc\/mysql/, '/doc/refman/' + version) // MySQL
|
||||
.replace(/\/docs\/current/, '/docs/' + version) // PostgreSQL
|
||||
;
|
||||
}
|
||||
};
|
||||
script.onreadystatechange = function () {
|
||||
if (/^(loaded|complete)$/.test(script.readyState)) {
|
||||
script.onload();
|
||||
}
|
||||
if (window.jushLinks) {
|
||||
jush.custom_links = jushLinks;
|
||||
}
|
||||
jush.highlight_tag('code', 0);
|
||||
var tags = qsa('textarea');
|
||||
for (var i = 0; i < tags.length; i++) {
|
||||
if (/(^|\s)jush-/.test(tags[i].className)) {
|
||||
var pre = jush.textarea(tags[i]);
|
||||
if (pre) {
|
||||
setupSubmitHighlightInput(pre);
|
||||
}
|
||||
}
|
||||
};
|
||||
document.body.appendChild(script);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,68 +71,75 @@ function typePassword(el, disable) {
|
||||
}
|
||||
}
|
||||
|
||||
/** Hide or show some login rows for selected driver
|
||||
* @param HTMLSelectElement
|
||||
/** Install toggle handler
|
||||
* @param [HTMLElement]
|
||||
*/
|
||||
function loginDriver(driver) {
|
||||
var trs = parentTag(driver, 'table').rows;
|
||||
for (var i=1; i < trs.length - 1; i++) {
|
||||
trs[i].className = (/sqlite/.test(driver.value) ? 'hidden' : '');
|
||||
function messagesPrint(el) {
|
||||
var els = qsa('.toggle', el);
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
els[i].onclick = partial(toggle, els[i].getAttribute('href').substr(1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Handle Tab and Esc in textarea
|
||||
* @param HTMLTextAreaElement
|
||||
* @param KeyboardEvent
|
||||
* @return boolean
|
||||
/** Hide or show some login rows for selected driver
|
||||
* @param HTMLSelectElement
|
||||
*/
|
||||
function loginDriver(driver) {
|
||||
var trs = parentTag(driver, 'table').rows;
|
||||
var disabled = /sqlite/.test(selectValue(driver));
|
||||
alterClass(trs[1], 'hidden', disabled); // 1 - row with server
|
||||
trs[1].getElementsByTagName('input')[0].disabled = disabled;
|
||||
}
|
||||
|
||||
|
||||
|
||||
var dbCtrl;
|
||||
var dbPrevious = {};
|
||||
|
||||
/** Check if database should be opened to a new window
|
||||
* @param MouseEvent
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function textareaKeydown(target, event) {
|
||||
if (!event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey) {
|
||||
if (event.keyCode == 9) { // 9 - Tab
|
||||
// inspired by http://pallieter.org/Projects/insertTab/
|
||||
if (target.setSelectionRange) {
|
||||
var start = target.selectionStart;
|
||||
var scrolled = target.scrollTop;
|
||||
target.value = target.value.substr(0, start) + '\t' + target.value.substr(target.selectionEnd);
|
||||
target.setSelectionRange(start + 1, start + 1);
|
||||
target.scrollTop = scrolled;
|
||||
return false; //! still loses focus in Opera, can be solved by handling onblur
|
||||
} else if (target.createTextRange) {
|
||||
document.selection.createRange().text = '\t';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (event.keyCode == 27) { // 27 - Esc
|
||||
var els = target.form.elements;
|
||||
for (var i=1; i < els.length; i++) {
|
||||
if (els[i-1] == target) {
|
||||
els[i].focus();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
function dbMouseDown(event) {
|
||||
dbCtrl = isCtrl(event);
|
||||
if (dbPrevious[this.name] == undefined) {
|
||||
dbPrevious[this.name] = this.value;
|
||||
}
|
||||
}
|
||||
|
||||
/** Load database after selecting it
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function dbChange() {
|
||||
if (dbCtrl) {
|
||||
this.form.target = '_blank';
|
||||
}
|
||||
this.form.submit();
|
||||
this.form.target = '';
|
||||
if (dbCtrl && dbPrevious[this.name] != undefined) {
|
||||
this.value = dbPrevious[this.name];
|
||||
dbPrevious[this.name] = undefined;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Check whether the query will be executed with index
|
||||
* @param HTMLFormElement
|
||||
* @this HTMLElement
|
||||
*/
|
||||
function selectFieldChange(form) {
|
||||
function selectFieldChange() {
|
||||
var form = this.form;
|
||||
var ok = (function () {
|
||||
var inputs = form.getElementsByTagName('input');
|
||||
var inputs = qsa('input', form);
|
||||
for (var i=0; i < inputs.length; i++) {
|
||||
if (inputs[i].value && /^fulltext/.test(inputs[i].name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
var ok = form.limit.value;
|
||||
var selects = form.getElementsByTagName('select');
|
||||
var selects = qsa('select', form);
|
||||
var group = false;
|
||||
var columns = {};
|
||||
for (var i=0; i < selects.length; i++) {
|
||||
@@ -151,7 +166,7 @@ function selectFieldChange(form) {
|
||||
}
|
||||
if (col && /^order/.test(select.name)) {
|
||||
if (!(col in indexColumns)) {
|
||||
ok = false;
|
||||
ok = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -190,15 +205,88 @@ function idfEscape(s) {
|
||||
return s.replace(/`/, '``');
|
||||
}
|
||||
|
||||
/** Detect foreign key
|
||||
* @param HTMLInputElement
|
||||
|
||||
|
||||
/** Set up event handlers for edit_fields().
|
||||
*/
|
||||
function editingNameChange(field) {
|
||||
var name = field.name.substr(0, field.name.length - 7);
|
||||
var type = formField(field.form, name + '[type]');
|
||||
function editFields() {
|
||||
var els = qsa('[name$="[field]"]');
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
els[i].oninput = function () {
|
||||
editingNameChange.call(this);
|
||||
if (!this.defaultValue) {
|
||||
editingAddRow.call(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
els = qsa('[name$="[length]"]');
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
mixin(els[i], {onfocus: editingLengthFocus, oninput: editingLengthChange});
|
||||
}
|
||||
els = qsa('[name$="[type]"]');
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
mixin(els[i], {
|
||||
onfocus: function () { lastType = selectValue(this); },
|
||||
onchange: editingTypeChange,
|
||||
onmouseover: function (event) { helpMouseover.call(this, event, getTarget(event).value, 1) },
|
||||
onmouseout: helpMouseout
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/** Handle clicks on fields editing
|
||||
* @param MouseEvent
|
||||
* @return boolean false to cancel action
|
||||
*/
|
||||
function editingClick(event) {
|
||||
var el = getTarget(event);
|
||||
if (!isTag(el, 'input')) {
|
||||
el = parentTag(el, 'label');
|
||||
el = el && qs('input', el);
|
||||
}
|
||||
if (el) {
|
||||
var name = el.name;
|
||||
if (/^add\[/.test(name)) {
|
||||
editingAddRow.call(el, 1);
|
||||
} else if (/^up\[/.test(name)) {
|
||||
editingMoveRow.call(el, 1);
|
||||
} else if (/^down\[/.test(name)) {
|
||||
editingMoveRow.call(el);
|
||||
} else if (/^drop_col\[/.test(name)) {
|
||||
editingRemoveRow.call(el, 'fields\$1[field]');
|
||||
} else {
|
||||
if (name == 'auto_increment_col') {
|
||||
var field = el.form['fields[' + el.value + '][field]'];
|
||||
if (!field.value) {
|
||||
field.value = 'id';
|
||||
field.oninput();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/** Handle input on fields editing
|
||||
* @param InputEvent
|
||||
*/
|
||||
function editingInput(event) {
|
||||
var el = getTarget(event);
|
||||
if (/\[default\]$/.test(el.name)) {
|
||||
el.previousSibling.checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
/** Detect foreign key
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function editingNameChange() {
|
||||
var name = this.name.substr(0, this.name.length - 7);
|
||||
var type = formField(this.form, name + '[type]');
|
||||
var opts = type.options;
|
||||
var candidate; // don't select anything with ambiguous match (like column `id`)
|
||||
var val = field.value;
|
||||
var val = this.value;
|
||||
for (var i = opts.length; i--; ) {
|
||||
var match = /(.+)`(.+)/.exec(opts[i].value);
|
||||
if (!match) { // common type
|
||||
@@ -228,27 +316,23 @@ function editingNameChange(field) {
|
||||
}
|
||||
|
||||
/** Add table row for next field
|
||||
* @param HTMLInputElement
|
||||
* @param boolean
|
||||
* @param boolean
|
||||
* @return boolean
|
||||
* @param [boolean]
|
||||
* @return boolean false
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function editingAddRow(button, allowed, focus) {
|
||||
if (allowed && rowCount >= allowed) {
|
||||
return false;
|
||||
}
|
||||
var match = /(\d+)(\.\d+)?/.exec(button.name);
|
||||
function editingAddRow(focus) {
|
||||
var match = /(\d+)(\.\d+)?/.exec(this.name);
|
||||
var x = match[0] + (match[2] ? added.substr(match[2].length) : added) + '1';
|
||||
var row = parentTag(button, 'tr');
|
||||
var row2 = row.cloneNode(true);
|
||||
var tags = row.getElementsByTagName('select');
|
||||
var tags2 = row2.getElementsByTagName('select');
|
||||
var row = parentTag(this, 'tr');
|
||||
var row2 = cloneNode(row);
|
||||
var tags = qsa('select', row);
|
||||
var tags2 = qsa('select', row2);
|
||||
for (var i=0; i < tags.length; i++) {
|
||||
tags2[i].name = tags[i].name.replace(/([0-9.]+)/, x);
|
||||
tags2[i].name = tags[i].name.replace(/[0-9.]+/, x);
|
||||
tags2[i].selectedIndex = tags[i].selectedIndex;
|
||||
}
|
||||
tags = row.getElementsByTagName('input');
|
||||
tags2 = row2.getElementsByTagName('input');
|
||||
tags = qsa('input', row);
|
||||
tags2 = qsa('input', row2);
|
||||
var input = tags2[0]; // IE loose tags2 after insertBefore()
|
||||
for (var i=0; i < tags.length; i++) {
|
||||
if (tags[i].name == 'auto_increment_col') {
|
||||
@@ -263,88 +347,134 @@ function editingAddRow(button, allowed, focus) {
|
||||
tags2[i].checked = false;
|
||||
}
|
||||
}
|
||||
tags[0].onchange = function () {
|
||||
editingNameChange(tags[0]);
|
||||
};
|
||||
tags[0].oninput = editingNameChange;
|
||||
row.parentNode.insertBefore(row2, row.nextSibling);
|
||||
if (focus) {
|
||||
input.onchange = function () {
|
||||
editingNameChange(input);
|
||||
};
|
||||
input.oninput = editingNameChange;
|
||||
input.focus();
|
||||
}
|
||||
added += '0';
|
||||
rowCount++;
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Remove table row for field
|
||||
* @param HTMLInputElement
|
||||
* @return boolean
|
||||
* @param string regular expression replacement
|
||||
* @return boolean false
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function editingRemoveRow(button) {
|
||||
var field = formField(button.form, button.name.replace(/drop_col(.+)/, 'fields$1[field]'));
|
||||
function editingRemoveRow(name) {
|
||||
var field = formField(this.form, this.name.replace(/[^\[]+(.+)/, name));
|
||||
field.parentNode.removeChild(field);
|
||||
parentTag(button, 'tr').style.display = 'none';
|
||||
return true;
|
||||
parentTag(this, 'tr').style.display = 'none';
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Move table row for field
|
||||
* @param [boolean]
|
||||
* @return boolean false for success
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function editingMoveRow(up){
|
||||
var row = parentTag(this, 'tr');
|
||||
if (!('nextElementSibling' in row)) {
|
||||
return true;
|
||||
}
|
||||
row.parentNode.insertBefore(row, up
|
||||
? row.previousElementSibling
|
||||
: row.nextElementSibling ? row.nextElementSibling.nextElementSibling : row.parentNode.firstChild);
|
||||
return false;
|
||||
}
|
||||
|
||||
var lastType = '';
|
||||
|
||||
/** Clear length and hide collation or unsigned
|
||||
* @param HTMLSelectElement
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function editingTypeChange(type) {
|
||||
function editingTypeChange() {
|
||||
var type = this;
|
||||
var name = type.name.substr(0, type.name.length - 6);
|
||||
var text = selectValue(type);
|
||||
for (var i=0; i < type.form.elements.length; i++) {
|
||||
var el = type.form.elements[i];
|
||||
if (el.name == name + '[length]' && !(
|
||||
(/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text))
|
||||
|| (/(enum|set)$/.test(lastType) && /(enum|set)$/.test(text))
|
||||
)) {
|
||||
el.value = '';
|
||||
if (el.name == name + '[length]') {
|
||||
if (!(
|
||||
(/(char|binary)$/.test(lastType) && /(char|binary)$/.test(text))
|
||||
|| (/(enum|set)$/.test(lastType) && /(enum|set)$/.test(text))
|
||||
)) {
|
||||
el.value = '';
|
||||
}
|
||||
el.oninput.apply(el);
|
||||
}
|
||||
if (lastType == 'timestamp' && el.name == name + '[has_default]' && /timestamp/i.test(formField(type.form, name + '[default]').value)) {
|
||||
el.checked = false;
|
||||
}
|
||||
if (el.name == name + '[collation]') {
|
||||
el.className = (/(char|text|enum|set)$/.test(text) ? '' : 'hidden');
|
||||
alterClass(el, 'hidden', !/(char|text|enum|set)$/.test(text));
|
||||
}
|
||||
if (el.name == name + '[unsigned]') {
|
||||
el.className = (/(int|float|double|decimal)$/.test(text) ? '' : 'hidden');
|
||||
alterClass(el, 'hidden', !/(^|[^o])int(?!er)|numeric|real|float|double|decimal|money/.test(text));
|
||||
}
|
||||
if (el.name == name + '[on_update]') {
|
||||
alterClass(el, 'hidden', !/timestamp|datetime/.test(text)); // MySQL supports datetime since 5.6.5
|
||||
}
|
||||
if (el.name == name + '[on_delete]') {
|
||||
el.className = (/`/.test(text) ? '' : 'hidden');
|
||||
alterClass(el, 'hidden', !/`/.test(text));
|
||||
}
|
||||
}
|
||||
helpClose();
|
||||
}
|
||||
|
||||
/** Mark length as required
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function editingLengthChange() {
|
||||
alterClass(this, 'required', !this.value.length && /var(char|binary)$/.test(selectValue(this.parentNode.previousSibling.firstChild)));
|
||||
}
|
||||
|
||||
/** Edit enum or set
|
||||
* @param HTMLInputElement
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function editingLengthFocus(field) {
|
||||
var td = field.parentNode;
|
||||
function editingLengthFocus() {
|
||||
var td = this.parentNode;
|
||||
if (/(enum|set)$/.test(selectValue(td.previousSibling.firstChild))) {
|
||||
var edit = document.getElementById('enum-edit');
|
||||
var val = field.value;
|
||||
edit.value = (/^'.+','.+'$/.test(val) ? val.substr(1, val.length - 2).replace(/','/g, "\n").replace(/''/g, "'") : val);
|
||||
var edit = qs('#enum-edit');
|
||||
edit.value = enumValues(this.value);
|
||||
td.appendChild(edit);
|
||||
field.style.display = 'none';
|
||||
this.style.display = 'none';
|
||||
edit.style.display = 'inline';
|
||||
edit.focus();
|
||||
}
|
||||
}
|
||||
|
||||
/** Finish editing of enum or set
|
||||
* @param HTMLTextAreaElement
|
||||
/** Get enum values
|
||||
* @param string
|
||||
* @return string values separated by newlines
|
||||
*/
|
||||
function editingLengthBlur(edit) {
|
||||
var field = edit.parentNode.firstChild;
|
||||
var val = edit.value;
|
||||
field.value = (/\n/.test(val) ? "'" + val.replace(/\n+$/, '').replace(/'/g, "''").replace(/\n/g, "','") + "'" : val);
|
||||
function enumValues(s) {
|
||||
var re = /(^|,)\s*'(([^\\']|\\.|'')*)'\s*/g;
|
||||
var result = [];
|
||||
var offset = 0;
|
||||
var match;
|
||||
while (match = re.exec(s)) {
|
||||
if (offset != match.index) {
|
||||
break;
|
||||
}
|
||||
result.push(match[2].replace(/'(')|\\(.)/g, '$1$2'));
|
||||
offset += match[0].length;
|
||||
}
|
||||
return (offset == s.length ? result.join('\n') : s);
|
||||
}
|
||||
|
||||
/** Finish editing of enum or set
|
||||
* @this HTMLTextAreaElement
|
||||
*/
|
||||
function editingLengthBlur() {
|
||||
var field = this.parentNode.firstChild;
|
||||
var val = this.value;
|
||||
field.value = (/^'[^\n]+'$/.test(val) ? val : val && "'" + val.replace(/\n+$/, '').replace(/'/g, "''").replace(/\\/g, '\\\\').replace(/\n/g, "','") + "'");
|
||||
field.style.display = 'inline';
|
||||
edit.style.display = 'none';
|
||||
this.style.display = 'none';
|
||||
}
|
||||
|
||||
/** Show or hide selected table column
|
||||
@@ -352,164 +482,231 @@ function editingLengthBlur(edit) {
|
||||
* @param number
|
||||
*/
|
||||
function columnShow(checked, column) {
|
||||
var trs = document.getElementById('edit-fields').getElementsByTagName('tr');
|
||||
var trs = qsa('tr', qs('#edit-fields'));
|
||||
for (var i=0; i < trs.length; i++) {
|
||||
trs[i].getElementsByTagName('td')[column].className = (checked ? '' : 'hidden');
|
||||
}
|
||||
}
|
||||
|
||||
/** Hide column with default values in narrow window
|
||||
*/
|
||||
function editingHideDefaults() {
|
||||
if (innerWidth < document.documentElement.scrollWidth) {
|
||||
document.getElementById('defaults').checked = false;
|
||||
columnShow(false, 5);
|
||||
alterClass(qsa('td', trs[i])[column], 'hidden', !checked);
|
||||
}
|
||||
}
|
||||
|
||||
/** Display partition options
|
||||
* @param HTMLSelectElement
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function partitionByChange(el) {
|
||||
var partitionTable = /RANGE|LIST/.test(selectValue(el));
|
||||
el.form['partitions'].className = (partitionTable || !el.selectedIndex ? 'hidden' : '');
|
||||
document.getElementById('partition-table').className = (partitionTable ? '' : 'hidden');
|
||||
function partitionByChange() {
|
||||
var partitionTable = /RANGE|LIST/.test(selectValue(this));
|
||||
alterClass(this.form['partitions'], 'hidden', partitionTable || !this.selectedIndex);
|
||||
alterClass(qs('#partition-table'), 'hidden', !partitionTable);
|
||||
helpClose();
|
||||
}
|
||||
|
||||
/** Add next partition row
|
||||
* @param HTMLInputElement
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function partitionNameChange(el) {
|
||||
var row = parentTag(el, 'tr').cloneNode(true);
|
||||
function partitionNameChange() {
|
||||
var row = cloneNode(parentTag(this, 'tr'));
|
||||
row.firstChild.firstChild.value = '';
|
||||
parentTag(el, 'table').appendChild(row);
|
||||
el.onchange = function () {};
|
||||
parentTag(this, 'table').appendChild(row);
|
||||
this.oninput = function () {};
|
||||
}
|
||||
|
||||
/** Show or hide comment fields
|
||||
* @param HTMLInputElement
|
||||
* @param [boolean] whether to focus Comment if checked
|
||||
*/
|
||||
function editingCommentsClick(el, focus) {
|
||||
var comment = el.form['Comment'];
|
||||
columnShow(el.checked, 6);
|
||||
alterClass(comment, 'hidden', !el.checked);
|
||||
if (focus && el.checked) {
|
||||
comment.focus();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Uncheck 'all' checkbox
|
||||
* @param MouseEvent
|
||||
* @this HTMLTableElement
|
||||
*/
|
||||
function dumpClick(event) {
|
||||
var el = parentTag(getTarget(event), 'label');
|
||||
if (el) {
|
||||
el = qs('input', el);
|
||||
var match = /(.+)\[\]$/.exec(el.name);
|
||||
if (match) {
|
||||
checkboxClick.call(el, event);
|
||||
formUncheck('check-' + match[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Add row for foreign key
|
||||
* @param HTMLSelectElement
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function foreignAddRow(field) {
|
||||
field.onchange = function () { };
|
||||
var row = parentTag(field, 'tr').cloneNode(true);
|
||||
var selects = row.getElementsByTagName('select');
|
||||
function foreignAddRow() {
|
||||
var row = cloneNode(parentTag(this, 'tr'));
|
||||
this.onchange = function () { };
|
||||
var selects = qsa('select', row);
|
||||
for (var i=0; i < selects.length; i++) {
|
||||
selects[i].name = selects[i].name.replace(/\]/, '1$&');
|
||||
selects[i].selectedIndex = 0;
|
||||
}
|
||||
parentTag(field, 'table').appendChild(row);
|
||||
parentTag(this, 'table').appendChild(row);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Add row for indexes
|
||||
* @param HTMLSelectElement
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function indexesAddRow(field) {
|
||||
field.onchange = function () { };
|
||||
var row = parentTag(field, 'tr').cloneNode(true);
|
||||
var selects = row.getElementsByTagName('select');
|
||||
function indexesAddRow() {
|
||||
var row = cloneNode(parentTag(this, 'tr'));
|
||||
this.onchange = function () { };
|
||||
var selects = qsa('select', row);
|
||||
for (var i=0; i < selects.length; i++) {
|
||||
selects[i].name = selects[i].name.replace(/indexes\[\d+/, '$&1');
|
||||
selects[i].selectedIndex = 0;
|
||||
}
|
||||
var inputs = row.getElementsByTagName('input');
|
||||
var inputs = qsa('input', row);
|
||||
for (var i=0; i < inputs.length; i++) {
|
||||
inputs[i].name = inputs[i].name.replace(/indexes\[\d+/, '$&1');
|
||||
inputs[i].value = '';
|
||||
}
|
||||
parentTag(field, 'table').appendChild(row);
|
||||
parentTag(this, 'table').appendChild(row);
|
||||
}
|
||||
|
||||
/** Change column in index
|
||||
* @param HTMLSelectElement
|
||||
* @param string name prefix
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function indexesChangeColumn(field, prefix) {
|
||||
var columns = parentTag(field, 'td').getElementsByTagName('select');
|
||||
function indexesChangeColumn(prefix) {
|
||||
var names = [];
|
||||
for (var i=0; i < columns.length; i++) {
|
||||
var value = selectValue(columns[i]);
|
||||
if (value) {
|
||||
names.push(value);
|
||||
for (var tag in { 'select': 1, 'input': 1 }) {
|
||||
var columns = qsa(tag, parentTag(this, 'td'));
|
||||
for (var i=0; i < columns.length; i++) {
|
||||
if (/\[columns\]/.test(columns[i].name)) {
|
||||
var value = selectValue(columns[i]);
|
||||
if (value) {
|
||||
names.push(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
field.form[field.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
|
||||
this.form[this.name.replace(/\].*/, '][name]')].value = prefix + names.join('_');
|
||||
}
|
||||
|
||||
/** Add column for index
|
||||
* @param HTMLSelectElement
|
||||
* @param string name prefix
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function indexesAddColumn(field, prefix) {
|
||||
field.onchange = function () {
|
||||
indexesChangeColumn(field, prefix);
|
||||
};
|
||||
function indexesAddColumn(prefix) {
|
||||
var field = this;
|
||||
var select = field.form[field.name.replace(/\].*/, '][type]')];
|
||||
if (!select.selectedIndex) {
|
||||
select.selectedIndex = 3;
|
||||
while (selectValue(select) != "INDEX" && select.selectedIndex < select.options.length) {
|
||||
select.selectedIndex++;
|
||||
}
|
||||
select.onchange();
|
||||
}
|
||||
var column = field.parentNode.cloneNode(true);
|
||||
select = column.getElementsByTagName('select')[0];
|
||||
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
||||
select.selectedIndex = 0;
|
||||
var input = column.getElementsByTagName('input')[0];
|
||||
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
||||
input.value = '';
|
||||
var column = cloneNode(field.parentNode);
|
||||
var selects = qsa('select', column);
|
||||
for (var i = 0; i < selects.length; i++) {
|
||||
select = selects[i];
|
||||
select.name = select.name.replace(/\]\[\d+/, '$&1');
|
||||
select.selectedIndex = 0;
|
||||
}
|
||||
field.onchange = partial(indexesChangeColumn, prefix);
|
||||
var inputs = qsa('input', column);
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
var input = inputs[i];
|
||||
input.name = input.name.replace(/\]\[\d+/, '$&1');
|
||||
if (input.type != 'checkbox') {
|
||||
input.value = '';
|
||||
}
|
||||
}
|
||||
parentTag(field, 'td').appendChild(column);
|
||||
field.onchange();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Updates the form action
|
||||
* @param HTMLFormElement
|
||||
* @param string
|
||||
*/
|
||||
function sqlSubmit(form, root) {
|
||||
if (encodeURIComponent(form['query'].value).length < 2e3) {
|
||||
form.action = root
|
||||
+ '&sql=' + encodeURIComponent(form['query'].value)
|
||||
+ (form['limit'].value ? '&limit=' + +form['limit'].value : '')
|
||||
+ (form['error_stops'].checked ? '&error_stops=1' : '')
|
||||
+ (form['only_errors'].checked ? '&only_errors=1' : '')
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Handle changing trigger time or event
|
||||
* @param RegExp
|
||||
* @param string
|
||||
* @param HTMLFormElement
|
||||
*/
|
||||
function triggerChange(tableRe, table, form) {
|
||||
var formEvent = selectValue(form['Event']);
|
||||
if (tableRe.test(form['Trigger'].value)) {
|
||||
form['Trigger'].value = table + '_' + (selectValue(form['Timing']).charAt(0) + formEvent.charAt(0)).toLowerCase();
|
||||
}
|
||||
alterClass(form['Of'], 'hidden', !/ OF/.test(formEvent));
|
||||
}
|
||||
|
||||
|
||||
|
||||
var that, x, y; // em and tablePos defined in schema.inc.php
|
||||
|
||||
/** Get mouse position
|
||||
* @param HTMLElement
|
||||
* @param MouseEvent
|
||||
* @this HTMLElement
|
||||
*/
|
||||
function schemaMousedown(el, event) {
|
||||
function schemaMousedown(event) {
|
||||
if ((event.which ? event.which : event.button) == 1) {
|
||||
that = el;
|
||||
x = event.clientX - el.offsetLeft;
|
||||
y = event.clientY - el.offsetTop;
|
||||
that = this;
|
||||
x = event.clientX - this.offsetLeft;
|
||||
y = event.clientY - this.offsetTop;
|
||||
}
|
||||
}
|
||||
|
||||
/** Move object
|
||||
* @param MouseEvent
|
||||
*/
|
||||
function schemaMousemove(ev) {
|
||||
function schemaMousemove(event) {
|
||||
if (that !== undefined) {
|
||||
ev = ev || event;
|
||||
var left = (ev.clientX - x) / em;
|
||||
var top = (ev.clientY - y) / em;
|
||||
var divs = that.getElementsByTagName('div');
|
||||
var left = (event.clientX - x) / em;
|
||||
var top = (event.clientY - y) / em;
|
||||
var divs = qsa('div', that);
|
||||
var lineSet = { };
|
||||
for (var i=0; i < divs.length; i++) {
|
||||
if (divs[i].className == 'references') {
|
||||
var div2 = document.getElementById((/^refs/.test(divs[i].id) ? 'refd' : 'refs') + divs[i].id.substr(4));
|
||||
var div2 = qs('[id="' + (/^refs/.test(divs[i].id) ? 'refd' : 'refs') + divs[i].id.substr(4) + '"]');
|
||||
var ref = (tablePos[divs[i].title] ? tablePos[divs[i].title] : [ div2.parentNode.offsetTop / em, 0 ]);
|
||||
var left1 = -1;
|
||||
var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1');
|
||||
if (divs[i].parentNode != div2.parentNode) {
|
||||
left1 = Math.min(0, ref[1] - left) - 1;
|
||||
divs[i].style.left = left1 + 'em';
|
||||
divs[i].getElementsByTagName('div')[0].style.width = -left1 + 'em';
|
||||
divs[i].querySelector('div').style.width = -left1 + 'em';
|
||||
var left2 = Math.min(0, left - ref[1]) - 1;
|
||||
div2.style.left = left2 + 'em';
|
||||
div2.getElementsByTagName('div')[0].style.width = -left2 + 'em';
|
||||
div2.querySelector('div').style.width = -left2 + 'em';
|
||||
}
|
||||
if (!lineSet[id]) {
|
||||
var line = document.getElementById(divs[i].id.replace(/^....(.+)-.+$/, 'refl$1'));
|
||||
var line = qs('[id="' + divs[i].id.replace(/^....(.+)-.+$/, 'refl$1') + '"]');
|
||||
var top1 = top + divs[i].offsetTop / em;
|
||||
var top2 = top + div2.offsetTop / em;
|
||||
if (divs[i].parentNode != div2.parentNode) {
|
||||
top2 += ref[0] - top;
|
||||
line.getElementsByTagName('div')[0].style.height = Math.abs(top1 - top2) + 'em';
|
||||
line.querySelector('div').style.height = Math.abs(top1 - top2) + 'em';
|
||||
}
|
||||
line.style.left = (left + left1) + 'em';
|
||||
line.style.top = Math.min(top1, top2) + 'em';
|
||||
@@ -526,18 +723,64 @@ function schemaMousemove(ev) {
|
||||
* @param MouseEvent
|
||||
* @param string
|
||||
*/
|
||||
function schemaMouseup(ev, db) {
|
||||
function schemaMouseup(event, db) {
|
||||
if (that !== undefined) {
|
||||
ev = ev || event;
|
||||
tablePos[that.firstChild.firstChild.firstChild.data] = [ (ev.clientY - y) / em, (ev.clientX - x) / em ];
|
||||
tablePos[that.firstChild.firstChild.firstChild.data] = [ (event.clientY - y) / em, (event.clientX - x) / em ];
|
||||
that = undefined;
|
||||
var s = '';
|
||||
for (var key in tablePos) {
|
||||
s += '_' + key + ':' + Math.round(tablePos[key][0] * 10000) / 10000 + 'x' + Math.round(tablePos[key][1] * 10000) / 10000;
|
||||
}
|
||||
s = encodeURIComponent(s.substr(1));
|
||||
var link = document.getElementById('schema-link');
|
||||
var link = qs('#schema-link');
|
||||
link.href = link.href.replace(/[^=]+$/, '') + s;
|
||||
cookie('adminer_schema-' + db + '=' + s, 30); //! special chars in db
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
var helpOpen, helpIgnore; // when mouse outs <option> then it mouse overs border of <select> - ignore it
|
||||
|
||||
/** Display help
|
||||
* @param MouseEvent
|
||||
* @param string
|
||||
* @param bool display on left side (otherwise on top)
|
||||
* @this HTMLElement
|
||||
*/
|
||||
function helpMouseover(event, text, side) {
|
||||
var target = getTarget(event);
|
||||
if (!text) {
|
||||
helpClose();
|
||||
} else if (window.jush && (!helpIgnore || this != target)) {
|
||||
helpOpen = 1;
|
||||
var help = qs('#help');
|
||||
help.innerHTML = text;
|
||||
jush.highlight_tag([ help ]);
|
||||
alterClass(help, 'hidden');
|
||||
var rect = target.getBoundingClientRect();
|
||||
var body = document.documentElement;
|
||||
help.style.top = (body.scrollTop + rect.top - (side ? (help.offsetHeight - target.offsetHeight) / 2 : help.offsetHeight)) + 'px';
|
||||
help.style.left = (body.scrollLeft + rect.left - (side ? help.offsetWidth : (help.offsetWidth - target.offsetWidth) / 2)) + 'px';
|
||||
}
|
||||
}
|
||||
|
||||
/** Close help after timeout
|
||||
* @param MouseEvent
|
||||
* @this HTMLElement
|
||||
*/
|
||||
function helpMouseout(event) {
|
||||
helpOpen = 0;
|
||||
helpIgnore = (this != getTarget(event));
|
||||
setTimeout(function () {
|
||||
if (!helpOpen) {
|
||||
helpClose();
|
||||
}
|
||||
}, 200);
|
||||
}
|
||||
|
||||
/** Close help
|
||||
*/
|
||||
function helpClose() {
|
||||
alterClass(qs('#help'), 'hidden', true);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,86 @@
|
||||
|
||||
/** Get first element by selector
|
||||
* @param string
|
||||
* @param [HTMLElement] defaults to document
|
||||
* @return HTMLElement
|
||||
*/
|
||||
function qs(selector, context) {
|
||||
return (context || document).querySelector(selector);
|
||||
}
|
||||
|
||||
/** Get last element by selector
|
||||
* @param string
|
||||
* @param [HTMLElement] defaults to document
|
||||
* @return HTMLElement
|
||||
*/
|
||||
function qsl(selector, context) {
|
||||
var els = qsa(selector, context);
|
||||
return els[els.length - 1];
|
||||
}
|
||||
|
||||
/** Get all elements by selector
|
||||
* @param string
|
||||
* @param [HTMLElement] defaults to document
|
||||
* @return NodeList
|
||||
*/
|
||||
function qsa(selector, context) {
|
||||
return (context || document).querySelectorAll(selector);
|
||||
}
|
||||
|
||||
/** Return a function calling fn with the next arguments
|
||||
* @param function
|
||||
* @param ...
|
||||
* @return function with preserved this
|
||||
*/
|
||||
function partial(fn) {
|
||||
var args = Array.apply(null, arguments).slice(1);
|
||||
return function () {
|
||||
return fn.apply(this, args);
|
||||
};
|
||||
}
|
||||
|
||||
/** Return a function calling fn with the first parameter and then the next arguments
|
||||
* @param function
|
||||
* @param ...
|
||||
* @return function with preserved this
|
||||
*/
|
||||
function partialArg(fn) {
|
||||
var args = Array.apply(null, arguments);
|
||||
return function (arg) {
|
||||
args[0] = arg;
|
||||
return fn.apply(this, args);
|
||||
};
|
||||
}
|
||||
|
||||
/** Assign values from source to target
|
||||
* @param Object
|
||||
* @param Object
|
||||
*/
|
||||
function mixin(target, source) {
|
||||
for (var key in source) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
|
||||
/** Add or remove CSS class
|
||||
* @param HTMLElement
|
||||
* @param string
|
||||
* @param [bool]
|
||||
*/
|
||||
function alterClass(el, className, enable) {
|
||||
if (el) {
|
||||
el.className = el.className.replace(RegExp('(^|\\s)' + className + '(\\s|$)'), '$2') + (enable ? ' ' + className : '');
|
||||
}
|
||||
}
|
||||
|
||||
/** Toggle visibility
|
||||
* @param string
|
||||
* @return boolean
|
||||
* @return boolean false
|
||||
*/
|
||||
function toggle(id) {
|
||||
var el = document.getElementById(id);
|
||||
var el = qs('#' + id);
|
||||
el.className = (el.className == 'hidden' ? '' : 'hidden');
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Set permanent cookie
|
||||
@@ -21,31 +95,64 @@ function cookie(assign, days) {
|
||||
}
|
||||
|
||||
/** Verify current Adminer version
|
||||
* @param string
|
||||
* @param string own URL base
|
||||
* @param string
|
||||
*/
|
||||
function verifyVersion() {
|
||||
function verifyVersion(current, url, token) {
|
||||
cookie('adminer_version=0', 1);
|
||||
var script = document.createElement('script');
|
||||
script.src = location.protocol + '//www.adminer.org/version.php';
|
||||
document.body.appendChild(script);
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.src = 'https://www.adminer.org/version/?current=' + current;
|
||||
iframe.frameBorder = 0;
|
||||
iframe.marginHeight = 0;
|
||||
iframe.scrolling = 'no';
|
||||
iframe.style.width = '7ex';
|
||||
iframe.style.height = '1.25em';
|
||||
if (window.postMessage && window.addEventListener) {
|
||||
iframe.style.display = 'none';
|
||||
addEventListener('message', function (event) {
|
||||
if (event.origin == 'https://www.adminer.org') {
|
||||
var match = /version=(.+)/.exec(event.data);
|
||||
if (match) {
|
||||
cookie('adminer_version=' + match[1], 1);
|
||||
ajax(url + 'script=version', function () {
|
||||
}, event.data + '&token=' + token);
|
||||
}
|
||||
}
|
||||
}, false);
|
||||
}
|
||||
qs('#version').appendChild(iframe);
|
||||
}
|
||||
|
||||
/** Get value of select
|
||||
* @param HTMLSelectElement
|
||||
* @param HTMLElement <select> or <input>
|
||||
* @return string
|
||||
*/
|
||||
function selectValue(select) {
|
||||
if (!select.selectedIndex) {
|
||||
return select.value;
|
||||
}
|
||||
var selected = select.options[select.selectedIndex];
|
||||
return ((selected.attributes.value || {}).specified ? selected.value : selected.text);
|
||||
}
|
||||
|
||||
/** Get parent node with specified tag name.
|
||||
* @param HTMLElement
|
||||
* @param string
|
||||
* @return HTMLElement
|
||||
*/
|
||||
/** Verify if element has a specified tag name
|
||||
* @param HTMLElement
|
||||
* @param string regular expression
|
||||
* @return bool
|
||||
*/
|
||||
function isTag(el, tag) {
|
||||
var re = new RegExp('^(' + tag + ')$', 'i');
|
||||
return el && re.test(el.tagName);
|
||||
}
|
||||
|
||||
/** Get parent node with specified tag name
|
||||
* @param HTMLElement
|
||||
* @param string regular expression
|
||||
* @return HTMLElement
|
||||
*/
|
||||
function parentTag(el, tag) {
|
||||
var re = new RegExp('^' + tag + '$', 'i');
|
||||
while (!re.test(el.tagName)) {
|
||||
while (el && !isTag(el, tag)) {
|
||||
el = el.parentNode;
|
||||
}
|
||||
return el;
|
||||
@@ -56,18 +163,40 @@ function parentTag(el, tag) {
|
||||
*/
|
||||
function trCheck(el) {
|
||||
var tr = parentTag(el, 'tr');
|
||||
tr.className = tr.className.replace(/(^|\s)checked(\s|$)/, '$2') + (el.checked ? ' checked' : '');
|
||||
alterClass(tr, 'checked', el.checked);
|
||||
if (el.form && el.form['all'] && el.form['all'].onclick) { // Opera treats form.all as document.all
|
||||
el.form['all'].onclick();
|
||||
}
|
||||
}
|
||||
|
||||
/** Fill number of selected items
|
||||
* @param string
|
||||
* @param string
|
||||
* @uses thousandsSeparator
|
||||
*/
|
||||
function selectCount(id, count) {
|
||||
setHtml(id, (count === '' ? '' : '(' + (count + '').replace(/\B(?=(\d{3})+$)/g, thousandsSeparator) + ')'));
|
||||
var el = qs('#' + id);
|
||||
if (el) {
|
||||
var inputs = qsa('input', el.parentNode.parentNode);
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
var input = inputs[i];
|
||||
if (input.type == 'submit') {
|
||||
input.disabled = (count == '0');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Check all elements matching given name
|
||||
* @param HTMLInputElement
|
||||
* @param RegExp
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function formCheck(el, name) {
|
||||
var elems = el.form.elements;
|
||||
function formCheck(name) {
|
||||
var elems = this.form.elements;
|
||||
for (var i=0; i < elems.length; i++) {
|
||||
if (name.test(elems[i].name)) {
|
||||
elems[i].checked = el.checked;
|
||||
elems[i].checked = this.checked;
|
||||
trCheck(elems[i]);
|
||||
}
|
||||
}
|
||||
@@ -76,14 +205,9 @@ function formCheck(el, name) {
|
||||
/** Check all rows in <table class="checkable">
|
||||
*/
|
||||
function tableCheck() {
|
||||
var tables = document.getElementsByTagName('table');
|
||||
for (var i=0; i < tables.length; i++) {
|
||||
if (/(^|\s)checkable(\s|$)/.test(tables[i].className)) {
|
||||
var trs = tables[i].getElementsByTagName('tr');
|
||||
for (var j=0; j < trs.length; j++) {
|
||||
trCheck(trs[j].firstChild.firstChild);
|
||||
}
|
||||
}
|
||||
var inputs = qsa('table.checkable td:first-child input');
|
||||
for (var i=0; i < inputs.length; i++) {
|
||||
trCheck(inputs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +215,7 @@ function tableCheck() {
|
||||
* @param string
|
||||
*/
|
||||
function formUncheck(id) {
|
||||
var el = document.getElementById(id);
|
||||
var el = qs('#' + id);
|
||||
el.checked = false;
|
||||
trCheck(el);
|
||||
}
|
||||
@@ -117,48 +241,65 @@ function formChecked(el, name) {
|
||||
* @param [boolean] force click
|
||||
*/
|
||||
function tableClick(event, click) {
|
||||
var td = parentTag(getTarget(event), 'td');
|
||||
var text;
|
||||
if (td && (text = td.getAttribute('data-text'))) {
|
||||
if (selectClick.call(td, event, +text, td.getAttribute('data-warning'))) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
click = (click || !window.getSelection || getSelection().isCollapsed);
|
||||
var el = event.target || event.srcElement;
|
||||
while (!/^tr$/i.test(el.tagName)) {
|
||||
if (/^(table|a|input|textarea)$/i.test(el.tagName)) {
|
||||
var el = getTarget(event);
|
||||
while (!isTag(el, 'tr')) {
|
||||
if (isTag(el, 'table|a|input|textarea')) {
|
||||
if (el.type != 'checkbox') {
|
||||
return;
|
||||
}
|
||||
checkboxClick(event, el);
|
||||
checkboxClick.call(el, event);
|
||||
click = false;
|
||||
}
|
||||
el = el.parentNode;
|
||||
if (!el) { // Ctrl+click on text fields hides the element
|
||||
return;
|
||||
}
|
||||
}
|
||||
el = el.firstChild.firstChild;
|
||||
if (click) {
|
||||
el.checked = !el.checked;
|
||||
el.onclick && el.onclick();
|
||||
}
|
||||
if (el.name == 'check[]') {
|
||||
el.form['all'].checked = false;
|
||||
formUncheck('all-page');
|
||||
}
|
||||
if (/^(tables|views)\[\]$/.test(el.name)) {
|
||||
formUncheck('check-all');
|
||||
}
|
||||
trCheck(el);
|
||||
}
|
||||
|
||||
var lastChecked;
|
||||
|
||||
/** Shift-click on checkbox for multiple selection.
|
||||
* @param MouseEvent
|
||||
* @param HTMLInputElement
|
||||
*/
|
||||
function checkboxClick(event, el) {
|
||||
if (!el.name) {
|
||||
* @param MouseEvent
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function checkboxClick(event) {
|
||||
if (!this.name) {
|
||||
return;
|
||||
}
|
||||
if (event.shiftKey && (!lastChecked || lastChecked.name == el.name)) {
|
||||
if (event.shiftKey && (!lastChecked || lastChecked.name == this.name)) {
|
||||
var checked = (lastChecked ? lastChecked.checked : true);
|
||||
var inputs = parentTag(el, 'table').getElementsByTagName('input');
|
||||
var inputs = qsa('input', parentTag(this, 'table'));
|
||||
var checking = !lastChecked;
|
||||
for (var i=0; i < inputs.length; i++) {
|
||||
var input = inputs[i];
|
||||
if (input.name === el.name) {
|
||||
if (input.name === this.name) {
|
||||
if (checking) {
|
||||
input.checked = checked;
|
||||
trCheck(input);
|
||||
}
|
||||
if (input === el || input === lastChecked) {
|
||||
if (input === this || input === lastChecked) {
|
||||
if (checking) {
|
||||
break;
|
||||
}
|
||||
@@ -167,19 +308,19 @@ function checkboxClick(event, el) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
lastChecked = el;
|
||||
lastChecked = this;
|
||||
}
|
||||
}
|
||||
|
||||
/** Set HTML code of an element
|
||||
* @param string
|
||||
* @param string undefined to set parentNode to
|
||||
* @param string undefined to set parentNode to empty string
|
||||
*/
|
||||
function setHtml(id, html) {
|
||||
var el = document.getElementById(id);
|
||||
var el = qs('[id="' + id.replace(/[\\"]/g, '\\$&') + '"]'); // database name is used as ID
|
||||
if (el) {
|
||||
if (html == undefined) {
|
||||
el.parentNode.innerHTML = ' ';
|
||||
if (html == null) {
|
||||
el.parentNode.innerHTML = '';
|
||||
} else {
|
||||
el.innerHTML = html;
|
||||
}
|
||||
@@ -201,68 +342,89 @@ function nodePosition(el) {
|
||||
/** Go to the specified page
|
||||
* @param string
|
||||
* @param string
|
||||
* @param [MouseEvent]
|
||||
*/
|
||||
function pageClick(href, page, event) {
|
||||
function pageClick(href, page) {
|
||||
if (!isNaN(page) && page) {
|
||||
href += (page != 1 ? '&page=' + (page - 1) : '');
|
||||
location.href = href;
|
||||
location.href = href + (page != 1 ? '&page=' + (page - 1) : '');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Display items in menu
|
||||
* @param HTMLElement
|
||||
* @param MouseEvent
|
||||
* @this HTMLElement
|
||||
*/
|
||||
function menuOver(el, event) {
|
||||
var a = event.target;
|
||||
if (/^a$/i.test(a.tagName) && a.offsetLeft + a.offsetWidth > a.parentNode.offsetWidth) {
|
||||
el.style.overflow = 'visible';
|
||||
function menuOver(event) {
|
||||
var a = getTarget(event);
|
||||
if (isTag(a, 'a|span') && a.offsetLeft + a.offsetWidth > a.parentNode.offsetWidth - 15) { // 15 - ellipsis
|
||||
this.style.overflow = 'visible';
|
||||
}
|
||||
}
|
||||
|
||||
/** Hide items in menu
|
||||
* @param HTMLElement
|
||||
* @this HTMLElement
|
||||
*/
|
||||
function menuOut(el) {
|
||||
el.style.overflow = 'auto';
|
||||
function menuOut() {
|
||||
this.style.overflow = 'auto';
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Add row in select fieldset
|
||||
* @param HTMLSelectElement
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function selectAddRow(field) {
|
||||
field.onchange = function () {
|
||||
selectFieldChange(field.form);
|
||||
};
|
||||
function selectAddRow() {
|
||||
var field = this;
|
||||
var row = cloneNode(field.parentNode);
|
||||
field.onchange = selectFieldChange;
|
||||
field.onchange();
|
||||
var row = field.parentNode.cloneNode(true);
|
||||
var selects = row.getElementsByTagName('select');
|
||||
var selects = qsa('select', row);
|
||||
for (var i=0; i < selects.length; i++) {
|
||||
selects[i].name = selects[i].name.replace(/[a-z]\[\d+/, '$&1');
|
||||
selects[i].selectedIndex = 0;
|
||||
}
|
||||
var inputs = row.getElementsByTagName('input');
|
||||
if (inputs.length) {
|
||||
inputs[0].name = inputs[0].name.replace(/[a-z]\[\d+/, '$&1');
|
||||
inputs[0].value = '';
|
||||
inputs[0].className = '';
|
||||
var inputs = qsa('input', row);
|
||||
for (var i=0; i < inputs.length; i++) {
|
||||
inputs[i].name = inputs[i].name.replace(/[a-z]\[\d+/, '$&1');
|
||||
inputs[i].className = '';
|
||||
if (inputs[i].type == 'checkbox') {
|
||||
inputs[i].checked = false;
|
||||
} else {
|
||||
inputs[i].value = '';
|
||||
}
|
||||
}
|
||||
field.parentNode.parentNode.appendChild(row);
|
||||
}
|
||||
|
||||
/** Prevent onsearch handler on Enter
|
||||
* @param KeyboardEvent
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function selectSearchKeydown(event) {
|
||||
if (event.keyCode == 13 || event.keyCode == 10) {
|
||||
this.onsearch = function () {
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/** Clear column name after resetting search
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function selectSearchSearch() {
|
||||
if (!this.value) {
|
||||
this.parentNode.firstChild.selectedIndex = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Toggles column context menu
|
||||
* @param HTMLElement
|
||||
* @param [string] extra class name
|
||||
*/
|
||||
function columnMouse(el, className) {
|
||||
var spans = el.getElementsByTagName('span');
|
||||
* @param [string] extra class name
|
||||
* @this HTMLElement
|
||||
*/
|
||||
function columnMouse(className) {
|
||||
var spans = qsa('span', this);
|
||||
for (var i=0; i < spans.length; i++) {
|
||||
if (/column/.test(spans[i].className)) {
|
||||
spans[i].className = 'column' + (className || '');
|
||||
@@ -273,15 +435,17 @@ function columnMouse(el, className) {
|
||||
|
||||
|
||||
/** Fill column in search field
|
||||
* @param string
|
||||
*/
|
||||
* @param string
|
||||
* @return boolean false
|
||||
*/
|
||||
function selectSearch(name) {
|
||||
var el = document.getElementById('fieldset-search');
|
||||
var el = qs('#fieldset-search');
|
||||
el.className = '';
|
||||
var divs = el.getElementsByTagName('div');
|
||||
var divs = qsa('div', el);
|
||||
for (var i=0; i < divs.length; i++) {
|
||||
var div = divs[i];
|
||||
if (/select/i.test(div.firstChild.tagName) && selectValue(div.firstChild) == name) {
|
||||
var el = qs('[name$="[col]"]', div);
|
||||
if (el && selectValue(el) == name) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -289,7 +453,25 @@ function selectSearch(name) {
|
||||
div.firstChild.value = name;
|
||||
div.firstChild.onchange();
|
||||
}
|
||||
div.lastChild.focus();
|
||||
qs('[name$="[val]"]', div).focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/** Check if Ctrl key (Command key on Mac) was pressed
|
||||
* @param KeyboardEvent|MouseEvent
|
||||
* @return boolean
|
||||
*/
|
||||
function isCtrl(event) {
|
||||
return (event.ctrlKey || event.metaKey) && !event.altKey; // shiftKey allowed
|
||||
}
|
||||
|
||||
/** Return event target
|
||||
* @param Event
|
||||
* @return HTMLElement
|
||||
*/
|
||||
function getTarget(event) {
|
||||
return event.target || event.srcElement;
|
||||
}
|
||||
|
||||
|
||||
@@ -300,14 +482,22 @@ function selectSearch(name) {
|
||||
* @return boolean
|
||||
*/
|
||||
function bodyKeydown(event, button) {
|
||||
var target = event.target || event.srcElement;
|
||||
if (event.ctrlKey && (event.keyCode == 13 || event.keyCode == 10) && !event.altKey && !event.metaKey && /select|textarea|input/i.test(target.tagName)) { // 13|10 - Enter, shiftKey allowed
|
||||
eventStop(event);
|
||||
var target = getTarget(event);
|
||||
if (target.jushTextarea) {
|
||||
target = target.jushTextarea;
|
||||
}
|
||||
if (isCtrl(event) && (event.keyCode == 13 || event.keyCode == 10) && isTag(target, 'select|textarea|input')) { // 13|10 - Enter
|
||||
target.blur();
|
||||
if (button) {
|
||||
target.form[button].click();
|
||||
} else {
|
||||
if (target.form.onsubmit) {
|
||||
target.form.onsubmit();
|
||||
}
|
||||
target.form.submit();
|
||||
}
|
||||
target.focus();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -317,11 +507,11 @@ function bodyKeydown(event, button) {
|
||||
* @param MouseEvent
|
||||
*/
|
||||
function bodyClick(event) {
|
||||
var target = event.target || event.srcElement;
|
||||
if ((event.ctrlKey || event.shiftKey) && target.type == 'submit' && /input/i.test(target.tagName)) {
|
||||
var target = getTarget(event);
|
||||
if ((isCtrl(event) || event.shiftKey) && target.type == 'submit' && isTag(target, 'input')) {
|
||||
target.form.target = '_blank';
|
||||
setTimeout(function () {
|
||||
// if (event.ctrlKey) { focus(); } doesn't work
|
||||
// if (isCtrl(event)) { focus(); } doesn't work
|
||||
target.form.target = '';
|
||||
}, 0);
|
||||
}
|
||||
@@ -334,35 +524,68 @@ function bodyClick(event) {
|
||||
* @return boolean
|
||||
*/
|
||||
function editingKeydown(event) {
|
||||
if ((event.keyCode == 40 || event.keyCode == 38) && event.ctrlKey && !event.altKey && !event.metaKey) { // 40 - Down, 38 - Up, shiftKey allowed
|
||||
var target = event.target || event.srcElement;
|
||||
if ((event.keyCode == 40 || event.keyCode == 38) && isCtrl(event)) { // 40 - Down, 38 - Up
|
||||
var target = getTarget(event);
|
||||
var sibling = (event.keyCode == 40 ? 'nextSibling' : 'previousSibling');
|
||||
var el = target.parentNode.parentNode[sibling];
|
||||
if (el && (/^tr$/i.test(el.tagName) || (el = el[sibling])) && /^tr$/i.test(el.tagName) && (el = el.childNodes[nodePosition(target.parentNode)]) && (el = el.childNodes[nodePosition(target)])) {
|
||||
if (el && (isTag(el, 'tr') || (el = el[sibling])) && isTag(el, 'tr') && (el = el.childNodes[nodePosition(target.parentNode)]) && (el = el.childNodes[nodePosition(target)])) {
|
||||
el.focus();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
if (event.shiftKey && !bodyKeydown(event, 'insert')) {
|
||||
eventStop(event);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/** Disable maxlength for functions
|
||||
* @param HTMLSelectElement
|
||||
* @this HTMLSelectElement
|
||||
*/
|
||||
function functionChange(select) {
|
||||
var input = select.form[select.name.replace(/^function/, 'fields')];
|
||||
if (selectValue(select)) {
|
||||
if (input.origMaxLength === undefined) {
|
||||
input.origMaxLength = input.maxLength;
|
||||
function functionChange() {
|
||||
var input = this.form[this.name.replace(/^function/, 'fields')];
|
||||
if (input) { // undefined with the set data type
|
||||
if (selectValue(this)) {
|
||||
if (input.origType === undefined) {
|
||||
input.origType = input.type;
|
||||
input.origMaxLength = input.getAttribute('data-maxlength');
|
||||
}
|
||||
input.removeAttribute('data-maxlength');
|
||||
input.type = 'text';
|
||||
} else if (input.origType) {
|
||||
input.type = input.origType;
|
||||
if (input.origMaxLength >= 0) {
|
||||
input.setAttribute('data-maxlength', input.origMaxLength);
|
||||
}
|
||||
}
|
||||
input.removeAttribute('maxlength');
|
||||
} else if (input.origMaxLength >= 0) {
|
||||
input.maxLength = input.origMaxLength;
|
||||
oninput({target: input});
|
||||
}
|
||||
helpClose();
|
||||
}
|
||||
|
||||
/** Skip 'original' when typing
|
||||
* @param number
|
||||
* @this HTMLTableCellElement
|
||||
*/
|
||||
function skipOriginal(first) {
|
||||
var fnSelect = this.previousSibling.firstChild;
|
||||
if (fnSelect.selectedIndex < first) {
|
||||
fnSelect.selectedIndex = first;
|
||||
}
|
||||
}
|
||||
|
||||
/** Add new field in schema-less edit
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function fieldChange() {
|
||||
var row = cloneNode(parentTag(this, 'tr'));
|
||||
var inputs = qsa('input', row);
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
inputs[i].value = '';
|
||||
}
|
||||
// keep value in <select> (function)
|
||||
parentTag(this, 'table').appendChild(row);
|
||||
this.oninput = function () { };
|
||||
}
|
||||
|
||||
|
||||
@@ -371,11 +594,20 @@ function functionChange(select) {
|
||||
* @param string
|
||||
* @param function (XMLHttpRequest)
|
||||
* @param [string]
|
||||
* @param [string]
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
* @uses offlineMessage
|
||||
*/
|
||||
function ajax(url, callback, data) {
|
||||
function ajax(url, callback, data, message) {
|
||||
var request = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : false));
|
||||
if (request) {
|
||||
var ajaxStatus = qs('#ajaxstatus');
|
||||
if (message) {
|
||||
ajaxStatus.innerHTML = '<div class="message">' + message + '</div>';
|
||||
ajaxStatus.className = ajaxStatus.className.replace(/ hidden/g, '');
|
||||
} else {
|
||||
ajaxStatus.className += ' hidden';
|
||||
}
|
||||
request.open((data ? 'POST' : 'GET'), url);
|
||||
if (data) {
|
||||
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
||||
@@ -383,7 +615,12 @@ function ajax(url, callback, data) {
|
||||
request.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
|
||||
request.onreadystatechange = function () {
|
||||
if (request.readyState == 4) {
|
||||
callback(request);
|
||||
if (/^2/.test(request.status)) {
|
||||
callback(request);
|
||||
} else {
|
||||
ajaxStatus.innerHTML = (request.status ? request.responseText : '<div class="error">' + offlineMessage + '</div>');
|
||||
ajaxStatus.className = ajaxStatus.className.replace(/ hidden/g, '');
|
||||
}
|
||||
}
|
||||
};
|
||||
request.send(data);
|
||||
@@ -393,34 +630,71 @@ function ajax(url, callback, data) {
|
||||
|
||||
/** Use setHtml(key, value) for JSON response
|
||||
* @param string
|
||||
* @return XMLHttpRequest or false in case of an error
|
||||
* @return boolean false for success
|
||||
*/
|
||||
function ajaxSetHtml(url) {
|
||||
return ajax(url, function (request) {
|
||||
if (request.status) {
|
||||
var data = eval('(' + request.responseText + ')');
|
||||
for (var key in data) {
|
||||
setHtml(key, data[key]);
|
||||
}
|
||||
return !ajax(url, function (request) {
|
||||
var data = window.JSON ? JSON.parse(request.responseText) : eval('(' + request.responseText + ')');
|
||||
for (var key in data) {
|
||||
setHtml(key, data[key]);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/** Save form contents through AJAX
|
||||
* @param HTMLFormElement
|
||||
* @param string
|
||||
* @param [HTMLInputElement]
|
||||
* @return boolean
|
||||
*/
|
||||
function ajaxForm(form, message, button) {
|
||||
var data = [];
|
||||
var els = form.elements;
|
||||
for (var i = 0; i < els.length; i++) {
|
||||
var el = els[i];
|
||||
if (el.name && !el.disabled) {
|
||||
if (/^file$/i.test(el.type) && el.value) {
|
||||
return false;
|
||||
}
|
||||
if (!/^(checkbox|radio|submit|file)$/i.test(el.type) || el.checked || el == button) {
|
||||
data.push(encodeURIComponent(el.name) + '=' + encodeURIComponent(isTag(el, 'select') ? selectValue(el) : el.value));
|
||||
}
|
||||
}
|
||||
}
|
||||
data = data.join('&');
|
||||
|
||||
var url = form.action;
|
||||
if (!/post/i.test(form.method)) {
|
||||
url = url.replace(/\?.*/, '') + '?' + data;
|
||||
data = '';
|
||||
}
|
||||
return ajax(url, function (request) {
|
||||
setHtml('ajaxstatus', request.responseText);
|
||||
if (window.jush) {
|
||||
jush.highlight_tag(qsa('code', qs('#ajaxstatus')), 0);
|
||||
}
|
||||
messagesPrint(qs('#ajaxstatus'));
|
||||
}, data, message);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Display edit field
|
||||
* @param HTMLElement
|
||||
* @param MouseEvent
|
||||
* @param number display textarea instead of input, 2 - load long text
|
||||
* @param string warning to display
|
||||
* @param [string] warning to display
|
||||
* @return boolean
|
||||
* @this HTMLElement
|
||||
*/
|
||||
function selectClick(td, event, text, warning) {
|
||||
var target = event.target || event.srcElement;
|
||||
if (!event.ctrlKey || /input|textarea/i.test(td.firstChild.tagName) || /^a$/i.test(target.tagName)) {
|
||||
function selectClick(event, text, warning) {
|
||||
var td = this;
|
||||
var target = getTarget(event);
|
||||
if (!isCtrl(event) || isTag(td.firstChild, 'input|textarea') || isTag(target, 'a')) {
|
||||
return;
|
||||
}
|
||||
if (warning) {
|
||||
return alert(warning);
|
||||
alert(warning);
|
||||
return true;
|
||||
}
|
||||
var original = td.innerHTML;
|
||||
text = text || /\n/.test(original);
|
||||
@@ -429,12 +703,13 @@ function selectClick(td, event, text, warning) {
|
||||
if (!event) {
|
||||
event = window.event;
|
||||
}
|
||||
if (event.keyCode == 27 && !(event.ctrlKey || event.shiftKey || event.altKey || event.metaKey)) { // 27 - Esc
|
||||
if (event.keyCode == 27 && !event.shiftKey && !event.altKey && !isCtrl(event)) { // 27 - Esc
|
||||
inputBlur.apply(input);
|
||||
td.innerHTML = original;
|
||||
}
|
||||
};
|
||||
var pos = event.rangeOffset;
|
||||
var value = td.firstChild.alt || td.textContent || td.innerText;
|
||||
var value = (td.firstChild && td.firstChild.alt) || td.textContent || td.innerText;
|
||||
input.style.width = Math.max(td.clientWidth - 14, 20) + 'px'; // 14 = 2 * (td.border + td.padding + input.border)
|
||||
if (text) {
|
||||
var rows = 1;
|
||||
@@ -443,7 +718,7 @@ function selectClick(td, event, text, warning) {
|
||||
});
|
||||
input.rows = rows;
|
||||
}
|
||||
if (value == '\u00A0' || td.getElementsByTagName('i').length) { // or i - NULL
|
||||
if (qsa('i', td).length) { // <i> - NULL
|
||||
value = '';
|
||||
}
|
||||
if (document.selection) {
|
||||
@@ -456,10 +731,11 @@ function selectClick(td, event, text, warning) {
|
||||
}
|
||||
td.innerHTML = '';
|
||||
td.appendChild(input);
|
||||
setupSubmitHighlight(td);
|
||||
input.focus();
|
||||
if (text == 2) { // long text
|
||||
return ajax(location.href + '&' + encodeURIComponent(td.id) + '=', function (request) {
|
||||
if (request.status) {
|
||||
if (request.responseText) {
|
||||
input.value = request.responseText;
|
||||
input.name = td.id;
|
||||
}
|
||||
@@ -474,29 +750,29 @@ function selectClick(td, event, text, warning) {
|
||||
range.moveEnd('character', -input.value.length + pos);
|
||||
range.select();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Load and display next page in select
|
||||
* @param HTMLLinkElement
|
||||
* @param string
|
||||
* @param number
|
||||
* @return boolean
|
||||
* @param string
|
||||
* @return boolean false for success
|
||||
* @this HTMLLinkElement
|
||||
*/
|
||||
function selectLoadMore(a, limit, loading) {
|
||||
function selectLoadMore(limit, loading) {
|
||||
var a = this;
|
||||
var title = a.innerHTML;
|
||||
var href = a.href;
|
||||
a.innerHTML = loading;
|
||||
if (href) {
|
||||
a.removeAttribute('href');
|
||||
return ajax(href, function (request) {
|
||||
document.getElementById('table').innerHTML += request.responseText;
|
||||
var rows = 0;
|
||||
request.responseText.replace(/(^|\n)<tr/g, function () {
|
||||
rows++;
|
||||
});
|
||||
if (rows < limit) {
|
||||
return !ajax(href, function (request) {
|
||||
var tbody = document.createElement('tbody');
|
||||
tbody.innerHTML = request.responseText;
|
||||
qs('#table').appendChild(tbody);
|
||||
if (tbody.children.length < limit) {
|
||||
a.parentNode.removeChild(a);
|
||||
} else {
|
||||
a.href = href.replace(/\d+$/, function (page) {
|
||||
@@ -520,3 +796,118 @@ function eventStop(event) {
|
||||
event.cancelBubble = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Setup highlighting of default submit button on form field focus
|
||||
* @param HTMLElement
|
||||
*/
|
||||
function setupSubmitHighlight(parent) {
|
||||
for (var key in { input: 1, select: 1, textarea: 1 }) {
|
||||
var inputs = qsa(key, parent);
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
setupSubmitHighlightInput(inputs[i])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Setup submit highlighting for single element
|
||||
* @param HTMLElement
|
||||
*/
|
||||
function setupSubmitHighlightInput(input) {
|
||||
if (!/submit|image|file/.test(input.type)) {
|
||||
addEvent(input, 'focus', inputFocus);
|
||||
addEvent(input, 'blur', inputBlur);
|
||||
}
|
||||
}
|
||||
|
||||
/** Highlight default submit button
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function inputFocus() {
|
||||
var submit = findDefaultSubmit(this);
|
||||
if (submit) {
|
||||
alterClass(submit, 'default', true);
|
||||
}
|
||||
}
|
||||
|
||||
/** Unhighlight default submit button
|
||||
* @this HTMLInputElement
|
||||
*/
|
||||
function inputBlur() {
|
||||
var submit = findDefaultSubmit(this);
|
||||
if (submit) {
|
||||
alterClass(submit, 'default');
|
||||
}
|
||||
}
|
||||
|
||||
/** Find submit button used by Enter
|
||||
* @param HTMLElement
|
||||
* @return HTMLInputElement
|
||||
*/
|
||||
function findDefaultSubmit(el) {
|
||||
if (el.jushTextarea) {
|
||||
el = el.jushTextarea;
|
||||
}
|
||||
if (!el.form) {
|
||||
return null;
|
||||
}
|
||||
var inputs = qsa('input', el.form);
|
||||
for (var i = 0; i < inputs.length; i++) {
|
||||
var input = inputs[i];
|
||||
if (input.type == 'submit' && !input.style.zIndex) {
|
||||
return input;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** Add event listener
|
||||
* @param HTMLElement
|
||||
* @param string without 'on'
|
||||
* @param function
|
||||
*/
|
||||
function addEvent(el, action, handler) {
|
||||
if (el.addEventListener) {
|
||||
el.addEventListener(action, handler, false);
|
||||
} else {
|
||||
el.attachEvent('on' + action, handler);
|
||||
}
|
||||
}
|
||||
|
||||
/** Defer focusing element
|
||||
* @param HTMLElement
|
||||
*/
|
||||
function focus(el) {
|
||||
setTimeout(function () { // this has to be an anonymous function because Firefox passes some arguments to setTimeout callback
|
||||
el.focus();
|
||||
}, 0);
|
||||
}
|
||||
|
||||
/** Clone node and setup submit highlighting
|
||||
* @param HTMLElement
|
||||
* @return HTMLElement
|
||||
*/
|
||||
function cloneNode(el) {
|
||||
var el2 = el.cloneNode(true);
|
||||
var selector = 'input, select';
|
||||
var origEls = qsa(selector, el);
|
||||
var cloneEls = qsa(selector, el2);
|
||||
for (var i=0; i < origEls.length; i++) {
|
||||
var origEl = origEls[i];
|
||||
for (var key in origEl) {
|
||||
if (/^on/.test(key) && origEl[key]) {
|
||||
cloneEls[i][key] = origEl[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
setupSubmitHighlight(el2);
|
||||
return el2;
|
||||
}
|
||||
|
||||
oninput = function (event) {
|
||||
var target = event.target;
|
||||
var maxLength = target.getAttribute('data-maxlength');
|
||||
alterClass(target, 'maxlength', target.value && maxLength != null && target.value.length > maxLength); // maxLength could be 0
|
||||
};
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user