Compare commits
429 Commits
Author | SHA1 | Date |
---|---|---|
Ioma Taani | daef238a70 | 3 years ago |
Louis Lam | 5df34cd137 | 3 years ago |
Louis Lam | bf64095cea | 3 years ago |
Louis Lam | 2333d1c7a7 | 3 years ago |
Louis Lam | 95bae8289d | 3 years ago |
Louis Lam | 45f7c647a6 | 3 years ago |
Zegert Boele | dff1056bb1 | 3 years ago |
Zegert Boele | 62222c0336 | 3 years ago |
Louis Lam | 733d0af75f | 3 years ago |
Louis Lam | b88e74fad8 | 3 years ago |
Ivan Bratović | 734762b773 | 3 years ago |
Louis Lam | 0275d7a42b | 3 years ago |
Louis Lam | 41a6d1b701 | 3 years ago |
Louis Lam | c92153c97e | 3 years ago |
Louis Lam | ad82ab0305 | 3 years ago |
Louis Lam | f952d283c6 | 3 years ago |
Louis Lam | e164fabf81 | 3 years ago |
Louis Lam | bc69a331ee | 3 years ago |
Jasper Miller-Waugh | e4506963d9 | 3 years ago |
Zegert Boele | 222540898b | 3 years ago |
Andreas Brett | 8f44b9f618 | 3 years ago |
Louis Lam | 210566c7af | 3 years ago |
Louis Lam | c5e6628803 | 3 years ago |
Louis Lam | 3a1d8ddc11 | 3 years ago |
Nelson Chan | bc5f61b3ec | 3 years ago |
Nelson Chan | 57389fab2c | 3 years ago |
MrEddX | ee2c54cfd1 | 3 years ago |
Louis Lam | 82cde7c847 | 3 years ago |
Louis Lam | 1ba2034701 | 3 years ago |
Louis Lam | dee131c25d | 3 years ago |
Jasper Miller-Waugh | e5d6410caf | 3 years ago |
Louis Lam | e496c3b3be | 3 years ago |
Louis Lam | 69f5112b38 | 3 years ago |
Louis Lam | c094dc0c5b | 3 years ago |
Ivan Bratović | 1fb9b25d13 | 3 years ago |
Ivan Bratović | 9a135deac2 | 3 years ago |
Your Name | 8e6173c05e | 3 years ago |
Louis Lam | dec84282ed | 3 years ago |
Louis Lam | df80f413b5 | 3 years ago |
Louis Lam | 17e59f1d8d | 3 years ago |
Louis Lam | 973c2bb429 | 3 years ago |
Louis Lam | da0eaddeb8 | 3 years ago |
Louis Lam | b2bc8d9db9 | 3 years ago |
Louis Lam | 541068ff3b | 3 years ago |
Louis Lam | 83ee46454a | 3 years ago |
Louis Lam | 75b21c905f | 3 years ago |
Louis Lam | 60e12f4bfa | 3 years ago |
Jasper Miller-Waugh | 191b81ee07 | 3 years ago |
Jagger | f3651a1219 | 3 years ago |
Jasper Miller-Waugh | 12ef9f39c5 | 3 years ago |
Jasper Miller-Waugh | 4004926e64 | 3 years ago |
Adam Stachowicz | 4d3d6d6e25 | 3 years ago |
Adam Stachowicz | d06e5ef6fa | 3 years ago |
Adam Stachowicz | b12b848d97 | 3 years ago |
Adam Stachowicz | bb96a577ca | 3 years ago |
Adam Stachowicz | 8840ca618b | 3 years ago |
Minvinea | 8ec858fd14 | 3 years ago |
Louis Lam | 124c98ce76 | 3 years ago |
Louis Lam | 61135e8500 | 3 years ago |
Louis Lam | 08a58dec2b | 3 years ago |
Louis Lam | 741ed548da | 3 years ago |
Louis Lam | 52d80d3a5d | 3 years ago |
Louis Lam | 586c748d44 | 3 years ago |
Louis Lam | b5d6e96b1d | 3 years ago |
Juan Calderon-Perez | 68b74f07e4 | 3 years ago |
Louis Lam | bc615c2dd8 | 3 years ago |
Louis Lam | e7104737e7 | 3 years ago |
Louis Lam | 1dbf1c3dea | 3 years ago |
Jasper Miller-Waugh | 74688e69aa | 3 years ago |
Jasper Miller-Waugh | b32bfb3ff1 | 3 years ago |
Jasper Miller-Waugh | 24664cde2c | 3 years ago |
Jasper Miller-Waugh | 348c5ec995 | 3 years ago |
Jasper Miller-Waugh | 9143b73f84 | 3 years ago |
Jasper Miller-Waugh | 5e6d945095 | 3 years ago |
Louis | ba93129b18 | 3 years ago |
Louis | cf548df15f | 3 years ago |
Louis | caa2a34177 | 3 years ago |
Adam Stachowicz | 69aa60d1fb | 3 years ago |
Ivan Bratović | eaecd6e571 | 3 years ago |
Adam Stachowicz | f2a27a2cf1 | 3 years ago |
Louis | d4c9431142 | 3 years ago |
Louis | d7f7dba13f | 3 years ago |
Louis | 3e5ae00d25 | 3 years ago |
Louis Lam | 5311bef3eb | 3 years ago |
Louis Lam | c400595f67 | 3 years ago |
Louis Lam | e84f7dac60 | 3 years ago |
SiderealArt | 67a22399bc | 3 years ago |
SiderealArt | 947fc6001e | 3 years ago |
SiderealArt | c87e67ad1b | 3 years ago |
Ivan Bratović | 6f92774a8f | 3 years ago |
Ivan Bratović | 6e76ab7426 | 3 years ago |
Ivan Bratović | b2fbd7e263 | 3 years ago |
Ivan Bratović | 199e6ec82b | 3 years ago |
Adam Stachowicz | 18a99c2016 | 3 years ago |
Louis Lam | e261a27ebe | 3 years ago |
Louis Lam | de5cce9d90 | 3 years ago |
Louis Lam | b85c9186f9 | 3 years ago |
Louis Lam | eb22ad5ffe | 3 years ago |
Louis Lam | f5f4835b74 | 3 years ago |
Louis Lam | 44c1b336dc | 3 years ago |
Louis Lam | 110ec491ee | 3 years ago |
Louis Lam | 640b6e5b1c | 3 years ago |
Louis Lam | 234fba3978 | 3 years ago |
Louis Lam | 1285ccb537 | 3 years ago |
Juan Calderon-Perez | 6c542edfc9 | 3 years ago |
Juan Calderon-Perez | 767807dd22 | 3 years ago |
Juan Calderon-Perez | 546402f3d2 | 3 years ago |
Louis Lam | 698a38e773 | 3 years ago |
Louis Lam | 71884cf42a | 3 years ago |
Louis Lam | d676c782bb | 3 years ago |
Juan Calderon-Perez | dd773aa5a2 | 3 years ago |
Louis Lam | 2852e59ffb | 3 years ago |
MrEddX | cb3da50e7e | 3 years ago |
Louis Lam | f25653d778 | 3 years ago |
Adam Stachowicz | 2e7ad1b7b2 | 3 years ago |
Louis Lam | e0e1ab6fa6 | 3 years ago |
Louis Lam | 8d984881c9 | 3 years ago |
Louis Lam | 955f9ae20a | 3 years ago |
Louis Lam | a9e319517a | 3 years ago |
Louis Lam | 39ad8b4bb7 | 3 years ago |
Andreas Brett | 8fb8cbdaf3 | 3 years ago |
Andreas Brett | 3f3d8b4eb3 | 3 years ago |
Louis Lam | 9123e9461f | 3 years ago |
Louis Lam | 77addfebc8 | 3 years ago |
Louis Lam | 16846c7c6d | 3 years ago |
Louis Lam | d1c4d13903 | 3 years ago |
Louis Lam | 7cd4bfc11d | 3 years ago |
Adam Stachowicz | 1d5c0502ab | 3 years ago |
Adam Stachowicz | a1cda93ad5 | 3 years ago |
Louis Lam | 3bd420f0e0 | 3 years ago |
Louis Lam | 78424b4f2d | 3 years ago |
Louis Lam | f8055ed03d | 3 years ago |
Louis Lam | fe4724fc53 | 3 years ago |
Louis Lam | 7f0dda6a44 | 3 years ago |
Lakr Aream | 43791ee97e | 3 years ago |
Tarun Singh | 6362ef6a9c | 3 years ago |
Adam Stachowicz | 9d3a4e9d1e | 3 years ago |
Tarun Singh | 6c60096f56 | 3 years ago |
Tarun Singh | ba1e025353 | 3 years ago |
Louis Lam | a41a081727 | 3 years ago |
Louis Lam | a5f15f2319 | 3 years ago |
Louis Lam | e69799f613 | 3 years ago |
Louis Lam | 3c795bebe3 | 3 years ago |
Louis Lam | 3a43fec666 | 3 years ago |
Louis Lam | 24c645e437 | 3 years ago |
Louis Lam | 9d31da1fe8 | 3 years ago |
Juan Calderon-Perez | 2e4c42941a | 3 years ago |
Andreas Brett | 4fc2603818 | 3 years ago |
Andreas Brett | 7bc38d4231 | 3 years ago |
Andreas Brett | daad63d70b | 3 years ago |
Andreas Brett | 9ddd2c7365 | 3 years ago |
Adam Stachowicz | fa5ba12e14 | 3 years ago |
Adam Stachowicz | 85053f865e | 3 years ago |
Adam Stachowicz | 1239f6d1a2 | 3 years ago |
Tarun Singh | fed611d1b9 | 3 years ago |
Tarun Singh | bc68088350 | 3 years ago |
Louis Lam | 90200958cd | 3 years ago |
Louis Lam | aa13d74d7a | 3 years ago |
Ponkhy | d82f305f6e | 3 years ago |
Louis Lam | 7c63cbfd84 | 3 years ago |
Juan Calderon-Perez | c7e1267779 | 3 years ago |
Louis Lam | 5d0b54c292 | 3 years ago |
Juan Calderon-Perez | b50b390048 | 3 years ago |
Adam Stachowicz | 65158cb06b | 3 years ago |
Adam Stachowicz | 8fe5e4e605 | 3 years ago |
Adam Stachowicz | ab5ddae2ee | 3 years ago |
Adam Stachowicz | 89c64f4ea2 | 3 years ago |
Juan Calderon-Perez | 40a1ebecc5 | 3 years ago |
Juan Calderon-Perez | e1793596fe | 3 years ago |
Juan Calderon-Perez | c489058a57 | 3 years ago |
Juan Calderon-Perez | 95342ec006 | 3 years ago |
Juan Calderon-Perez | bdebbf8e40 | 3 years ago |
Juan Calderon-Perez | 9a9fca67d5 | 3 years ago |
Nelson Chan | 665bae0806 | 3 years ago |
Nelson Chan | e4be28a9e7 | 3 years ago |
Nelson Chan | 445674aacb | 3 years ago |
Nelson Chan | 2f7b60f5e5 | 3 years ago |
Nelson Chan | b83c59e308 | 3 years ago |
Lakr Aream | ce852dfa02 | 3 years ago |
Louis Lam | c9549c0de2 | 3 years ago |
Louis Lam | 957c292307 | 3 years ago |
kry008 | b5eb17ed93 | 3 years ago |
Louis Lam | d578300104 | 3 years ago |
Louis Lam | b77b33e790 | 3 years ago |
Andreas Brett | 4becb97a5d | 3 years ago |
Andreas Brett | 85e2b36424 | 3 years ago |
Andreas Brett | abdf1ae90a | 3 years ago |
Andreas Brett | 606c967985 | 3 years ago |
Andreas Brett | 93c231b4d9 | 3 years ago |
Andreas Brett | 9ad8e5f56a | 3 years ago |
Louis Lam | 8a481a1be0 | 3 years ago |
Andreas Brett | 657987a013 | 3 years ago |
Louis Lam | d74577608b | 3 years ago |
Louis Lam | 20a399c557 | 3 years ago |
Phuong Nguyen Minh | 060dde9827 | 3 years ago |
DX37 | 1d1601cf24 | 3 years ago |
Louis Lam | ff5f2e8dfb | 3 years ago |
Louis Lam | 5451fb7672 | 3 years ago |
Louis Lam | 56094a43d7 | 3 years ago |
Louis Lam | 68bbe8944a | 3 years ago |
Louis Lam | 8f1da6aa22 | 3 years ago |
Louis Lam | c0d6fe0d76 | 3 years ago |
DX37 | 29e4e41215 | 3 years ago |
Louis Lam | 7a1bb964e9 | 3 years ago |
Louis Lam | 3fe0e9bf1e | 3 years ago |
Louis Lam | 9982887783 | 3 years ago |
Louis Lam | c31efc0ef4 | 3 years ago |
MrEddX | 6463d4b209 | 3 years ago |
Louis Lam | acada8028a | 3 years ago |
MrEddX | d0b0c64b81 | 3 years ago |
Louis Lam | cd04ac4557 | 3 years ago |
Louis Lam | d7d2f7b7fc | 3 years ago |
Daniel Patrón Gómez | 5a05d135b8 | 3 years ago |
Louis Lam | e03ee593e2 | 3 years ago |
Louis Lam | 6c1ee70e15 | 3 years ago |
Louis Lam | 5c3892313e | 3 years ago |
Louis Lam | c57c94642c | 3 years ago |
Louis Lam | 62f168a2a5 | 3 years ago |
Louis Lam | c808f78f09 | 3 years ago |
Louis Lam | 9c80e1c732 | 3 years ago |
Andreas Brett | acc2995d86 | 3 years ago |
Andreas Brett | 7def9dcec7 | 3 years ago |
NeuralMiner | a35569481d | 3 years ago |
NeuralMiner | 9ddffc0f7f | 3 years ago |
NeuralMiner | 76e7c8b276 | 3 years ago |
NeuralMiner | 572a5300aa | 3 years ago |
NeuralMiner | e1f1d4a959 | 3 years ago |
Louis Lam | c6fc385289 | 3 years ago |
Louis Lam | c645658161 | 3 years ago |
Louis Lam | 182597944d | 3 years ago |
Louis Lam | 8eaa8116c3 | 3 years ago |
Louis Lam | 3512faad14 | 3 years ago |
Louis Lam | f11417e854 | 3 years ago |
Juan Calderon-Perez | b5857f7c0c | 3 years ago |
Juan Calderon-Perez | 6277babf25 | 3 years ago |
Louis Lam | 5f36d2acda | 3 years ago |
Louis Lam | cc36ff5210 | 3 years ago |
Louis Lam | c363d3374e | 3 years ago |
Louis Lam | 65a8cb5307 | 3 years ago |
Lukas | f74b2662c5 | 3 years ago |
Louis Lam | 300a95d779 | 3 years ago |
Louis Lam | 23714ab688 | 3 years ago |
Louis Lam | 16b44001e7 | 3 years ago |
Louis Lam | f2f8f33b86 | 3 years ago |
Louis Lam | 6e18f39eb4 | 3 years ago |
Louis Lam | 68d44dd9b3 | 3 years ago |
Louis Lam | 20d59e5a13 | 3 years ago |
Louis Lam | ae31eb6ba9 | 3 years ago |
Andreas Brett | df4682d19b | 3 years ago |
Andreas Brett | 11a1f35cc5 | 3 years ago |
Juan Calderon-Perez | 2a3ce15328 | 3 years ago |
Juan Calderon-Perez | 7cb25255bf | 3 years ago |
Juan Calderon-Perez | c622f7958f | 3 years ago |
Louis Lam | df5efcc71c | 3 years ago |
J. Eckert | 4cd66b20b1 | 3 years ago |
J. Eckert | 1276102c18 | 3 years ago |
Louis Lam | 6944b35ea7 | 3 years ago |
Louis Lam | 88757ebbbe | 3 years ago |
Daniel Patrón Gómez | 0a73b84ae6 | 3 years ago |
Daniel Patrón Gómez | 15f36f96c3 | 3 years ago |
Louis Lam | edcaf93446 | 3 years ago |
Louis Lam | dec175d55f | 3 years ago |
Louis Lam | 9a60f69f66 | 3 years ago |
Daniel Patrón Gómez | 53a008ae2b | 3 years ago |
Bert Verhelst | 1d63dd9ddd | 3 years ago |
Bert Verhelst | 61627545a5 | 3 years ago |
Louis Lam | 176fa6b60d | 3 years ago |
Louis Lam | cb43ecb46e | 3 years ago |
Louis Lam | 2e24312f67 | 3 years ago |
Louis Lam | 6ff3cb275e | 3 years ago |
Louis Lam | 9d364b28b1 | 3 years ago |
Louis Lam | bc3e3f9118 | 3 years ago |
Louis Lam | 0f3ab7b1d8 | 3 years ago |
NeuralMiner | 8cb26d2b31 | 3 years ago |
januridp | d94fbede32 | 3 years ago |
januridp | 76e619c066 | 3 years ago |
januridp | 4e4f94ab98 | 3 years ago |
januridp | ed3a558397 | 3 years ago |
Louis Lam | a419aa527f | 3 years ago |
Louis Lam | 4d26825cbe | 3 years ago |
Louis Lam | 7276f34d90 | 3 years ago |
Louis Lam | e1eeb44e7f | 3 years ago |
Louis Lam | f4b8da0a5c | 3 years ago |
Louis Lam | 4178983df3 | 3 years ago |
Louis Lam | 7ac0ab2e34 | 3 years ago |
Louis Lam | cd211a6be7 | 3 years ago |
Louis Lam | 4e71ab7406 | 3 years ago |
Louis Lam | 76c68071f1 | 3 years ago |
Phuong Nguyen Minh | bda481c61e | 3 years ago |
iooner | 8242a1586d | 3 years ago |
Louis Lam | c593a962c2 | 3 years ago |
Louis Lam | c9b4d2ae2a | 3 years ago |
Louis Lam | 37105d720b | 3 years ago |
Louis Lam | 3b74b727f2 | 3 years ago |
firattemel | 2f0119bc3f | 3 years ago |
Louis Lam | a7d2a34dae | 3 years ago |
Louis Lam | 60acb91fc8 | 3 years ago |
Louis Lam | f51156f18e | 3 years ago |
Louis Lam | 8338881927 | 3 years ago |
Louis Lam | 674b387c95 | 3 years ago |
Louis Lam | 5ff9a64e5e | 3 years ago |
Louis Lam | 4bee57ea7f | 3 years ago |
Louis Lam | f75c9e4f0c | 3 years ago |
xJoker | 8ab4788f80 | 3 years ago |
xJoker | 4e4ab0577e | 3 years ago |
xJoker | 6e04ec436e | 3 years ago |
xJoker | 2d471a5e84 | 3 years ago |
xJoker | cae194f58f | 3 years ago |
Aaron Erkenswick | 655ccc86b9 | 3 years ago |
Louis Lam | e2dbacb383 | 3 years ago |
Lukas | 89b34b5748 | 3 years ago |
Andreas Brett | 86dcc9bc8f | 3 years ago |
Louis Lam | 9b05e86c25 | 3 years ago |
Louis Lam | 145b722aec | 3 years ago |
Louis Lam | 2ff7c4de5d | 3 years ago |
Louis Lam | 79c81395bc | 3 years ago |
Louis Lam | 178e5cd2c0 | 3 years ago |
hrtkpf | 84507268ad | 3 years ago |
wuwenjing | 843992c410 | 3 years ago |
zsxeee | 33f773fcd0 | 3 years ago |
zsxeee | 26841a64f0 | 3 years ago |
Phuong Nguyen Minh | 89c0f8b734 | 3 years ago |
wuwenjing | 57a76e6129 | 3 years ago |
Phuong Nguyen Minh | dc805cff97 | 3 years ago |
giacomo892 | 3fe3450533 | 3 years ago |
Lukas | 330cd6e058 | 3 years ago |
wuwenjing | a2f2253221 | 3 years ago |
Louis Lam | 1e5ce92917 | 3 years ago |
Louis Lam | 0d7c2960b0 | 3 years ago |
Louis Lam | 82343de972 | 3 years ago |
Adam Stachowicz | 521d57c483 | 3 years ago |
Adam Stachowicz | 281671b938 | 3 years ago |
Lukas | 30d8aadf12 | 3 years ago |
KangAlleW | 2939bd4138 | 3 years ago |
KangAlleW | dcf15c3eb7 | 3 years ago |
KangAlleW | 7c9ed98408 | 3 years ago |
KangAlleW | 4b9f0a3fe6 | 3 years ago |
KangAlleW | 5b67fec084 | 3 years ago |
Louis Lam | 407581ee07 | 3 years ago |
Louis Lam | 11c3c636e0 | 3 years ago |
Louis Lam | 911d4ea37b | 3 years ago |
Louis Lam | 4039c6549e | 3 years ago |
giacomo892 | d733ec018e | 3 years ago |
Nelson Chan | 03b07730d3 | 3 years ago |
Louis Lam | dbc87d8ab3 | 3 years ago |
dhfhfk | 05b691d4c9 | 3 years ago |
Louis Lam | 029d6412da | 3 years ago |
Louis Lam | 9f12f95cce | 3 years ago |
Kyungyoon Kim | c1112a32df | 3 years ago |
Kyungyoon Kim | efc78acfeb | 3 years ago |
zsxeee | 9e01959d15 | 3 years ago |
zsxeee | 3fe91c52cb | 3 years ago |
Tomas Rohrer | 5269dcec60 | 3 years ago |
zsxeee | a2cc7d1db9 | 3 years ago |
Louis Lam | 18c5a16783 | 3 years ago |
Andreas Brett | 2538bd04ce | 3 years ago |
Louis Lam | b7528b9a4e | 3 years ago |
Thomas LÉVEIL | 9c058054b9 | 3 years ago |
Louis Lam | c6683e2a9b | 3 years ago |
Louis Lam | b558708be2 | 3 years ago |
Louis Lam | fd0dd2d284 | 3 years ago |
xJoker | 1bc77a06e5 | 3 years ago |
xJoker | 69c623ac2b | 3 years ago |
Atlochowski | 69ffee55dd | 3 years ago |
Slayer | d769c4426c | 3 years ago |
Atlochowski | ebf0671fef | 3 years ago |
Louis Lam | 97af09fd50 | 3 years ago |
Louis Lam | 5b19e3f025 | 3 years ago |
wuwenjing | ce2df137e6 | 3 years ago |
wuwenjing | 6d9b71c054 | 3 years ago |
Atlochowski | a433de74e6 | 3 years ago |
LouisLam | 8e3f43d60b | 3 years ago |
Louis Lam | 2a1fd93444 | 3 years ago |
Andreas Brett | dc1de50a02 | 3 years ago |
Andreas Brett | e223e826a3 | 3 years ago |
Andreas Brett | 0e6d7694ce | 3 years ago |
Andreas Brett | 503d1f0a91 | 3 years ago |
Andreas Brett | 11bcd1e2ed | 3 years ago |
Andreas Brett | 06310423f4 | 3 years ago |
Andreas Brett | e127e168b6 | 3 years ago |
Andreas Brett | b5b391c73b | 3 years ago |
Andreas Brett | 075535ba46 | 3 years ago |
Andreas Brett | 13cf6891ac | 3 years ago |
Louis Lam | ad0cde6554 | 3 years ago |
Louis Lam | 25d18f0da3 | 3 years ago |
RisedSky | e9445bb2e3 | 3 years ago |
RisedSky | ecc25ba596 | 3 years ago |
LouisLam | e5286b0973 | 3 years ago |
LouisLam | 4e94cb9aad | 3 years ago |
Daniel S. Billing | 037fdd73a3 | 3 years ago |
Daniel S. Billing | bb9a936658 | 3 years ago |
Bert Verhelst | 5445c2a2ff | 3 years ago |
Bert Verhelst | dc08510e72 | 3 years ago |
Daniel S. Billing | 62805014df | 3 years ago |
Daniel S. Billing | c79e80442a | 3 years ago |
Daniel S. Billing | f0ff96afd9 | 3 years ago |
Louis Lam | 8083368a81 | 3 years ago |
RisedSky | afb75e07d5 | 3 years ago |
RisedSky | efd3822930 | 3 years ago |
dhfhfk | 2adac64c83 | 3 years ago |
Louis | cee225bcb2 | 3 years ago |
Louis | 8958c21736 | 3 years ago |
Louis Lam | 4ba2025451 | 3 years ago |
Bert Verhelst | 5137c80c07 | 3 years ago |
Lukas | 792f3c7c5c | 3 years ago |
Bert Verhelst | 8a739af5ad | 3 years ago |
Lukas | edb75808d8 | 3 years ago |
Lukas | 5e3ea3293c | 3 years ago |
Nelson Chan | ac80631bcd | 3 years ago |
Nelson Chan | 8caf47988c | 3 years ago |
Nelson Chan | 6cf2eb036d | 3 years ago |
Nelson Chan | dca5a59dbc | 3 years ago |
Nelson Chan | 656a4d6270 | 3 years ago |
Bert Verhelst | d71d27220b | 3 years ago |
Bert Verhelst | fba4f86552 | 3 years ago |
Bert Verhelst | b8093e909b | 3 years ago |
Bert Verhelst | c3c273f9df | 3 years ago |
Bert Verhelst | daab2a05f5 | 3 years ago |
Bert Verhelst | ec4b7e4064 | 3 years ago |
Bert Verhelst | 8be4bf0e16 | 3 years ago |
Bert Verhelst | 162ef04c41 | 3 years ago |
Bert Verhelst | a0ffa42b42 | 3 years ago |
Bert Verhelst | 550825927c | 3 years ago |
Bert Verhelst | afeb424dc0 | 3 years ago |
Bert Verhelst | 6b44116245 | 3 years ago |
Bert Verhelst | 7ee89fab5c | 3 years ago |
Bert Verhelst | 3f0b85e5a8 | 3 years ago |
Denis Freund | efbadd0737 | 3 years ago |
Denis Freund | b67b4d5afd | 3 years ago |
113 changed files with 12302 additions and 3408 deletions
@ -1,22 +0,0 @@ |
|||
--- |
|||
name: Ask for help |
|||
about: You can ask any question related to Uptime Kuma. |
|||
title: '' |
|||
labels: help |
|||
assignees: '' |
|||
|
|||
--- |
|||
**Is it a duplicate question?** |
|||
Please search in Issues without filters: https://github.com/louislam/uptime-kuma/issues?q= |
|||
|
|||
|
|||
**Describe your problem** |
|||
|
|||
|
|||
**Info** |
|||
Uptime Kuma Version: |
|||
Using Docker?: Yes/No |
|||
Docker Version: |
|||
Node.js Version (Without Docker only): |
|||
OS: |
|||
Browser: |
@ -0,0 +1,68 @@ |
|||
name: "❓ Ask for help" |
|||
description: "Submit any question related to Uptime Kuma" |
|||
#title: "[Help] " |
|||
labels: [help] |
|||
body: |
|||
- type: checkboxes |
|||
id: no-duplicate-issues |
|||
attributes: |
|||
label: "⚠️ Please verify that this bug has NOT been raised before." |
|||
description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)" |
|||
options: |
|||
- label: "I checked and didn't find similar issue" |
|||
required: true |
|||
- type: checkboxes |
|||
attributes: |
|||
label: "🛡️ Security Policy" |
|||
description: Please review the security policy before reporting security related issues/bugs. |
|||
options: |
|||
- label: I agree to have read this project [Security Policy](https://github.com/louislam/uptime-kuma/security/policy) |
|||
required: true |
|||
- type: textarea |
|||
id: steps-to-reproduce |
|||
validations: |
|||
required: true |
|||
attributes: |
|||
label: "📝 Describe your problem" |
|||
description: "Please walk us through it step by step." |
|||
placeholder: "Describe what are you asking for..." |
|||
- type: input |
|||
id: uptime-kuma-version |
|||
attributes: |
|||
label: "🐻 Uptime-Kuma Version" |
|||
description: "Which version of Uptime-Kuma are you running? Please do NOT provide the docker tag such as latest or 1" |
|||
placeholder: "Ex. 1.10.0" |
|||
validations: |
|||
required: true |
|||
- type: input |
|||
id: operating-system |
|||
attributes: |
|||
label: "💻 Operating System and Arch" |
|||
description: "Which OS is your server/device running on?" |
|||
placeholder: "Ex. Ubuntu 20.04 x86" |
|||
validations: |
|||
required: true |
|||
- type: input |
|||
id: browser-vendor |
|||
attributes: |
|||
label: "🌐 Browser" |
|||
description: "Which browser are you running on?" |
|||
placeholder: "Ex. Google Chrome 95.0.4638.69" |
|||
validations: |
|||
required: true |
|||
- type: input |
|||
id: docker-version |
|||
attributes: |
|||
label: "🐋 Docker Version" |
|||
description: "If running with Docker, which version are you running?" |
|||
placeholder: "Ex. Docker 20.10.9 / K8S / Podman" |
|||
validations: |
|||
required: false |
|||
- type: input |
|||
id: nodejs-version |
|||
attributes: |
|||
label: "🟩 NodeJS Version" |
|||
description: "If running with Node.js? which version are you running?" |
|||
placeholder: "Ex. 14.18.0" |
|||
validations: |
|||
required: false |
@ -1,42 +0,0 @@ |
|||
--- |
|||
name: Bug report |
|||
about: Create a report to help us improve |
|||
title: '' |
|||
labels: bug |
|||
assignees: '' |
|||
|
|||
--- |
|||
|
|||
**Is it a duplicate question?** |
|||
Please search in Issues without filters: https://github.com/louislam/uptime-kuma/issues?q= |
|||
|
|||
**Describe the bug** |
|||
A clear and concise description of what the bug is. |
|||
|
|||
**To Reproduce** |
|||
Steps to reproduce the behavior: |
|||
|
|||
1. Go to '...' |
|||
2. Click on '....' |
|||
3. Scroll down to '....' |
|||
4. See error |
|||
|
|||
**Expected behavior** |
|||
A clear and concise description of what you expected to happen. |
|||
|
|||
**Info** |
|||
Uptime Kuma Version: |
|||
Using Docker?: Yes/No |
|||
Docker Version: |
|||
Node.js Version (Without Docker only): |
|||
OS: |
|||
Browser: |
|||
|
|||
**Screenshots** |
|||
If applicable, add screenshots to help explain your problem. |
|||
|
|||
**Error Log** |
|||
It is easier for us to find out the problem. |
|||
|
|||
Docker: `docker logs <container id>` |
|||
PM2: `~/.pm2/logs/` (e.g. `/home/ubuntu/.pm2/logs`) |
@ -0,0 +1,99 @@ |
|||
name: "🐛 Bug Report" |
|||
description: "Submit a bug report to help us improve" |
|||
#title: "[Bug] " |
|||
labels: [bug] |
|||
body: |
|||
- type: checkboxes |
|||
id: no-duplicate-issues |
|||
attributes: |
|||
label: "⚠️ Please verify that this bug has NOT been raised before." |
|||
description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)" |
|||
options: |
|||
- label: "I checked and didn't find similar issue" |
|||
required: true |
|||
- type: checkboxes |
|||
attributes: |
|||
label: "🛡️ Security Policy" |
|||
description: Please review the security policy before reporting security related issues/bugs. |
|||
options: |
|||
- label: I agree to have read this project [Security Policy](https://github.com/louislam/uptime-kuma/security/policy) |
|||
required: true |
|||
- type: textarea |
|||
id: description |
|||
validations: |
|||
required: false |
|||
attributes: |
|||
label: "Description" |
|||
description: "You could also upload screenshots" |
|||
- type: textarea |
|||
id: steps-to-reproduce |
|||
validations: |
|||
required: true |
|||
attributes: |
|||
label: "👟 Reproduction steps" |
|||
description: "How do you trigger this bug? Please walk us through it step by step." |
|||
placeholder: "..." |
|||
- type: textarea |
|||
id: expected-behavior |
|||
validations: |
|||
required: true |
|||
attributes: |
|||
label: "👀 Expected behavior" |
|||
description: "What did you think would happen?" |
|||
placeholder: "..." |
|||
- type: textarea |
|||
id: actual-behavior |
|||
validations: |
|||
required: true |
|||
attributes: |
|||
label: "😓 Actual Behavior" |
|||
description: "What actually happen?" |
|||
placeholder: "..." |
|||
- type: input |
|||
id: uptime-kuma-version |
|||
attributes: |
|||
label: "🐻 Uptime-Kuma Version" |
|||
description: "Which version of Uptime-Kuma are you running? Please do NOT provide the docker tag such as latest or 1" |
|||
placeholder: "Ex. 1.10.0" |
|||
validations: |
|||
required: true |
|||
- type: input |
|||
id: operating-system |
|||
attributes: |
|||
label: "💻 Operating System and Arch" |
|||
description: "Which OS is your server/device running on?" |
|||
placeholder: "Ex. Ubuntu 20.04 x86" |
|||
validations: |
|||
required: true |
|||
- type: input |
|||
id: browser-vendor |
|||
attributes: |
|||
label: "🌐 Browser" |
|||
description: "Which browser are you running on?" |
|||
placeholder: "Ex. Google Chrome 95.0.4638.69" |
|||
validations: |
|||
required: true |
|||
- type: input |
|||
id: docker-version |
|||
attributes: |
|||
label: "🐋 Docker Version" |
|||
description: "If running with Docker, which version are you running?" |
|||
placeholder: "Ex. Docker 20.10.9 / K8S / Podman" |
|||
validations: |
|||
required: false |
|||
- type: input |
|||
id: nodejs-version |
|||
attributes: |
|||
label: "🟩 NodeJS Version" |
|||
description: "If running with Node.js? which version are you running?" |
|||
placeholder: "Ex. 14.18.0" |
|||
validations: |
|||
required: false |
|||
- type: textarea |
|||
id: logs |
|||
attributes: |
|||
label: "📝 Relevant log output" |
|||
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. |
|||
render: shell |
|||
validations: |
|||
required: false |
@ -1,22 +0,0 @@ |
|||
--- |
|||
name: Feature request |
|||
about: Suggest an idea for this project |
|||
title: '' |
|||
labels: enhancement |
|||
assignees: '' |
|||
|
|||
--- |
|||
**Is it a duplicate question?** |
|||
Please search in Issues without filters: https://github.com/louislam/uptime-kuma/issues?q= |
|||
|
|||
**Is your feature request related to a problem? Please describe.** |
|||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] |
|||
|
|||
**Describe the solution you'd like** |
|||
A clear and concise description of what you want to happen. |
|||
|
|||
**Describe alternatives you've considered** |
|||
A clear and concise description of any alternative solutions or features you've considered. |
|||
|
|||
**Additional context** |
|||
Add any other context or screenshots about the feature request here. |
@ -0,0 +1,59 @@ |
|||
name: 🚀 Feature Request |
|||
description: "Submit a proposal for a new feature" |
|||
#title: "[Feature] " |
|||
labels: [feature-request] |
|||
body: |
|||
- type: checkboxes |
|||
id: no-duplicate-issues |
|||
attributes: |
|||
label: "⚠️ Please verify that this feature request has NOT been suggested before." |
|||
description: "Search in the issues sections by clicking [HERE](https://github.com/louislam/uptime-kuma/issues?q=)" |
|||
options: |
|||
- label: "I checked and didn't find similar feature request" |
|||
required: true |
|||
- type: dropdown |
|||
id: feature-area |
|||
attributes: |
|||
label: "🏷️ Feature Request Type" |
|||
description: "What kind of feature request is this?" |
|||
multiple: true |
|||
options: |
|||
- API |
|||
- New Notification |
|||
- New Monitor |
|||
- UI Feature |
|||
- Other |
|||
validations: |
|||
required: true |
|||
- type: textarea |
|||
id: feature-description |
|||
validations: |
|||
required: true |
|||
attributes: |
|||
label: "🔖 Feature description" |
|||
description: "A clear and concise description of what the feature request is." |
|||
placeholder: "You should add ..." |
|||
- type: textarea |
|||
id: solution |
|||
validations: |
|||
required: true |
|||
attributes: |
|||
label: "✔️ Solution" |
|||
description: "A clear and concise description of what you want to happen." |
|||
placeholder: "In my use-case, ..." |
|||
- type: textarea |
|||
id: alternatives |
|||
validations: |
|||
required: false |
|||
attributes: |
|||
label: "❓ Alternatives" |
|||
description: "A clear and concise description of any alternative solutions or features you've considered." |
|||
placeholder: "I have considered ..." |
|||
- type: textarea |
|||
id: additional-context |
|||
validations: |
|||
required: false |
|||
attributes: |
|||
label: "📝 Additional Context" |
|||
description: "Add any other context or screenshots about the feature request here." |
|||
placeholder: "..." |
@ -0,0 +1,28 @@ |
|||
# Description |
|||
|
|||
Fixes #(issue) |
|||
|
|||
## Type of change |
|||
|
|||
Please delete options that are not relevant. |
|||
|
|||
- Bug fix (non-breaking change which fixes an issue) |
|||
- User Interface |
|||
- New feature (non-breaking change which adds functionality) |
|||
- Breaking change (fix or feature that would cause existing functionality to not work as expected) |
|||
- Translation update |
|||
- Other |
|||
- This change requires a documentation update |
|||
|
|||
## Checklist |
|||
|
|||
- [ ] My code follows the style guidelines of this project |
|||
- [ ] I ran ESLint and other linters for modified files |
|||
- [ ] I have performed a self-review of my own code and test it |
|||
- [ ] I have commented my code, particularly in hard-to-understand areas |
|||
- [ ] My changes generate no new warnings |
|||
- [ ] My code needed automated testing. I have added them (this is optional task) |
|||
|
|||
## Screenshots (if any) |
|||
|
|||
Please do not use any external image service. Instead, just paste in or drag and drop the image here and it will be uploaded automatically. |
@ -0,0 +1,22 @@ |
|||
name: 'Automatically close stale issues and PRs' |
|||
on: |
|||
schedule: |
|||
- cron: '0 0 * * *' |
|||
#Run once a day at midnight |
|||
|
|||
jobs: |
|||
stale: |
|||
runs-on: ubuntu-latest |
|||
steps: |
|||
- uses: actions/stale@v4 |
|||
with: |
|||
stale-issue-message: 'We are clearing up our old issues and your ticket has been open for 6 months with no activity. Remove stale label or comment or this will be closed in 7 days.' |
|||
stale-pr-message: 'We are clearing up our old Pull Requests and yours has been open for 6 months with no activity. Remove stale label or comment or this will be closed in 7 days.' |
|||
close-issue-message: 'This issue was closed because it has been stalled for 7 days with no activity.' |
|||
close-pr-message: 'This PR was closed because it has been stalled for 7 days with no activity.' |
|||
days-before-stale: 180 |
|||
days-before-close: 7 |
|||
exempt-issue-labels: 'News,Medium,High,discussion,bug,doc,' |
|||
exempt-pr-labels: 'awaiting-approval,work-in-progress,enhancement,' |
|||
exempt-issue-assignees: 'louislam' |
|||
exempt-pr-assignees: 'louislam' |
@ -0,0 +1,5 @@ |
|||
module.exports = { |
|||
"rootDir": "..", |
|||
"testRegex": "./test/backend.spec.js", |
|||
}; |
|||
|
@ -1,5 +1,5 @@ |
|||
module.exports = { |
|||
"rootDir": ".", |
|||
"rootDir": "..", |
|||
"testRegex": "./test/frontend.spec.js", |
|||
}; |
|||
|
@ -0,0 +1,7 @@ |
|||
-- You should not modify if this have pushed to Github, unless it does serious wrong with the db. |
|||
BEGIN TRANSACTION; |
|||
|
|||
ALTER TABLE user |
|||
ADD twofa_last_token VARCHAR(6); |
|||
|
|||
COMMIT; |
@ -0,0 +1,13 @@ |
|||
-- You should not modify if this have pushed to Github, unless it does serious wrong with the db. |
|||
BEGIN TRANSACTION; |
|||
|
|||
ALTER TABLE monitor |
|||
ADD method TEXT default 'GET' not null; |
|||
|
|||
ALTER TABLE monitor |
|||
ADD body TEXT default null; |
|||
|
|||
ALTER TABLE monitor |
|||
ADD headers TEXT default null; |
|||
|
|||
COMMIT; |
@ -0,0 +1,18 @@ |
|||
-- You should not modify if this have pushed to Github, unless it does serious wrong with the db. |
|||
BEGIN TRANSACTION; |
|||
|
|||
CREATE TABLE [notification_sent_history] ( |
|||
[id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, |
|||
[type] VARCHAR(50) NOT NULL, |
|||
[monitor_id] INTEGER NOT NULL, |
|||
[days] INTEGER NOT NULL, |
|||
UNIQUE([type], [monitor_id], [days]) |
|||
); |
|||
|
|||
CREATE INDEX [good_index] ON [notification_sent_history] ( |
|||
[type], |
|||
[monitor_id], |
|||
[days] |
|||
); |
|||
|
|||
COMMIT; |
@ -0,0 +1,6 @@ |
|||
module.exports = { |
|||
apps: [{ |
|||
name: "uptime-kuma", |
|||
script: "./server/server.js", |
|||
}] |
|||
} |
@ -1,32 +0,0 @@ |
|||
# Uptime-Kuma K8s Deployment |
|||
|
|||
⚠ Warning: K8s deployment is provided by contributors. I have no experience with K8s and I can't fix error in the future. I only test Docker and Node.js. Use at your own risk. |
|||
|
|||
## How does it work? |
|||
|
|||
Kustomize is a tool which builds a complete deployment file for all config elements. |
|||
You can edit the files in the ```uptime-kuma``` folder except the ```kustomization.yml``` until you know what you're doing. |
|||
If you want to choose another namespace you can edit the ```kustomization.yml``` in the ```kubernetes```-Folder and change the ```namespace: uptime-kuma``` to something you like. |
|||
|
|||
It creates a certificate with the specified Issuer and creates the Ingress for the Uptime-Kuma ClusterIP-Service. |
|||
|
|||
## What do I have to edit? |
|||
|
|||
You have to edit the ```ingressroute.yml``` to your needs. |
|||
This ingressroute.yml is for the [nginx-ingress-controller](https://kubernetes.github.io/ingress-nginx/) in combination with the [cert-manager](https://cert-manager.io/). |
|||
|
|||
- Host |
|||
- Secrets and secret names |
|||
- (Cluster)Issuer (optional) |
|||
- The Version in the Deployment-File |
|||
- Update: |
|||
- Change to newer version and run the above commands, it will update the pods one after another |
|||
|
|||
## How To use |
|||
|
|||
- Install [kustomize](https://kubectl.docs.kubernetes.io/installation/kustomize/) |
|||
- Edit files mentioned above to your needs |
|||
- Run ```kustomize build > apply.yml``` |
|||
- Run ```kubectl apply -f apply.yml``` |
|||
|
|||
Now you should see some k8s magic and Uptime-Kuma should be available at the specified address. |
@ -1,10 +0,0 @@ |
|||
namespace: uptime-kuma |
|||
namePrefix: uptime-kuma- |
|||
|
|||
commonLabels: |
|||
app: uptime-kuma |
|||
|
|||
bases: |
|||
- uptime-kuma |
|||
|
|||
|
@ -1,45 +0,0 @@ |
|||
apiVersion: apps/v1 |
|||
kind: Deployment |
|||
metadata: |
|||
labels: |
|||
component: uptime-kuma |
|||
name: deployment |
|||
spec: |
|||
selector: |
|||
matchLabels: |
|||
component: uptime-kuma |
|||
replicas: 1 |
|||
strategy: |
|||
type: Recreate |
|||
|
|||
template: |
|||
metadata: |
|||
labels: |
|||
component: uptime-kuma |
|||
spec: |
|||
containers: |
|||
- name: app |
|||
image: louislam/uptime-kuma:1 |
|||
ports: |
|||
- containerPort: 3001 |
|||
volumeMounts: |
|||
- mountPath: /app/data |
|||
name: storage |
|||
livenessProbe: |
|||
exec: |
|||
command: |
|||
- node |
|||
- extra/healthcheck.js |
|||
initialDelaySeconds: 180 |
|||
periodSeconds: 60 |
|||
timeoutSeconds: 30 |
|||
readinessProbe: |
|||
httpGet: |
|||
path: / |
|||
port: 3001 |
|||
scheme: HTTP |
|||
|
|||
volumes: |
|||
- name: storage |
|||
persistentVolumeClaim: |
|||
claimName: pvc |
@ -1,39 +0,0 @@ |
|||
apiVersion: networking.k8s.io/v1 |
|||
kind: Ingress |
|||
metadata: |
|||
annotations: |
|||
kubernetes.io/ingress.class: nginx |
|||
cert-manager.io/cluster-issuer: letsencrypt-prod |
|||
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" |
|||
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" |
|||
nginx.ingress.kubernetes.io/server-snippets: | |
|||
location / { |
|||
proxy_set_header Upgrade $http_upgrade; |
|||
proxy_http_version 1.1; |
|||
proxy_set_header X-Forwarded-Host $http_host; |
|||
proxy_set_header X-Forwarded-Proto $scheme; |
|||
proxy_set_header X-Forwarded-For $remote_addr; |
|||
proxy_set_header Host $host; |
|||
proxy_set_header Connection "upgrade"; |
|||
proxy_set_header X-Real-IP $remote_addr; |
|||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
|||
proxy_set_header Upgrade $http_upgrade; |
|||
proxy_cache_bypass $http_upgrade; |
|||
} |
|||
name: ingress |
|||
spec: |
|||
tls: |
|||
- hosts: |
|||
- example.com |
|||
secretName: example-com-tls |
|||
rules: |
|||
- host: example.com |
|||
http: |
|||
paths: |
|||
- path: / |
|||
pathType: Prefix |
|||
backend: |
|||
service: |
|||
name: service |
|||
port: |
|||
number: 3001 |
@ -1,5 +0,0 @@ |
|||
resources: |
|||
- deployment.yml |
|||
- service.yml |
|||
- ingressroute.yml |
|||
- pvc.yml |
@ -1,10 +0,0 @@ |
|||
apiVersion: v1 |
|||
kind: PersistentVolumeClaim |
|||
metadata: |
|||
name: pvc |
|||
spec: |
|||
accessModes: |
|||
- ReadWriteOnce |
|||
resources: |
|||
requests: |
|||
storage: 4Gi |
@ -1,13 +0,0 @@ |
|||
apiVersion: v1 |
|||
kind: Service |
|||
metadata: |
|||
name: service |
|||
spec: |
|||
selector: |
|||
component: uptime-kuma |
|||
type: ClusterIP |
|||
ports: |
|||
- name: http |
|||
port: 3001 |
|||
targetPort: 3001 |
|||
protocol: TCP |
File diff suppressed because it is too large
@ -0,0 +1,7 @@ |
|||
const args = require("args-parser")(process.argv); |
|||
const demoMode = args["demo"] || false; |
|||
|
|||
module.exports = { |
|||
args, |
|||
demoMode |
|||
}; |
@ -0,0 +1,31 @@ |
|||
const path = require("path"); |
|||
const Bree = require("bree"); |
|||
const { SHARE_ENV } = require("worker_threads"); |
|||
|
|||
const jobs = [ |
|||
{ |
|||
name: "clear-old-data", |
|||
interval: "at 03:14", |
|||
}, |
|||
]; |
|||
|
|||
const initBackgroundJobs = function (args) { |
|||
const bree = new Bree({ |
|||
root: path.resolve("server", "jobs"), |
|||
jobs, |
|||
worker: { |
|||
env: SHARE_ENV, |
|||
workerData: args, |
|||
}, |
|||
workerMessageHandler: (message) => { |
|||
console.log("[Background Job]:", message); |
|||
} |
|||
}); |
|||
|
|||
bree.start(); |
|||
return bree; |
|||
}; |
|||
|
|||
module.exports = { |
|||
initBackgroundJobs |
|||
}; |
@ -0,0 +1,40 @@ |
|||
const { log, exit, connectDb } = require("./util-worker"); |
|||
const { R } = require("redbean-node"); |
|||
const { setSetting, setting } = require("../util-server"); |
|||
|
|||
const DEFAULT_KEEP_PERIOD = 180; |
|||
|
|||
(async () => { |
|||
await connectDb(); |
|||
|
|||
let period = await setting("keepDataPeriodDays"); |
|||
|
|||
// Set Default Period
|
|||
if (period == null) { |
|||
await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general"); |
|||
period = DEFAULT_KEEP_PERIOD; |
|||
} |
|||
|
|||
// Try parse setting
|
|||
let parsedPeriod; |
|||
try { |
|||
parsedPeriod = parseInt(period); |
|||
} catch (_) { |
|||
log("Failed to parse setting, resetting to default.."); |
|||
await setSetting("keepDataPeriodDays", DEFAULT_KEEP_PERIOD, "general"); |
|||
parsedPeriod = DEFAULT_KEEP_PERIOD; |
|||
} |
|||
|
|||
log(`Clearing Data older than ${parsedPeriod} days...`); |
|||
|
|||
try { |
|||
await R.exec( |
|||
"DELETE FROM heartbeat WHERE time < DATETIME('now', '-' || ? || ' days') ", |
|||
[parsedPeriod] |
|||
); |
|||
} catch (e) { |
|||
log(`Failed to clear old data: ${e.message}`); |
|||
} |
|||
|
|||
exit(); |
|||
})(); |
@ -0,0 +1,39 @@ |
|||
const { parentPort, workerData } = require("worker_threads"); |
|||
const Database = require("../database"); |
|||
const path = require("path"); |
|||
|
|||
const log = function (any) { |
|||
if (parentPort) { |
|||
parentPort.postMessage(any); |
|||
} |
|||
}; |
|||
|
|||
const exit = function (error) { |
|||
if (error && error != 0) { |
|||
process.exit(error); |
|||
} else { |
|||
if (parentPort) { |
|||
parentPort.postMessage("done"); |
|||
} else { |
|||
process.exit(0); |
|||
} |
|||
} |
|||
}; |
|||
|
|||
const connectDb = async function () { |
|||
const dbPath = path.join( |
|||
process.env.DATA_DIR || workerData["data-dir"] || "./data/" |
|||
); |
|||
|
|||
Database.init({ |
|||
"data-dir": dbPath, |
|||
}); |
|||
|
|||
await Database.connect(); |
|||
}; |
|||
|
|||
module.exports = { |
|||
log, |
|||
exit, |
|||
connectDb, |
|||
}; |
@ -0,0 +1,108 @@ |
|||
const NotificationProvider = require("./notification-provider"); |
|||
const { DOWN, UP } = require("../../src/util"); |
|||
const { default: axios } = require("axios"); |
|||
const Crypto = require("crypto"); |
|||
const qs = require("qs"); |
|||
|
|||
class AliyunSMS extends NotificationProvider { |
|||
name = "AliyunSMS"; |
|||
|
|||
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { |
|||
let okMsg = "Sent Successfully."; |
|||
|
|||
try { |
|||
if (heartbeatJSON != null) { |
|||
let msgBody = JSON.stringify({ |
|||
name: monitorJSON["name"], |
|||
time: heartbeatJSON["time"], |
|||
status: this.statusToString(heartbeatJSON["status"]), |
|||
msg: heartbeatJSON["msg"], |
|||
}); |
|||
if (this.sendSms(notification, msgBody)) { |
|||
return okMsg; |
|||
} |
|||
} else { |
|||
let msgBody = JSON.stringify({ |
|||
name: "", |
|||
time: "", |
|||
status: "", |
|||
msg: msg, |
|||
}); |
|||
if (this.sendSms(notification, msgBody)) { |
|||
return okMsg; |
|||
} |
|||
} |
|||
} catch (error) { |
|||
this.throwGeneralAxiosError(error); |
|||
} |
|||
} |
|||
|
|||
async sendSms(notification, msgbody) { |
|||
let params = { |
|||
PhoneNumbers: notification.phonenumber, |
|||
TemplateCode: notification.templateCode, |
|||
SignName: notification.signName, |
|||
TemplateParam: msgbody, |
|||
AccessKeyId: notification.accessKeyId, |
|||
Format: "JSON", |
|||
SignatureMethod: "HMAC-SHA1", |
|||
SignatureVersion: "1.0", |
|||
SignatureNonce: Math.random().toString(), |
|||
Timestamp: new Date().toISOString(), |
|||
Action: "SendSms", |
|||
Version: "2017-05-25", |
|||
}; |
|||
|
|||
params.Signature = this.sign(params, notification.secretAccessKey); |
|||
let config = { |
|||
method: "POST", |
|||
url: "http://dysmsapi.aliyuncs.com/", |
|||
headers: { |
|||
"Content-Type": "application/x-www-form-urlencoded", |
|||
}, |
|||
data: qs.stringify(params), |
|||
}; |
|||
|
|||
let result = await axios(config); |
|||
if (result.data.Message == "OK") { |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
/** Aliyun request sign */ |
|||
sign(param, AccessKeySecret) { |
|||
let param2 = {}; |
|||
let data = []; |
|||
|
|||
let oa = Object.keys(param).sort(); |
|||
|
|||
for (let i = 0; i < oa.length; i++) { |
|||
let key = oa[i]; |
|||
param2[key] = param[key]; |
|||
} |
|||
|
|||
for (let key in param2) { |
|||
data.push(`${encodeURIComponent(key)}=${encodeURIComponent(param2[key])}`); |
|||
} |
|||
|
|||
let StringToSign = `POST&${encodeURIComponent("/")}&${encodeURIComponent(data.join("&"))}`; |
|||
return Crypto |
|||
.createHmac("sha1", `${AccessKeySecret}&`) |
|||
.update(Buffer.from(StringToSign)) |
|||
.digest("base64"); |
|||
} |
|||
|
|||
statusToString(status) { |
|||
switch (status) { |
|||
case DOWN: |
|||
return "DOWN"; |
|||
case UP: |
|||
return "UP"; |
|||
default: |
|||
return status; |
|||
} |
|||
} |
|||
} |
|||
|
|||
module.exports = AliyunSMS; |
@ -0,0 +1,89 @@ |
|||
//
|
|||
// bark.js
|
|||
// UptimeKuma
|
|||
//
|
|||
// Created by Lakr Aream on 2021/10/24.
|
|||
// Copyright © 2021 Lakr Aream. All rights reserved.
|
|||
//
|
|||
|
|||
const NotificationProvider = require("./notification-provider"); |
|||
const { DOWN, UP } = require("../../src/util"); |
|||
const { default: axios } = require("axios"); |
|||
|
|||
// bark is an APN bridge that sends notifications to Apple devices.
|
|||
|
|||
const barkNotificationGroup = "UptimeKuma"; |
|||
const barkNotificationAvatar = "https://github.com/louislam/uptime-kuma/raw/master/public/icon.png"; |
|||
const barkNotificationSound = "telegraph"; |
|||
const successMessage = "Successes!"; |
|||
|
|||
class Bark extends NotificationProvider { |
|||
name = "Bark"; |
|||
|
|||
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { |
|||
try { |
|||
var barkEndpoint = notification.barkEndpoint; |
|||
|
|||
// check if the endpoint has a "/" suffix, if so, delete it first
|
|||
if (barkEndpoint.endsWith("/")) { |
|||
barkEndpoint = barkEndpoint.substring(0, barkEndpoint.length - 1); |
|||
} |
|||
|
|||
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] == UP) { |
|||
let title = "UptimeKuma Monitor Up"; |
|||
return await this.postNotification(title, msg, barkEndpoint); |
|||
} |
|||
|
|||
if (msg != null && heartbeatJSON != null && heartbeatJSON["status"] == DOWN) { |
|||
let title = "UptimeKuma Monitor Down"; |
|||
return await this.postNotification(title, msg, barkEndpoint); |
|||
} |
|||
|
|||
if (msg != null) { |
|||
let title = "UptimeKuma Message"; |
|||
return await this.postNotification(title, msg, barkEndpoint); |
|||
} |
|||
|
|||
} catch (error) { |
|||
throw error; |
|||
} |
|||
} |
|||
|
|||
// add additional parameter for better on device styles (iOS 15 optimized)
|
|||
appendAdditionalParameters(postUrl) { |
|||
// grouping all our notifications
|
|||
postUrl += "?group=" + barkNotificationGroup; |
|||
// set icon to uptime kuma icon, 11kb should be fine
|
|||
postUrl += "&icon=" + barkNotificationAvatar; |
|||
// picked a sound, this should follow system's mute status when arrival
|
|||
postUrl += "&sound=" + barkNotificationSound; |
|||
return postUrl; |
|||
} |
|||
|
|||
// thrown if failed to check result, result code should be in range 2xx
|
|||
checkResult(result) { |
|||
if (result.status == null) { |
|||
throw new Error("Bark notification failed with invalid response!"); |
|||
} |
|||
if (result.status < 200 || result.status >= 300) { |
|||
throw new Error("Bark notification failed with status code " + result.status); |
|||
} |
|||
} |
|||
|
|||
async postNotification(title, subtitle, endpoint) { |
|||
// url encode title and subtitle
|
|||
title = encodeURIComponent(title); |
|||
subtitle = encodeURIComponent(subtitle); |
|||
let postUrl = endpoint + "/" + title + "/" + subtitle; |
|||
postUrl = this.appendAdditionalParameters(postUrl); |
|||
let result = await axios.get(postUrl); |
|||
this.checkResult(result); |
|||
if (result.statusText != null) { |
|||
return "Bark notification succeed: " + result.statusText; |
|||
} |
|||
// because returned in range 200 ..< 300
|
|||
return successMessage; |
|||
} |
|||
} |
|||
|
|||
module.exports = Bark; |
@ -0,0 +1,42 @@ |
|||
const NotificationProvider = require("./notification-provider"); |
|||
const axios = require("axios"); |
|||
|
|||
class ClickSendSMS extends NotificationProvider { |
|||
|
|||
name = "clicksendsms"; |
|||
|
|||
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { |
|||
let okMsg = "Sent Successfully."; |
|||
try { |
|||
console.log({ notification }); |
|||
let config = { |
|||
headers: { |
|||
"Content-Type": "application/json", |
|||
"Authorization": "Basic " + Buffer.from(notification.clicksendsmsLogin + ":" + notification.clicksendsmsPassword).toString('base64'), |
|||
"Accept": "text/json", |
|||
} |
|||
}; |
|||
let data = { |
|||
messages: [ |
|||
{ |
|||
"body": msg.replace(/[^\x00-\x7F]/g, ""), |
|||
"to": notification.clicksendsmsToNumber, |
|||
"source": "uptime-kuma", |
|||
"from": notification.clicksendsmsSenderName, |
|||
} |
|||
] |
|||
}; |
|||
let resp = await axios.post("https://rest.clicksend.com/v3/sms/send", data, config); |
|||
if (resp.data.data.messages[0].status !== "SUCCESS") { |
|||
let error = "Something gone wrong. Api returned " + resp.data.data.messages[0].status + "."; |
|||
this.throwGeneralAxiosError(error); |
|||
} |
|||
|
|||
return okMsg; |
|||
} catch (error) { |
|||
this.throwGeneralAxiosError(error); |
|||
} |
|||
} |
|||
} |
|||
|
|||
module.exports = ClickSendSMS; |
@ -0,0 +1,79 @@ |
|||
const NotificationProvider = require("./notification-provider"); |
|||
const { DOWN, UP } = require("../../src/util"); |
|||
const { default: axios } = require("axios"); |
|||
const Crypto = require("crypto"); |
|||
|
|||
class DingDing extends NotificationProvider { |
|||
name = "DingDing"; |
|||
|
|||
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { |
|||
let okMsg = "Sent Successfully."; |
|||
|
|||
try { |
|||
if (heartbeatJSON != null) { |
|||
let params = { |
|||
msgtype: "markdown", |
|||
markdown: { |
|||
title: monitorJSON["name"], |
|||
text: `## [${this.statusToString(heartbeatJSON["status"])}] \n > ${heartbeatJSON["msg"]} \n > Time(UTC):${heartbeatJSON["time"]}`, |
|||
} |
|||
}; |
|||
if (this.sendToDingDing(notification, params)) { |
|||
return okMsg; |
|||
} |
|||
} else { |
|||
let params = { |
|||
msgtype: "text", |
|||
text: { |
|||
content: msg |
|||
} |
|||
}; |
|||
if (this.sendToDingDing(notification, params)) { |
|||
return okMsg; |
|||
} |
|||
} |
|||
} catch (error) { |
|||
this.throwGeneralAxiosError(error); |
|||
} |
|||
} |
|||
|
|||
async sendToDingDing(notification, params) { |
|||
let timestamp = Date.now(); |
|||
|
|||
let config = { |
|||
method: "POST", |
|||
headers: { |
|||
"Content-Type": "application/json", |
|||
}, |
|||
url: `${notification.webHookUrl}×tamp=${timestamp}&sign=${encodeURIComponent(this.sign(timestamp, notification.secretKey))}`, |
|||
data: JSON.stringify(params), |
|||
}; |
|||
|
|||
let result = await axios(config); |
|||
if (result.data.errmsg == "ok") { |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
/** DingDing sign */ |
|||
sign(timestamp, secretKey) { |
|||
return Crypto |
|||
.createHmac("sha256", Buffer.from(secretKey, "utf8")) |
|||
.update(Buffer.from(`${timestamp}\n${secretKey}`, "utf8")) |
|||
.digest("base64"); |
|||
} |
|||
|
|||
statusToString(status) { |
|||
switch (status) { |
|||
case DOWN: |
|||
return "DOWN"; |
|||
case UP: |
|||
return "UP"; |
|||
default: |
|||
return status; |
|||
} |
|||
} |
|||
} |
|||
|
|||
module.exports = DingDing; |
@ -0,0 +1,83 @@ |
|||
const NotificationProvider = require("./notification-provider"); |
|||
const axios = require("axios"); |
|||
const { DOWN, UP } = require("../../src/util"); |
|||
|
|||
class Feishu extends NotificationProvider { |
|||
name = "Feishu"; |
|||
|
|||
async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { |
|||
let okMsg = "Sent Successfully."; |
|||
let feishuWebHookUrl = notification.feishuWebHookUrl; |
|||
|
|||
try { |
|||
if (heartbeatJSON == null) { |
|||
let testdata = { |
|||
msg_type: "text", |
|||
content: { |
|||
text: msg, |
|||
}, |
|||
}; |
|||
await axios.post(feishuWebHookUrl, testdata); |
|||
return okMsg; |
|||
} |
|||
|
|||
if (heartbeatJSON["status"] == DOWN) { |
|||
let downdata = { |
|||
msg_type: "post", |
|||
content: { |
|||
post: { |
|||
zh_cn: { |
|||
title: "UptimeKuma Alert: [Down] " + monitorJSON["name"], |
|||
content: [ |
|||
[ |
|||
{ |
|||
tag: "text", |
|||
text: |
|||
"[Down] " + |
|||
heartbeatJSON["msg"] + |
|||
"\nTime (UTC): " + |
|||
heartbeatJSON["time"], |
|||
}, |
|||
], |
|||
], |
|||
}, |
|||
}, |
|||
}, |
|||
}; |
|||
await axios.post(feishuWebHookUrl, downdata); |
|||
return okMsg; |
|||
} |
|||
|
|||
if (heartbeatJSON["status"] == UP) { |
|||
let updata = { |
|||
msg_type: "post", |
|||
content: { |
|||
post: { |
|||
zh_cn: { |
|||
title: "UptimeKuma Alert: [Up] " + monitorJSON["name"], |
|||
content: [ |
|||
[ |
|||
{ |
|||
tag: "text", |
|||
text: |
|||
"[Up] " + |
|||
heartbeatJSON["msg"] + |
|||
"\nTime (UTC): " + |
|||
heartbeatJSON["time"], |
|||
}, |
|||
], |
|||
], |
|||
}, |
|||
}, |
|||
}, |
|||
}; |
|||
await axios.post(feishuWebHookUrl, updata); |
|||
return okMsg; |
|||
} |
|||
} catch (error) { |
|||
this.throwGeneralAxiosError(error); |
|||
} |
|||
} |
|||
} |
|||
|
|||
module.exports = Feishu; |
@ -0,0 +1,39 @@ |
|||
const { RateLimiter } = require("limiter"); |
|||
const { debug } = require("../src/util"); |
|||
|
|||
class KumaRateLimiter { |
|||
constructor(config) { |
|||
this.errorMessage = config.errorMessage; |
|||
this.rateLimiter = new RateLimiter(config); |
|||
} |
|||
|
|||
async pass(callback, num = 1) { |
|||
const remainingRequests = await this.removeTokens(num); |
|||
debug("Rate Limit (remainingRequests):" + remainingRequests); |
|||
if (remainingRequests < 0) { |
|||
if (callback) { |
|||
callback({ |
|||
ok: false, |
|||
msg: this.errorMessage, |
|||
}); |
|||
} |
|||
return false; |
|||
} |
|||
return true; |
|||
} |
|||
|
|||
async removeTokens(num = 1) { |
|||
return await this.rateLimiter.removeTokens(num); |
|||
} |
|||
} |
|||
|
|||
const loginRateLimiter = new KumaRateLimiter({ |
|||
tokensPerInterval: 20, |
|||
interval: "minute", |
|||
fireImmediately: true, |
|||
errorMessage: "Too frequently, try again later." |
|||
}); |
|||
|
|||
module.exports = { |
|||
loginRateLimiter |
|||
}; |
@ -0,0 +1,37 @@ |
|||
const { checkLogin } = require("../util-server"); |
|||
const Database = require("../database"); |
|||
|
|||
module.exports = (socket) => { |
|||
|
|||
// Post or edit incident
|
|||
socket.on("getDatabaseSize", async (callback) => { |
|||
try { |
|||
checkLogin(socket); |
|||
callback({ |
|||
ok: true, |
|||
size: Database.getSize(), |
|||
}); |
|||
} catch (error) { |
|||
callback({ |
|||
ok: false, |
|||
msg: error.message, |
|||
}); |
|||
} |
|||
}); |
|||
|
|||
socket.on("shrinkDatabase", async (callback) => { |
|||
try { |
|||
checkLogin(socket); |
|||
Database.shrink(); |
|||
callback({ |
|||
ok: true, |
|||
}); |
|||
} catch (error) { |
|||
callback({ |
|||
ok: false, |
|||
msg: error.message, |
|||
}); |
|||
} |
|||
}); |
|||
|
|||
}; |
@ -0,0 +1,25 @@ |
|||
<template> |
|||
<div class="mb-3"> |
|||
<label for="accessKeyId" class="form-label">{{ $t("AccessKeyId") }}<span style="color: red;"><sup>*</sup></span></label> |
|||
<input id="accessKeyId" v-model="$parent.notification.accessKeyId" type="text" class="form-control" required> |
|||
|
|||
<label for="secretAccessKey" class="form-label">{{ $t("SecretAccessKey") }}<span style="color: red;"><sup>*</sup></span></label> |
|||
<input id="secretAccessKey" v-model="$parent.notification.secretAccessKey" type="text" class="form-control" required> |
|||
|
|||
<label for="phonenumber" class="form-label">{{ $t("Phonenumber") }}<span style="color: red;"><sup>*</sup></span></label> |
|||
<input id="phonenumber" v-model="$parent.notification.phonenumber" type="text" class="form-control" required> |
|||
|
|||
<label for="templateCode" class="form-label">{{ $t("TemplateCode") }}<span style="color: red;"><sup>*</sup></span></label> |
|||
<input id="templateCode" v-model="$parent.notification.templateCode" type="text" class="form-control" required> |
|||
|
|||
<label for="signName" class="form-label">{{ $t("SignName") }}<span style="color: red;"><sup>*</sup></span></label> |
|||
<input id="signName" v-model="$parent.notification.signName" type="text" class="form-control" required> |
|||
|
|||
<div class="form-text"> |
|||
<p>Sms template must contain parameters: <br> <code>${name} ${time} ${status} ${msg}</code></p> |
|||
<i18n-t tag="p" keypath="Read more:"> |
|||
<a href="https://help.aliyun.com/document_detail/101414.html" target="_blank">https://help.aliyun.com/document_detail/101414.html</a> |
|||
</i18n-t> |
|||
</div> |
|||
</div> |
|||
</template> |
@ -0,0 +1,15 @@ |
|||
<template> |
|||
<div class="mb-3"> |
|||
<label for="Bark Endpoint" class="form-label">{{ $t("Bark Endpoint") }}<span style="color: red;"><sup>*</sup></span></label> |
|||
<input id="Bark Endpoint" v-model="$parent.notification.barkEndpoint" type="text" class="form-control" required> |
|||
<div class="form-text"> |
|||
<p><span style="color: red;"><sup>*</sup></span>{{ $t("Required") }}</p> |
|||
</div> |
|||
<i18n-t tag="div" keypath="wayToGetTeamsURL" class="form-text"> |
|||
<a |
|||
href="https://github.com/Finb/Bark" |
|||
target="_blank" |
|||
>{{ $t("here") }}</a> |
|||
</i18n-t> |
|||
</div> |
|||
</template> |
@ -0,0 +1,38 @@ |
|||
<template> |
|||
<div class="mb-3"> |
|||
<label for="clicksendsms-login" class="form-label">API Username</label> |
|||
<div class="form-text"> |
|||
{{ $t("apiCredentials") }} |
|||
<a href="http://dashboard.clicksend.com/account/subaccounts" target="_blank">here</a> |
|||
</div> |
|||
<input id="clicksendsms-login" v-model="$parent.notification.clicksendsmsLogin" type="text" class="form-control" required> |
|||
<label for="clicksendsms-key" class="form-label">API Key</label> |
|||
<HiddenInput id="clicksendsms-key" v-model="$parent.notification.clicksendsmsPassword" :required="true" autocomplete="one-time-code"></HiddenInput> |
|||
</div> |
|||
<div class="mb-3"> |
|||
<div class="form-text"> |
|||
{{ $t("checkPrice", [$t("clicksendsms")]) }} |
|||
<a href="https://www.clicksend.com/us/pricing" target="_blank">https://clicksend.com/us/pricing</a> |
|||
</div> |
|||
</div> |
|||
<div class="mb-3"> |
|||
<label for="clicksendsms-to-number" class="form-label">Recipient Number</label> |
|||
<input id="clicksendsms-to-number" v-model="$parent.notification.clicksendsmsToNumber" type="text" minlength="8" maxlength="14" class="form-control" required> |
|||
</div> |
|||
<div class="mb-3"> |
|||
<label for="clicksendsms-sender-name" class="form-label">From Name/Number - |
|||
<a href="https://help.clicksend.com/article/4kgj7krx00-what-is-a-sender-id-or-sender-number" target="_blank">More Info</a> |
|||
</label> |
|||
<input id="clicksendsms-sender-name" v-model="$parent.notification.clicksendsmsSenderName" type="text" minlength="3" maxlength="11" class="form-control"> |
|||
<div class="form-text">Leave blank to use a shared sender number.</div> |
|||
</div> |
|||
</template> |
|||
<script> |
|||
import HiddenInput from "../HiddenInput.vue"; |
|||
|
|||
export default { |
|||
components: { |
|||
HiddenInput, |
|||
}, |
|||
}; |
|||
</script> |
@ -0,0 +1,16 @@ |
|||
<template> |
|||
<div class="mb-3"> |
|||
<label for="WebHookUrl" class="form-label">{{ $t("WebHookUrl") }}<span style="color: red;"><sup>*</sup></span></label> |
|||
<input id="WebHookUrl" v-model="$parent.notification.webHookUrl" type="text" class="form-control" required> |
|||
|
|||
<label for="secretKey" class="form-label">{{ $t("SecretKey") }}<span style="color: red;"><sup>*</sup></span></label> |
|||
<input id="secretKey" v-model="$parent.notification.secretKey" type="text" class="form-control" required> |
|||
|
|||
<div class="form-text"> |
|||
<p>For safety, must use secret key</p> |
|||
<i18n-t tag="p" keypath="Read more:"> |
|||
<a href="https://developers.dingtalk.com/document/robots/custom-robot-access" target="_blank">https://developers.dingtalk.com/document/robots/custom-robot-access</a> |
|||
</i18n-t> |
|||
</div> |
|||
</div> |
|||
</template> |
@ -0,0 +1,15 @@ |
|||
<template> |
|||
<div class="mb-3"> |
|||
<label for="Feishu-WebHookUrl" class="form-label">{{ $t("Feishu WebHookUrl") }}<span style="color: red;"><sup>*</sup></span></label> |
|||
<input id="Feishu-WebHookUrl" v-model="$parent.notification.feishuWebHookUrl" type="text" class="form-control" required> |
|||
<div class="form-text"> |
|||
<p><span style="color: red;"><sup>*</sup></span>{{ $t("Required") }}</p> |
|||
</div> |
|||
<i18n-t tag="div" keypath="wayToGetTeamsURL" class="form-text"> |
|||
<a |
|||
href="https://www.feishu.cn/hc/zh-CN/articles/360024984973" |
|||
target="_blank" |
|||
>{{ $t("here") }}</a> |
|||
</i18n-t> |
|||
</div> |
|||
</template> |
@ -0,0 +1,311 @@ |
|||
export default { |
|||
languageName: "Hrvatski", |
|||
checkEverySecond: "Provjera svake {0} sekunde", |
|||
retryCheckEverySecond: "Ponovni pokušaj svake {0} sekunde", |
|||
retriesDescription: "Broj ponovnih pokušaja prije nego će se servis označiti kao nedostupan te poslati obavijest", |
|||
ignoreTLSError: "Ignoriraj TLS/SSL pogreške za HTTPS web stranice", |
|||
upsideDownModeDescription: "Preokreni logiku statusa. Ako se primi pozitivan odgovor, smatra se da je usluga nedostupna.", |
|||
maxRedirectDescription: "Maksimalan broj preusmjeravanja. Postaviti na 0 kako bi se preusmjeravanja onemogućila.", |
|||
acceptedStatusCodesDescription: "Odaberite statusne kodove koji se smatraju uspješnim odgovorom.", |
|||
passwordNotMatchMsg: "Lozinke se ne poklapaju.", |
|||
notificationDescription: "Obavijesti će funkcionirati samo ako su dodijeljene monitoru.", |
|||
keywordDescription: "Ključna riječ za pretragu, u obliku običnog HTML-a ili u JSON formatu. Pretraga je osjetljiva na velika i mala slova.", |
|||
deleteMonitorMsg: "Jeste li sigurni da želite izbrisati monitor?", |
|||
deleteNotificationMsg: "Jeste li sigurni da želite izbrisati ovu obavijest za sve monitore?", |
|||
resoverserverDescription: "Cloudflare je zadani DNS poslužitelj. Možete to promijeniti u bilo kojem trenutku.", |
|||
rrtypeDescription: "Odaberite vrstu DNS zapisa o resursu kojeg želite pratiti", |
|||
pauseMonitorMsg: "Jeste li sigurni da želite pauzirati?", |
|||
enableDefaultNotificationDescription: "Ova će obavijesti biti omogućena za sve nove monitore. Možete ju ručno onemogućiti za pojedini monitor.", |
|||
clearEventsMsg: "Jeste li sigurni da želite izbrisati sve zapise o događajima za ovaj monitor?", |
|||
clearHeartbeatsMsg: "Jeste li sigurni da želite izbrisati sve zapise o provjerama za ovaj monitor?", |
|||
confirmClearStatisticsMsg: "Jeste li sigurni da želite izbrisati SVE statistike?", |
|||
importHandleDescription: "Odaberite opciju \"Preskoči postojeće\" ako želite preskočiti uvoz postojećih monitora i obavijesti ako dođe do poklapanja u imenu. Opcija \"Prepiši\" će izbrisati postojeće monitore i obavijesti.", |
|||
confirmImportMsg: "Jeste li sigurni da želite pokrenuti uvoz? Provjerite jeste li odabrali ispravnu opciju uvoza.", |
|||
twoFAVerifyLabel: "Unesite svoj 2FA token:", |
|||
tokenValidSettingsMsg: "Token je važeći! Sada možete spremiti postavke dvofaktorske autentikacije.", |
|||
confirmEnableTwoFAMsg: "Želite li omogućiti dvofaktorsku autentikaciju?", |
|||
confirmDisableTwoFAMsg: "Jeste li sigurni da želite onemogućiti dvofaktorsku autentikaciju?", |
|||
Settings: "Postavke", |
|||
Dashboard: "Kontrolna ploča", |
|||
"New Update": "Novo ažuriranje", |
|||
Language: "Jezik", |
|||
Appearance: "Izgled", |
|||
Theme: "Tema", |
|||
General: "Općenito", |
|||
"Primary Base URL": "Osnovni URL", |
|||
Version: "Inačica", |
|||
"Check Update On GitHub": "Provjeri dostupnost nove inačice na GitHubu", |
|||
List: "Popis", |
|||
Add: "Dodaj", |
|||
"Add New Monitor": "Dodaj novi Monitor", |
|||
"Quick Stats": "Statistika", |
|||
Up: "Dostupno", |
|||
Down: "Nedostupno", |
|||
Pending: "U tijeku", |
|||
Unknown: "Nepoznato", |
|||
pauseDashboardHome: "Pauzirano", |
|||
Name: "Naziv", |
|||
Status: "Status", |
|||
DateTime: "Vremenska oznaka", |
|||
Message: "Izvještaj", |
|||
"No important events": "Nema važnih događaja", |
|||
Pause: "Pauziraj", |
|||
Resume: "Nastavi", |
|||
Edit: "Uredi", |
|||
Delete: "Obriši", |
|||
Current: "Trenutno", |
|||
Uptime: "Dostupnost", |
|||
"Cert Exp.": "Istek cert.", |
|||
days: "dana", |
|||
day: "dan", |
|||
"-day": "-dnevno", |
|||
hour: "sat", |
|||
"-hour": "-satno", |
|||
Response: "Odgovor", |
|||
Ping: "Odziv", |
|||
"Monitor Type": "Vrsta Monitora", |
|||
Keyword: "Ključna riječ", |
|||
"Friendly Name": "Prilagođen naziv", |
|||
URL: "URL", |
|||
Hostname: "Domaćin", |
|||
Port: "Port", |
|||
"Heartbeat Interval": "Interval provjere", |
|||
Retries: "Broj ponovnih pokušaja", |
|||
"Heartbeat Retry Interval": "Interval ponovnih pokušaja", |
|||
Advanced: "Napredne postavke", |
|||
"Upside Down Mode": "Obrnuti način", |
|||
"Max. Redirects": "Maksimalan broj preusmjeravanja", |
|||
"Accepted Status Codes": "Prihvaćeni statusni kodovi", |
|||
"Push URL": "Push URL", |
|||
needPushEvery: "Potrebno je slati zahtjeve na URL svakih {0} sekundi.", |
|||
pushOptionalParams: "Neobavezni parametri: {0}", |
|||
Save: "Spremi", |
|||
Notifications: "Obavijesti", |
|||
"Not available, please setup.": "Obavijesti nisu dostupne, potrebno dodati novu obavijest.", |
|||
"Setup Notification": "Dodaj obavijest", |
|||
Light: "Svijetli način", |
|||
Dark: "Tamni način", |
|||
Auto: "Automatski", |
|||
"Theme - Heartbeat Bar": "Tema za traku dostupnosti", |
|||
Normal: "Normalno", |
|||
Bottom: "Ispod", |
|||
None: "Isključeno", |
|||
Timezone: "Vremenska zona", |
|||
"Search Engine Visibility": "Vidljivost tražilicama", |
|||
"Allow indexing": "Dopusti indeksiranje", |
|||
"Discourage search engines from indexing site": "Sprječavanje indeksiranja", |
|||
"Change Password": "Promjena lozinke", |
|||
"Current Password": "Trenutna lozinka", |
|||
"New Password": "Nova lozinka", |
|||
"Repeat New Password": "Potvrdite novu lozinku", |
|||
"Update Password": "Spremi novu lozinku", |
|||
"Disable Auth": "Onemogući autentikaciju", |
|||
"Enable Auth": "Omogući autentikaciju", |
|||
Logout: "Odjava", |
|||
Leave: "Poništi", |
|||
"I understand, please disable": "Razumijem, svejedno onemogući", |
|||
Confirm: "Potvrda", |
|||
Yes: "Da", |
|||
No: "Ne", |
|||
Username: "Korisničko ime", |
|||
Password: "Lozinka", |
|||
"Remember me": "Zapamti me", |
|||
Login: "Prijava", |
|||
"No Monitors, please": "Nema monitora, ", |
|||
"add one": "dodaj jedan", |
|||
"Notification Type": "Tip obavijesti", |
|||
Email: "E-pošta", |
|||
Test: "Testiraj", |
|||
"Certificate Info": "Informacije o certifikatu", |
|||
"Resolver Server": "DNS poslužitelj", |
|||
"Resource Record Type": "Vrsta DNS zapisa", |
|||
"Last Result": "Posljednji rezultat", |
|||
"Create your admin account": "Stvori administratorski račun", |
|||
"Repeat Password": "Potvrda lozinke", |
|||
"Import Backup": "Uvoz sigurnosne kopije", |
|||
"Export Backup": "Izvoz sigurnosne kopije", |
|||
Export: "Izvoz", |
|||
Import: "Uvoz", |
|||
respTime: "Vrijeme odgovora (ms)", |
|||
notAvailableShort: "N/A", |
|||
"Default enabled": "Omogući za nove monitore", |
|||
"Apply on all existing monitors": "Primijeni na postojeće monitore", |
|||
Create: "Kreiraj", |
|||
"Clear Data": "Obriši podatke", |
|||
Events: "Događaji", |
|||
Heartbeats: "Provjere", |
|||
"Auto Get": "Automatski dohvat", |
|||
backupDescription: "Moguće je napraviti sigurnosnu kopiju svih monitora i obavijesti koja će biti spremljena kao JSON datoteka.", |
|||
backupDescription2: "Napomena: povijest i podaci o događajima nisu uključeni u sigurnosnu kopiju.", |
|||
backupDescription3: "Osjetljivi podaci poput tokena za obavijesti uključeni su u sigurnosnu kopiju. Zato je potrebno čuvati izvoz na sigurnom mjestu.", |
|||
alertNoFile: "Datoteka za uvoz nije odabrana.", |
|||
alertWrongFileType: "Datoteka za uvoz nije u JSON formatu.", |
|||
"Clear all statistics": "Obriši sve statistike", |
|||
"Skip existing": "Preskoči postojeće", |
|||
Overwrite: "Prepiši", |
|||
Options: "Opcije", |
|||
"Keep both": "Zadrži sve", |
|||
"Verify Token": "Provjeri Token", |
|||
"Setup 2FA": "Postavi dvofaktorsku autentikaciju", |
|||
"Enable 2FA": "Omogući dvofaktorsku autentikaciju", |
|||
"Disable 2FA": "Onemogući dvofaktorsku autentikaciju", |
|||
"2FA Settings": "Postavke 2FA", |
|||
"Two Factor Authentication": "Dvofaktorska autentikacija", |
|||
Active: "Aktivna", |
|||
Inactive: "Neaktivno", |
|||
Token: "Token", |
|||
"Show URI": "Pokaži URI", |
|||
Tags: "Oznake", |
|||
"Add New below or Select...": "Dodajte novu oznaku ispod ili odaberite...", |
|||
"Tag with this name already exist.": "Oznaka s tim nazivom već postoji", |
|||
"Tag with this value already exist.": "Oznaka s tom vrijednošću već postoji.", |
|||
color: "Boja", |
|||
"value (optional)": "Vrijednost (neobavezno)", |
|||
Gray: "Siva", |
|||
Red: "Crvena", |
|||
Orange: "Narančasta", |
|||
Green: "Zelena", |
|||
Blue: "Plava", |
|||
Indigo: "Indigo", |
|||
Purple: "Ljubičasta", |
|||
Pink: "Ružičasta", |
|||
"Search...": "Pretraga...", |
|||
"Avg. Ping": "Prosječni odziv", |
|||
"Avg. Response": "Prosječni odgovor", |
|||
"Entry Page": "Početna stranica", |
|||
statusPageNothing: "Ovdje nema ničega, dodajte grupu ili monitor.", |
|||
"No Services": "Nema usluga", |
|||
"All Systems Operational": "Svi sustavi su operativni", |
|||
"Partially Degraded Service": "Usluga djelomično nedostupna", |
|||
"Degraded Service": "Usluga nedostupna", |
|||
"Add Group": "Dodaj grupu", |
|||
"Add a monitor": "Dodaj monitor", |
|||
"Edit Status Page": "Uredi Statusnu stranicu", |
|||
"Go to Dashboard": "Na Kontrolnu ploču", |
|||
"Status Page": "Statusna stranica", |
|||
defaultNotificationName: "Moja {number}. {notification} obavijest", |
|||
here: "ovdje", |
|||
Required: "Potrebno", |
|||
telegram: "Telegram", |
|||
"Bot Token": "Token bota", |
|||
wayToGetTelegramToken: "Token možete nabaviti preko {0}.", |
|||
"Chat ID": "ID razgovora", |
|||
supportTelegramChatID: "Podržani su ID-jevi izravnih razgovora, grupa i kanala", |
|||
wayToGetTelegramChatID: "ID razgovora možete saznati tako da botu pošaljete poruku te odete na ovaj URL:", |
|||
"YOUR BOT TOKEN HERE": "OVDJE IDE TOKEN BOTA", |
|||
chatIDNotFound: "ID razgovora nije pronađen; prvo morate poslati poruku botu", |
|||
webhook: "Webhook", |
|||
"Post URL": "URL Post zahtjeva", |
|||
"Content Type": "Tip sadržaja (Content Type)", |
|||
webhookJsonDesc: "{0} je dobra opcija za moderne HTTP poslužitelje poput Express.js-a", |
|||
webhookFormDataDesc: "{multipart} je moguća alternativa za PHP, samo je potrebno parsirati JSON koristeći {decodeFunction}", |
|||
smtp: "E-mail (SMTP)", |
|||
secureOptionNone: "Bez sigurnosti / STARTTLS (25, 587)", |
|||
secureOptionTLS: "TLS (465)", |
|||
"Ignore TLS Error": "Ignoriraj greške TLS-a", |
|||
"From Email": "Adresa za \"From\" polje", |
|||
emailCustomSubject: "Prilagođeno \"Subject\" polje", |
|||
"To Email": "Odredišne adrese e-pošte", |
|||
smtpCC: "Cc", |
|||
smtpBCC: "Bcc", |
|||
discord: "Discord", |
|||
"Discord Webhook URL": "URL Discord webhooka", |
|||
wayToGetDiscordURL: "Ovo možete dobiti tako da odete na Postavke servera -> Integracije -> Napravi webhook", |
|||
"Bot Display Name": "Nadimak Bota unutar servera", |
|||
"Prefix Custom Message": "Prefiks prilagođene poruke", |
|||
"Hello @everyone is...": "Pozdrav {'@'}everyone...", |
|||
teams: "Microsoft Teams", |
|||
"Webhook URL": "URL webhooka", |
|||
wayToGetTeamsURL: "Više informacija o Teams webhookovima možete pročitati {0}.", |
|||
signal: "Signal", |
|||
Number: "Broj", |
|||
Recipients: "Primatelji", |
|||
needSignalAPI: "Potreban je klijent s REST sučeljem.", |
|||
wayToCheckSignalURL: "Više informacija o postavljanju Signal klijenta:", |
|||
signalImportant: "VAŽNO: Grupe i brojevi se ne mogu istovremeno koristiti kao primatelji!", |
|||
gotify: "Gotify", |
|||
"Application Token": "Token Aplikacije", |
|||
"Server URL": "URL poslužitelja", |
|||
Priority: "Prioritet", |
|||
slack: "Slack", |
|||
"Icon Emoji": "Emotikon", |
|||
"Channel Name": "Naziv kanala", |
|||
"Uptime Kuma URL": "Uptime Kuma URL", |
|||
aboutWebhooks: "Dodatne informacije o webhookovima su dostupne na: {0}", |
|||
aboutChannelName: "Unesite ime {0} kanala u polju Naziv kanala ako želite zaobići webhook kanal. Primjerice: #neki-kanal", |
|||
aboutKumaURL: "Ako je polje \"Uptime Kuma URL\" prazno, koristi se zadana vrijednost koja vodi na GitHub stranicu projekta.", |
|||
emojiCheatSheet: "Popis emotikona: {0}", |
|||
"rocket.chat": "Rocket.Chat", |
|||
pushover: "Pushover", |
|||
pushy: "Pushy", |
|||
octopush: "Octopush", |
|||
promosms: "PromoSMS", |
|||
clicksendsms: "ClickSend SMS", |
|||
lunasea: "LunaSea", |
|||
apprise: "Apprise (Podržava preko 50 usluga za obavijesti)", |
|||
pushbullet: "Pushbullet", |
|||
line: "LINE", |
|||
mattermost: "Mattermost", |
|||
"User Key": "Korisnički ključ", |
|||
Device: "Uređaji", |
|||
"Message Title": "Naslov poruke", |
|||
"Notification Sound": "Zvuk obavijesti", |
|||
"More info on:": "Više informacija na: {0}", |
|||
pushoverDesc1: "Hitni prioritet (2) ima zadani istek vremena od 30 sekundi između ponovnih pokušaja te će isteći nakon 1 sata.", |
|||
pushoverDesc2: "Ako želite slati obavijesti na više uređaja, ispunite polje \"Uređaji\".", |
|||
"SMS Type": "Tip SMS-a", |
|||
octopushTypePremium: "Premium (Brzo - preporučeno za obavijesti)", |
|||
octopushTypeLowCost: "Low Cost (Sporo - mobilni operateri ponekad blokiraju ove poruke)", |
|||
checkPrice: "Provjerite {0} cijene:", |
|||
apiCredentials: "Vjerodajnice za API", |
|||
octopushLegacyHint: "Koristite li staru inačicu usluge Octopush (2011-2020) ili noviju inačicu?", |
|||
"Check octopush prices": "Provjerite cijene usluge Octopush {0}.", |
|||
octopushPhoneNumber: "Telefonski broj (međunarodni format, primjerice: +38512345678) ", |
|||
octopushSMSSender: "Naziv SMS pošiljatelja : 3-11 alfanumeričkih znakova i razmak (a-zA-Z0-9)", |
|||
"LunaSea Device ID": "LunaSea ID Uređaja", |
|||
"Apprise URL": "URL usluge Apprise", |
|||
"Example:": "Primjerice: {0}", |
|||
"Read more:": "Pročitajte više: {0}", |
|||
"Status:": "Status: {0}", |
|||
"Read more": "Pročitaj više", |
|||
appriseInstalled: "Apprise je instaliran.", |
|||
appriseNotInstalled: "Apprise nije instaliran. {0}", |
|||
"Access Token": "Pristupni token", |
|||
"Channel access token": "Token za pristup kanalu", |
|||
"Line Developers Console": "LINE razvojnoj konzoli", |
|||
lineDevConsoleTo: "LINE razvojna konzola - {0}", |
|||
"Basic Settings": "Osnovne Postavke", |
|||
"User ID": "Korisnički ID", |
|||
"Messaging API": "API za razmjenu poruka", |
|||
wayToGetLineChannelToken: "Prvo, pristupite {0}, kreirajte pružatelja usluga te kanal (API za razmjenu poruka), zatim možete dobiti token za pristup kanalu te korisnički ID za polja iznad.", |
|||
"Icon URL": "URL slike", |
|||
aboutIconURL: "Možete postaviti poveznicu na sliku u polju \"URL slike\" kako biste spriječili korištenje zadane slike. Ovo se polje neće koristiti ako je postavljeno polje \"Emotikon\".", |
|||
aboutMattermostChannelName: "Možete promijeniti kanal u kojeg webhook šalje tako da ispunite polje \"Naziv kanala\". Ta opcija mora biti omogućena unutar Mattermost postavki za webhook. Primjerice: #neki-kanal", |
|||
matrix: "Matrix", |
|||
promosmsTypeEco: "SMS ECO - jeftina, ali spora opcija koja je često preopterećena. Ograničeno samo na primatelje unutar Poljske.", |
|||
promosmsTypeFlash: "SMS FLASH - Poruka se automatski pojavljuje na uređaju primatelja. Ograničeno samo na primatelje unutar Poljske.", |
|||
promosmsTypeFull: "SMS FULL - Premium razina usluge, dozvoljava postavljanje naziva SMS pošiljatelja (Naziv mora biti registriran). Usluga pouzdana za obavijesti.", |
|||
promosmsTypeSpeed: "SMS SPEED - Usluga najvećeg prioriteta. Brza i pouzdana, ali skupa (otprilike dvostruko skuplja od cijene usluge SMS FULL).", |
|||
promosmsPhoneNumber: "Telefonski broj (za primatelje unutar Poljske nije potrebno navoditi pozivni broj države)", |
|||
promosmsSMSSender: "Naziv SMS pošiljatelja: Registriran naziv ili jedan od zadanih: InfoSMS, SMS Info, MaxSMS, INFO, SMS", |
|||
"Feishu WebHookUrl": "Feishu URL webhooka", |
|||
matrixHomeserverURL: "URL Matrix homeservera (uključujući http(s):// te port, ako je potrebno)", |
|||
"Internal Room Id": "Interni ID sobe", |
|||
matrixDesc1: "Interni ID sobe se može pronaći u naprednim postavkama sobe unutar Matrix klijenta. ID sobe nalikuje idućem zapisu: !QMdRCpUIfLwsfjxye6:home.server.", |
|||
matrixDesc2: "Preporučuje se stvaranje novog korisnika te suzdržavanje od korištenja pristupnog tokena vlastitog Matrix korisnika. Novog korisnika potrebno je dodati u sobe u kojima želite primati obavijesti. Pristupni token možete dobiti pokretanjem naredbe {0}", |
|||
Method: "Metoda", |
|||
Body: "Tijelo", |
|||
Headers: "Zaglavlja", |
|||
PushUrl: "Push URL", |
|||
HeadersInvalidFormat: "Zaglavlja nisu nije valjani JSON: ", |
|||
BodyInvalidFormat: "Tijelo zahtjeva nije valjani JSON: ", |
|||
"Monitor History": "Povijest monitora", |
|||
clearDataOlderThan: "Podaci o povijesti monitora čuvaju se {0} dana.", |
|||
PasswordsDoNotMatch: "Lozinke se ne poklapaju.", |
|||
records: "zapisa", |
|||
"One record": "Jedan zapis", |
|||
"Showing {from} to {to} of {count} records": "Prikaz zapisa {from}-{to} od sveukupno {count}", |
|||
steamApiKeyDescription: "Za praćenje Steam poslužitelja za igru, potrebno je imati Steam Web-API ključ. Možete registrirati vlastiti ključ ovdje: ", |
|||
"Current User": "Trenutni korisnik", |
|||
recent: "Nedavno", |
|||
}; |
@ -0,0 +1,283 @@ |
|||
export default { |
|||
languageName: "Bahasa Indonesia (Indonesian)", |
|||
checkEverySecond: "Cek Setiap {0} detik.", |
|||
retryCheckEverySecond: "Coba lagi setiap {0} detik.", |
|||
retriesDescription: "Percobaan ulang maksimum sebelum layanan dinyatakan tidak aktif dan notifikasi dikirim", |
|||
ignoreTLSError: "Abaikan kesalahan TLS/SSL untuk situs web HTTPS", |
|||
upsideDownModeDescription: "Balikkan statusnya. Jika layanan dapat dijangkau, TIDAK AKTIF.", |
|||
maxRedirectDescription: "Jumlah maksimum pengalihan untuk diikuti. Setel ke 0 untuk menonaktifkan pengalihan.", |
|||
acceptedStatusCodesDescription: "Pilih kode status yang dianggap sebagai tanggapan yang berhasil.", |
|||
passwordNotMatchMsg: "Sandi kedua tidak cocok.", |
|||
notificationDescription: "Harap atur notifikasi ke monitor agar berfungsi.", |
|||
keywordDescription: "Cari kata kunci dalam code html atau JSON huruf besar-kecil berpengaruh", |
|||
pauseDashboardHome: "Jeda", |
|||
deleteMonitorMsg: "Apakah Anda mau menghapus monitor ini?", |
|||
deleteNotificationMsg: "Apakah Anda mau menghapus notifikasi ini untuk semua monitor?", |
|||
resoverserverDescription: "Cloudflare adalah server bawaan, Anda dapat mengubah server resolver kapan saja.", |
|||
rrtypeDescription: "Pilih RR-Type yang mau Anda monitor", |
|||
pauseMonitorMsg: "Apakah Anda yakin mau menjeda?", |
|||
enableDefaultNotificationDescription: "Untuk setiap monitor baru, notifikasi ini akan diaktifkan secara bawaan. Anda masih dapat menonaktifkan notifikasi secara terpisah untuk setiap monitor.", |
|||
clearEventsMsg: "Apakah Anda yakin mau menghapus semua event di monitor ini?", |
|||
clearHeartbeatsMsg: "Apakah Anda yakin mau menghapus semua heartbeats di monitor ini?", |
|||
confirmClearStatisticsMsg: "Apakah Anda yakin mau menghapus semua statistik?", |
|||
importHandleDescription: "Pilih 'Lewati yang ada' jika Anda ingin melewati setiap monitor atau notifikasi dengan nama yang sama. 'Timpa' akan menghapus setiap monitor dan notifikasi yang ada.", |
|||
confirmImportMsg: "Apakah Anda yakin untuk mengimpor cadangan? Pastikan Anda telah memilih opsi impor yang tepat.", |
|||
twoFAVerifyLabel: "Silakan ketik token Anda untuk memverifikasi bahwa 2FA berfungsi", |
|||
tokenValidSettingsMsg: "Tokennya benar! Anda sekarang dapat menyimpan pengaturan 2FA.", |
|||
confirmEnableTwoFAMsg: "Apakah Anda yakin ingin mengaktifkan 2FA?", |
|||
confirmDisableTwoFAMsg: "Apakah Anda yakin ingin menonaktifkan 2FA?", |
|||
Settings: "Pengaturan", |
|||
Dashboard: "Dasbor", |
|||
"New Update": "Pembaruan Baru", |
|||
Language: "Bahasa", |
|||
Appearance: "Tampilan", |
|||
Theme: "Tema", |
|||
General: "Umum", |
|||
Version: "Versi", |
|||
"Check Update On GitHub": "Cek Pembaruan di GitHub", |
|||
List: "Daftar", |
|||
Add: "Tambah", |
|||
"Add New Monitor": "Tambah Monitor Baru", |
|||
"Quick Stats": "Statistik", |
|||
Up: "Aktif", |
|||
Down: "Tidak Aktif", |
|||
Pending: "Tertunda", |
|||
Unknown: "Tidak diketahui", |
|||
Pause: "Jeda", |
|||
Name: "Nama", |
|||
Status: "Status", |
|||
DateTime: "Tanggal Waktu", |
|||
Message: "Pesan", |
|||
"No important events": "Tidak ada peristiwa penting", |
|||
Resume: "Lanjut", |
|||
Edit: "Ubah", |
|||
Delete: "Hapus", |
|||
Current: "Saat ini", |
|||
Uptime: "Waktu aktif", |
|||
"Cert Exp.": "Cert Exp.", |
|||
days: "hari-hari", |
|||
day: "hari", |
|||
"-day": "-hari", |
|||
hour: "Jam", |
|||
"-hour": "-Jam", |
|||
Response: "Tanggapan", |
|||
Ping: "Ping", |
|||
"Monitor Type": "Tipe Monitor", |
|||
Keyword: "Keyword", |
|||
"Friendly Name": "Nama yang Ramah", |
|||
URL: "URL", |
|||
Hostname: "Hostname", |
|||
Port: "Port", |
|||
"Heartbeat Interval": "Jarak Waktu Heartbeat ", |
|||
Retries: "Coba lagi", |
|||
"Heartbeat Retry Interval": "Jarak Waktu Heartbeat Mencoba kembali ", |
|||
Advanced: "Tingkat Lanjut", |
|||
"Upside Down Mode": "Mode Terbalik", |
|||
"Max. Redirects": "Maksimal Pengalihan", |
|||
"Accepted Status Codes": "Kode Status yang Diterima", |
|||
Save: "Simpan", |
|||
Notifications: "Notifikasi", |
|||
"Not available, please setup.": "Tidak tersedia, silakan atur.", |
|||
"Setup Notification": "Setel Notifikasi", |
|||
Light: "Terang", |
|||
Dark: "Gelap", |
|||
Auto: "Otomatis", |
|||
"Theme - Heartbeat Bar": "Tema - Heartbeat Bar", |
|||
Normal: "Normal", |
|||
Bottom: "Bawah", |
|||
None: "Tidak ada", |
|||
Timezone: "Zona Waktu", |
|||
"Search Engine Visibility": "Visibilitas Mesin Pencari", |
|||
"Allow indexing": "Mengizinkan untuk diindex", |
|||
"Discourage search engines from indexing site": "Mencegah mesin pencari untuk mengindex situs", |
|||
"Change Password": "Ganti Sandi", |
|||
"Current Password": "Sandi Lama", |
|||
"New Password": "Sandi Baru", |
|||
"Repeat New Password": "Ulangi Sandi Baru", |
|||
"Update Password": "Perbarui Kata Sandi", |
|||
"Disable Auth": "Nonaktifkan Autentikasi", |
|||
"Enable Auth": "Aktifkan Autentikasi", |
|||
Logout: "Keluar", |
|||
Leave: "Pergi", |
|||
"I understand, please disable": "Saya mengerti, silakan dinonaktifkan", |
|||
Confirm: "Konfirmasi", |
|||
Yes: "Ya", |
|||
No: "Tidak", |
|||
Username: "Nama Pengguna", |
|||
Password: "Sandi", |
|||
"Remember me": "Ingat saya", |
|||
Login: "Masuk", |
|||
"No Monitors, please": "Tidak ada monitor, silakan", |
|||
"add one": "tambahkan satu", |
|||
"Notification Type": "Tipe Notifikasi", |
|||
Email: "Surel", |
|||
Test: "Tes", |
|||
"Certificate Info": "Info Sertifikasi", |
|||
"Resolver Server": "Resolver Server", |
|||
"Resource Record Type": "Resource Record Type", |
|||
"Last Result": "Hasil Terakhir", |
|||
"Create your admin account": "Buat admin akun Anda", |
|||
"Repeat Password": "Ulangi Sandi", |
|||
"Import Backup": "Impor Cadangan", |
|||
"Export Backup": "Expor Cadangan", |
|||
Export: "Expor", |
|||
Import: "Impor", |
|||
respTime: "Tanggapan. Waktu (milidetik)", |
|||
notAvailableShort: "N/A", |
|||
"Default enabled": "Bawaan diaktifkan", |
|||
"Apply on all existing monitors": "Terapkan pada semua monitor yang ada", |
|||
Create: "Buat", |
|||
"Clear Data": "Bersihkan Data", |
|||
Events: "Peristiwa", |
|||
Heartbeats: "Heartbeats", |
|||
"Auto Get": "Ambil Otomatis", |
|||
backupDescription: "Anda dapat mencadangkan semua monitor dan semua notifikasi ke dalam berkas JSON.", |
|||
backupDescription2: "Catatan: Data sejarah dan peristiwa tidak disertakan.", |
|||
backupDescription3: "Data sensitif seperti notifikasi token disertakan dalam berkas ekspor, harap simpan dengan hati-hati.", |
|||
alertNoFile: "Silakan pilih berkas untuk diimpor.", |
|||
alertWrongFileType: "Silakan pilih berkas JSON.", |
|||
"Clear all statistics": "Hapus semua statistik", |
|||
"Skip existing": "Lewati yang ada", |
|||
Overwrite: "Timpa", |
|||
Options: "Opsi", |
|||
"Keep both": "Simpan keduanya", |
|||
"Verify Token": "Verifikasi Token", |
|||
"Setup 2FA": "Pengaturan 2FA", |
|||
"Enable 2FA": "Aktifkan 2FA", |
|||
"Disable 2FA": "Nonaktifkan 2FA", |
|||
"2FA Settings": "Pengaturan 2FA", |
|||
"Two Factor Authentication": "Autentikasi Dua Faktor", |
|||
Active: "Aktif", |
|||
Inactive: "Tidak Aktif", |
|||
Token: "Token", |
|||
"Show URI": "Lihat URI", |
|||
Tags: "Tanda", |
|||
"Add New below or Select...": "Tambahkan Baru di bawah atau Pilih...", |
|||
"Tag with this name already exist.": "Tanda dengan nama ini sudah ada.", |
|||
"Tag with this value already exist.": "Tanda dengan nilai ini sudah ada.", |
|||
color: "warna", |
|||
"value (optional)": "nilai (harus diisi)", |
|||
Gray: "Abu-abu", |
|||
Red: "Merah", |
|||
Orange: "Jingga", |
|||
Green: "Hijau", |
|||
Blue: "Biru", |
|||
Indigo: "Biru Tua", |
|||
Purple: "Ungu", |
|||
Pink: "Merah Muda", |
|||
"Search...": "Cari...", |
|||
"Avg. Ping": "Rata-rata Ping", |
|||
"Avg. Response": "Rata-rata Tanggapan", |
|||
"Entry Page": "Halaman Masuk", |
|||
statusPageNothing: "Tidak ada di sini, silakan tambahkan grup atau monitor.", |
|||
"No Services": "Tidak ada Layanan", |
|||
"All Systems Operational": "Semua Sistem Berfungsi", |
|||
"Partially Degraded Service": "Layanan Terdegradasi Sebagian", |
|||
"Degraded Service": "Layanan Terdegradasi", |
|||
"Add Group": "Tambah Grup", |
|||
"Add a monitor": "Tambah monitor", |
|||
"Edit Status Page": "Edit Halaman Status", |
|||
"Go to Dashboard": "Pergi ke Dasbor", |
|||
"Status Page": "Halaman Status", |
|||
defaultNotificationName: "{notification} saya Peringatan ({number})", |
|||
here: "di sini", |
|||
Required: "Dibutuhkan", |
|||
telegram: "Telegram", |
|||
"Bot Token": "Bot Token", |
|||
"You can get a token from": "Anda bisa mendapatkan token dari", |
|||
"Chat ID": "Chat ID", |
|||
supportTelegramChatID: "Mendukung Obrolan Langsung / Grup / Channel Chat ID", |
|||
wayToGetTelegramChatID: "Anda bisa mendapatkan chat id Anda dengan mengirim pesan ke bot dan pergi ke url ini untuk melihat chat_id:", |
|||
"YOUR BOT TOKEN HERE": "BOT TOKEN ANDA DI SINI", |
|||
chatIDNotFound: "Chat ID tidak ditemukan, tolong kirim pesan ke bot ini dulu", |
|||
webhook: "Webhook", |
|||
"Post URL": "Post URL", |
|||
"Content Type": "Tipe konten", |
|||
webhookJsonDesc: "{0} bagus untuk peladen http modern seperti express.js", |
|||
webhookFormDataDesc: "{multipart} bagus untuk PHP, Anda hanya perlu mengurai json dengan {decodeFunction}", |
|||
smtp: "Surel (SMTP)", |
|||
secureOptionNone: "None / STARTTLS (25, 587)", |
|||
secureOptionTLS: "TLS (465)", |
|||
"Ignore TLS Error": "Abaikan Kesalahan TLS", |
|||
"From Email": "Dari Surel", |
|||
"To Email": "Ke Surel", |
|||
smtpCC: "CC", |
|||
smtpBCC: "BCC", |
|||
discord: "Discord", |
|||
"Discord Webhook URL": "Discord Webhook URL", |
|||
wayToGetDiscordURL: "Anda bisa mendapatkan ini dengan pergi ke Server Settings -> Integrations -> Create Webhook", |
|||
"Bot Display Name": "Nama Bot", |
|||
"Prefix Custom Message": "Awalan Pesan", |
|||
"Hello @everyone is...": "Halo {'@'}everyone is...", |
|||
teams: "Microsoft Teams", |
|||
"Webhook URL": "Webhook URL", |
|||
wayToGetTeamsURL: "Anda dapat mempelajari cara membuat url webhook {0}.", |
|||
signal: "Sinyal", |
|||
Number: "Nomer", |
|||
Recipients: "Penerima", |
|||
needSignalAPI: "Anda harus memiliki klien sinyal dengan REST API.", |
|||
wayToCheckSignalURL: "Anda dapat memeriksa url ini untuk melihat cara menyiapkannya:", |
|||
signalImportant: "PENTING: Anda tidak dapat mencampur grup dan nomor di penerima!", |
|||
gotify: "Gotify", |
|||
"Application Token": "Token Aplikasi", |
|||
"Server URL": "URL Peladen", |
|||
Priority: "Prioritas", |
|||
slack: "Slack", |
|||
"Icon Emoji": "Ikon Emoji", |
|||
"Channel Name": "Nama Saluran", |
|||
"Uptime Kuma URL": "Uptime Kuma URL", |
|||
aboutWebhooks: "Info lain tentang webhook: {0}", |
|||
aboutChannelName: "Masukan nama saluran di {0} Kolom Nama Saluran jika Anda ingin melewati saluran webhook. Contoh: #saluran-lain", |
|||
aboutKumaURL: "Jika Anda membiarkan bidang URL Uptime Kuma kosong, itu akan menjadi bawaan ke halaman Proyek Github.", |
|||
emojiCheatSheet: "Lembar contekan emoji: {0}", |
|||
"rocket.chat": "Rocket.chat", |
|||
pushover: "Pushover", |
|||
pushy: "Pushy", |
|||
octopush: "Octopush", |
|||
promosms: "PromoSMS", |
|||
lunasea: "LunaSea", |
|||
apprise: "Apprise (Mendukung 50+ layanan notifikasi)", |
|||
pushbullet: "Pushbullet", |
|||
line: "Line Messenger", |
|||
mattermost: "Mattermost", |
|||
"User Key": "Kunci pengguna", |
|||
Device: "Perangkat", |
|||
"Message Title": "Judul Pesan", |
|||
"Notification Sound": "Suara Nofifikasi", |
|||
"More info on:": "Info lebih lanjut tentang: {0}", |
|||
pushoverDesc1: "Prioritas darurat (2) memiliki batas waktu bawaan 30 detik antara percobaan ulang dan akan kadaluwarsa setelah 1 jam.", |
|||
pushoverDesc2: "Jika Anda ingin mengirim pemberitahuan ke perangkat yang berbeda, isi kolom Perangkat.", |
|||
"SMS Type": "Tipe SMS", |
|||
octopushTypePremium: "Premium (Cepat - direkomendasikan untuk mengingatkan)", |
|||
octopushTypeLowCost: "Low Cost (Lambat, terkadang diblokir oleh operator)", |
|||
"Check octopush prices": "Cek harga octopush {0}.", |
|||
octopushPhoneNumber: "Nomer Telpon/HP (format internasional, contoh : +33612345678) ", |
|||
octopushSMSSender: "Nama Pengirim SMS : 3-11 karakter alfanumerik dan spasi (a-zA-Z0-9)", |
|||
"LunaSea Device ID": "LunaSea Device ID", |
|||
"Apprise URL": "Apprise URL", |
|||
"Example:": "Contoh: {0}", |
|||
"Read more:": "Baca lebih lajut: {0}", |
|||
"Status:": "Status: {0}", |
|||
"Read more": "Baca lebih lajut", |
|||
appriseInstalled: "Apprise diinstall.", |
|||
appriseNotInstalled: "Apprise tidak diinstall. {0}", |
|||
"Access Token": "Token Akses", |
|||
"Channel access token": "Token akses saluran", |
|||
"Line Developers Console": "Konsol Pengembang Line", |
|||
lineDevConsoleTo: "Konsol Pengembang Line - {0}", |
|||
"Basic Settings": "Pengaturan Dasar", |
|||
"User ID": "ID User", |
|||
"Messaging API": "Messaging API", |
|||
wayToGetLineChannelToken: "Pertama akses {0}, buat penyedia dan saluran (Messaging API), lalu Anda bisa mendapatkan token akses saluran dan id pengguna dari item menu yang disebutkan di atas.", |
|||
"Icon URL": "Icon URL", |
|||
aboutIconURL: "Anda dapat memberikan tautan ke gambar di \"Icon URL\" untuk mengganti gambar profil bawaan. Tidak akan digunakan jika Ikon Emoji diset.", |
|||
aboutMattermostChannelName: "Anda dapat mengganti saluran bawaan tujuan posting webhook dengan memasukkan nama saluran ke dalam Kolom \"Channel Name\". Ini perlu diaktifkan di pengaturan webhook Mattermost. contoh: #other-channel", |
|||
matrix: "Matrix", |
|||
promosmsTypeEco: "SMS ECO - murah tapi lambat dan sering kelebihan beban. Terbatas hanya untuk penerima Polandia.", |
|||
promosmsTypeFlash: "SMS FLASH - Pesan akan otomatis muncul di perangkat penerima. Terbatas hanya untuk penerima Polandia.", |
|||
promosmsTypeFull: "SMS FULL - SMS tingkat premium, Anda dapat menggunakan Nama Pengirim Anda (Anda harus mendaftarkan nama terlebih dahulu). Dapat diAndalkan untuk peringatan.", |
|||
promosmsTypeSpeed: "SMS SPEED - Prioritas tertinggi dalam sistem. Sangat cepat dan dapat diAndalkan tetapi mahal (sekitar dua kali lipat dari harga SMS FULL).", |
|||
promosmsPhoneNumber: "Nomor telepon (untuk penerima Polandia Anda dapat melewati kode area)", |
|||
promosmsSMSSender: "Nama Pengirim SMS : Nama pra-registrasi atau salah satu bawaan: InfoSMS, Info SMS, MaxSMS, INFO, SMS", |
|||
"Feishu WebHookUrl": "Feishu WebHookUrl", |
|||
}; |
@ -0,0 +1,282 @@ |
|||
export default { |
|||
languageName: "Norsk", |
|||
checkEverySecond: "Sjekk hvert {0} sekund.", |
|||
retryCheckEverySecond: "Prøv igjen hvert {0} sekund.", |
|||
retriesDescription: "Maksimalt antall forsøk før tjenesten er merket som nede og et varsel sendes", |
|||
ignoreTLSError: "Ignorer TLS/SSL-feil for HTTPS-nettsteder", |
|||
upsideDownModeDescription: "Snu statusen opp ned. Hvis tjenesten er tilgjengelig, er den NED.", |
|||
maxRedirectDescription: "Maksimalt antall viderekoblinger å følge. Sett til 0 for å deaktivere viderekoblinger.", |
|||
acceptedStatusCodesDescription: "Velg statuskoder som anses som et vellykket svar.", |
|||
passwordNotMatchMsg: "Passordene stemmer ikke overens.", |
|||
notificationDescription: "Tilordne et varsel for å overvåkningen for å få det til å fungere.", |
|||
keywordDescription: "Søk etter nøkkelord i vanlig HTML eller JSON, og det er versalfølsom", |
|||
pauseDashboardHome: "Pause", |
|||
deleteMonitorMsg: "Er du sikker på at du vil slette denne overvåkningen?", |
|||
deleteNotificationMsg: "Er du sikker på at du vil slette dette varselet for alle overvåkningene?", |
|||
resoverserverDescription: "Cloudflare er standardserveren, kan du når som helst endre DNS-serveren.", |
|||
rrtypeDescription: "Velg RR-typen du vil overvåke", |
|||
pauseMonitorMsg: "Er du sikker på at du vil sette en pause?", |
|||
enableDefaultNotificationDescription: "For hver ny overvåkning vil denne varslingen være aktivert som standard. Du kan fortsatt deaktivere varselet separat for hver overvåkning.", |
|||
clearEventsMsg: "Er du sikker på at du vil slette alle hendelser for denne overvåkningen?", |
|||
clearHeartbeatsMsg: "Er du sikker på at du vil slette alle hjerteslag for denne overvåkningen?", |
|||
confirmClearStatisticsMsg: "Er du sikker på at du vil slette ALL statistikk?", |
|||
importHandleDescription: "Velg 'Hopp over eksisterende' hvis du vil hoppe over hver overvåkning eller varsel med samme navn. 'Overskriv' sletter alle eksisterende overvåkninger og varsler.", |
|||
confirmImportMsg: "Er du sikker på å importere sikkerhetskopien? Sørg for at du har valgt riktig importalternativ.", |
|||
twoFAVerifyLabel: "Skriv inn tokenet ditt for å bekrefte at 2FA fungerer", |
|||
tokenValidSettingsMsg: "Token er gyldig! Du kan nå lagre 2FA-innstillingene.", |
|||
confirmEnableTwoFAMsg: "Er du sikker på at du vil aktivere 2FA?", |
|||
confirmDisableTwoFAMsg: "Er du sikker på at du vil deaktivere 2FA?", |
|||
Settings: "Innstillinger", |
|||
Dashboard: "Dashboard", |
|||
"New Update": "Ny Oppdatering", |
|||
Language: "Språk", |
|||
Appearance: "Utseende", |
|||
Theme: "Tema", |
|||
General: "Generelt", |
|||
Version: "Versjon", |
|||
"Check Update On GitHub": "Sjekk oppdatering på GitHub", |
|||
List: "Liste", |
|||
Add: "Legg til", |
|||
"Add New Monitor": "Legg til ny overvåkning", |
|||
"Quick Stats": "Statistikk", |
|||
Up: "Oppe", |
|||
Down: "Nede", |
|||
Pending: "Avventer", |
|||
Unknown: "Ukjent", |
|||
Pause: "Pause", |
|||
Name: "Navn", |
|||
Status: "Status", |
|||
DateTime: "Dato tid", |
|||
Message: "Melding", |
|||
"No important events": "Ingen viktige hendelser", |
|||
Resume: "Fortsett", |
|||
Edit: "Endre", |
|||
Delete: "Slett", |
|||
Current: "Nåværende", |
|||
Uptime: "Oppetid", |
|||
"Cert Exp.": "Sertifikat utløper", |
|||
days: "dager", |
|||
day: "dag", |
|||
"-day": "-dag", |
|||
hour: "time", |
|||
"-hour": "-time", |
|||
Response: "Respons", |
|||
Ping: "Ping", |
|||
"Monitor Type": "Overvåkningstype", |
|||
Keyword: "Stikkord", |
|||
"Friendly Name": "Vennlig navn", |
|||
URL: "URL", |
|||
Hostname: "Vertsnavn", |
|||
Port: "Port", |
|||
"Heartbeat Interval": "Hjerteslagsintervall", |
|||
Retries: "Forsøk", |
|||
"Heartbeat Retry Interval": "Hjerteslagsforsøkintervall", |
|||
Advanced: "Avansert", |
|||
"Upside Down Mode": "Opp-ned-modus", |
|||
"Max. Redirects": "Maks. viderekoblinger", |
|||
"Accepted Status Codes": "Godkjente statuskoder", |
|||
Save: "Lagre", |
|||
Notifications: "Varsler", |
|||
"Not available, please setup.": "Ikke tilgjengelig, sett opp.", |
|||
"Setup Notification": "Sett opp varsel", |
|||
Light: "Lys", |
|||
Dark: "Mørk", |
|||
Auto: "Auto", |
|||
"Theme - Heartbeat Bar": "Theme - Heartbeat Bar", |
|||
Normal: "Normal", |
|||
Bottom: "Bunn", |
|||
None: "Ingen", |
|||
Timezone: "Tidssone", |
|||
"Search Engine Visibility": "Søkemotor synlighet", |
|||
"Allow indexing": "Tillat indeksering", |
|||
"Discourage search engines from indexing site": "Avskrekk søkemotorer fra å indeksere nettstedet", |
|||
"Change Password": "Endre passord", |
|||
"Current Password": "Nåværende passord", |
|||
"New Password": "Nytt passord", |
|||
"Repeat New Password": "Gjenta nytt passord", |
|||
"Update Password": "Oppdater passord", |
|||
"Disable Auth": "Deaktiver autentisering", |
|||
"Enable Auth": "Aktiver autentisering", |
|||
Logout: "Logg ut", |
|||
Leave: "Forlat", |
|||
"I understand, please disable": "Jeg forstår, deaktiver", |
|||
Confirm: "Bekreft", |
|||
Yes: "Ja", |
|||
No: "Nei", |
|||
Username: "Brukernavn", |
|||
Password: "Passord", |
|||
"Remember me": "Husk meg", |
|||
Login: "Logg inn", |
|||
"No Monitors, please": "Ingen overvåkning, vær så snill", |
|||
"add one": "legg til en", |
|||
"Notification Type": "Meldingstype", |
|||
Email: "E-post", |
|||
Test: "Test", |
|||
"Certificate Info": "Sertifikatinformasjon", |
|||
"Resolver Server": "DNS-server", |
|||
"Resource Record Type": "DNS-posttype", |
|||
"Last Result": "Siste resultat", |
|||
"Create your admin account": "Opprett en administratorkonto", |
|||
"Repeat Password": "Gjenta passord", |
|||
"Import Backup": "Importer sikkerhetskopi", |
|||
"Export Backup": "Eksporter sikkerhetskopi", |
|||
Export: "Eksporter", |
|||
Import: "Importer", |
|||
respTime: "Svartid (ms)", |
|||
notAvailableShort: "N/A", |
|||
"Default enabled": "Standard aktivert", |
|||
"Apply on all existing monitors": "Påfør på alle eksisterende overvåkninger", |
|||
Create: "Opprett", |
|||
"Clear Data": "Slett data", |
|||
Events: "Hendelser", |
|||
Heartbeats: "Hjerteslag", |
|||
"Auto Get": "Auto Get", |
|||
backupDescription: "Du kan sikkerhetskopiere alle overvåkninger og alle varsler til en JSON-fil.", |
|||
backupDescription2: "PS: Historikk og hendelsesdata er ikke inkludert.", |
|||
backupDescription3: "Følsomme data som varslingstokener er inkludert i eksportfilen. Vennligst oppbevar dem nøye.", |
|||
alertNoFile: "Velg en fil som skal importeres.", |
|||
alertWrongFileType: "Velg en JSON-fil.", |
|||
"Clear all statistics": "Fjern all statistikk", |
|||
"Skip existing": "Hopp over eksisterende", |
|||
Overwrite: "Overskriv", |
|||
Options: "Alternativer", |
|||
"Keep both": "Behold begge", |
|||
"Verify Token": "Bekreft token", |
|||
"Setup 2FA": "Konfigurer 2FA", |
|||
"Enable 2FA": "Aktiver 2FA", |
|||
"Disable 2FA": "Deaktiver 2FA", |
|||
"2FA Settings": "2FA Innstillinger", |
|||
"Two Factor Authentication": "To-faktor autentisering", |
|||
Active: "Aktiv", |
|||
Inactive: "Inaktiv", |
|||
Token: "Token", |
|||
"Show URI": "Vis URI", |
|||
Tags: "Etiketter", |
|||
"Add New below or Select...": "Legg til nytt nedenfor eller Velg ...", |
|||
"Tag with this name already exist.": "Etikett med dette navnet eksisterer allerede.", |
|||
"Tag with this value already exist.": "Etikett med denne verdien finnes allerede.", |
|||
color: "farge", |
|||
"value (optional)": "verdi (valgfritt)", |
|||
Gray: "Grå", |
|||
Red: "Rød", |
|||
Orange: "Oransje", |
|||
Green: "Grønn", |
|||
Blue: "Blå", |
|||
Indigo: "Indigo", |
|||
Purple: "Lilla", |
|||
Pink: "Rosa", |
|||
"Search...": "Søk...", |
|||
"Avg. Ping": "Gj.sn. Ping", |
|||
"Avg. Response": "Gj.sn. Respons", |
|||
"Entry Page": "Oppføringsside", |
|||
statusPageNothing: "Ingenting her, vennligst legg til en gruppe eller en overvåkning.", |
|||
"No Services": "Ingen tjenester", |
|||
"All Systems Operational": "Alle systemer i drift", |
|||
"Partially Degraded Service": "Delvis degradert drift", |
|||
"Degraded Service": "Degradert drift", |
|||
"Add Group": "Legg til gruppe", |
|||
"Add a monitor": "Legg til en overvåkning", |
|||
"Edit Status Page": "Rediger statusside", |
|||
"Go to Dashboard": "Gå til Dashboard", |
|||
"Status Page": "Statusside", |
|||
defaultNotificationName: "Min {notification} varsling ({number})", |
|||
here: "here", |
|||
Required: "Obligatorisk", |
|||
telegram: "Telegram", |
|||
"Bot Token": "Bot Token", |
|||
wayToGetTelegramToken: "Du kan få et token fra {0}.", |
|||
"Chat ID": "Chat ID", |
|||
supportTelegramChatID: "Support Direct Chat / Group / Channel's Chat ID", |
|||
wayToGetTelegramChatID: "Du kan få chat-ID-en din ved å sende meldingen til boten og gå til denne nettadressen for å se chat_id:", |
|||
"YOUR BOT TOKEN HERE": "DITT BOT TOKEN HER", |
|||
chatIDNotFound: "Chat-ID ble ikke funnet. Send en melding til denne boten først", |
|||
webhook: "Webhook", |
|||
"Post URL": "Post URL", |
|||
"Content Type": "Content Type", |
|||
webhookJsonDesc: "{0} er bra for alle moderne HTTP-servere som express.js", |
|||
webhookFormDataDesc: "{multipart} er bra for PHP, du trenger bare å analysere JSON etter {decodeFunction}", |
|||
smtp: "E-post (SMTP)", |
|||
secureOptionNone: "None / STARTTLS (25, 587)", |
|||
secureOptionTLS: "TLS (465)", |
|||
"Ignore TLS Error": "Ignorer TLS feilmelding", |
|||
"From Email": "Fra E-post", |
|||
"To Email": "Til E-post", |
|||
smtpCC: "CC", |
|||
smtpBCC: "BCC", |
|||
discord: "Discord", |
|||
"Discord Webhook URL": "Discord Webhook URL", |
|||
wayToGetDiscordURL: "Du kan få dette ved å gå til Serverinnstillinger -> Integrasjoner -> Webhooks -> Ny webhook", |
|||
"Bot Display Name": "Bot Visningsnavn", |
|||
"Prefix Custom Message": "Prefiks tilpasset melding", |
|||
"Hello @everyone is...": "Hei {'@'}everyone det er...", |
|||
teams: "Microsoft Teams", |
|||
"Webhook URL": "Webhook URL", |
|||
wayToGetTeamsURL: "Du kan lære hvordan du oppretter en webhook-URL {0}.", |
|||
signal: "Signal", |
|||
Number: "Nummer", |
|||
Recipients: "Mottakere", |
|||
needSignalAPI: "Du må ha en Signal-klient med REST API.", |
|||
wayToCheckSignalURL: "Du kan sjekke denne nettadressen for å se hvordan du konfigurerer en:", |
|||
signalImportant: "VIKTIG: Du kan ikke blande grupper og nummere i mottakere!", |
|||
gotify: "Gotify", |
|||
"Application Token": "Application Token", |
|||
"Server URL": "Server URL", |
|||
Priority: "Prioritet", |
|||
slack: "Slack", |
|||
"Icon Emoji": "Icon Emoji", |
|||
"Channel Name": "Kanal navn", |
|||
"Uptime Kuma URL": "Uptime Kuma URL", |
|||
aboutWebhooks: "Mer informasjon om webhooks på: {0}", |
|||
aboutChannelName: "Skriv inn kanalnavnet på {0} Kanalnavn-feltet hvis du vil omgå webhook-kanalen. Eks: #other-channel", |
|||
aboutKumaURL: "Hvis du lar Uptime Kuma URL feltet være blank, den blir som standard til Github-siden for dette prosjektet.", |
|||
emojiCheatSheet: "Emoji cheat sheet: {0}", |
|||
"rocket.chat": "Rocket.chat", |
|||
pushover: "Pushover", |
|||
pushy: "Pushy", |
|||
octopush: "Octopush", |
|||
promosms: "PromoSMS", |
|||
lunasea: "LunaSea", |
|||
apprise: "Apprise (Support 50+ Notification services)", |
|||
pushbullet: "Pushbullet", |
|||
line: "Line Messenger", |
|||
mattermost: "Mattermost", |
|||
"User Key": "User Key", |
|||
Device: "Device", |
|||
"Message Title": "Message Title", |
|||
"Notification Sound": "Notification Sound", |
|||
"More info on:": "More info on: {0}", |
|||
pushoverDesc1: "Emergency priority (2) has default 30 second timeout between retries and will expire after 1 hour.", |
|||
pushoverDesc2: "If you want to send notifications to different devices, fill out Device field.", |
|||
"SMS Type": "SMS Type", |
|||
octopushTypePremium: "Premium (Fast - recommended for alerting)", |
|||
octopushTypeLowCost: "Low Cost (Slow, sometimes blocked by operator)", |
|||
"Check octopush prices": "Check octopush prices {0}.", |
|||
octopushPhoneNumber: "Phone number (intl format, eg : +33612345678) ", |
|||
octopushSMSSender: "SMS Sender Name : 3-11 alphanumeric characters and space (a-zA-Z0-9)", |
|||
"LunaSea Device ID": "LunaSea Device ID", |
|||
"Apprise URL": "Apprise URL", |
|||
"Example:": "Example: {0}", |
|||
"Read more:": "Read more: {0}", |
|||
"Status:": "Status: {0}", |
|||
"Read more": "Read more", |
|||
appriseInstalled: "Apprise is installed.", |
|||
appriseNotInstalled: "Apprise is not installed. {0}", |
|||
"Access Token": "Access Token", |
|||
"Channel access token": "Channel access token", |
|||
"Line Developers Console": "Line Developers Console", |
|||
lineDevConsoleTo: "Line Developers Console - {0}", |
|||
"Basic Settings": "Basic Settings", |
|||
"User ID": "User ID", |
|||
"Messaging API": "Messaging API", |
|||
wayToGetLineChannelToken: "First access the {0}, create a provider and channel (Messaging API), then you can get the channel access token and user id from the above mentioned menu items.", |
|||
"Icon URL": "Icon URL", |
|||
aboutIconURL: "You can provide a link to a picture in \"Icon URL\" to override the default profile picture. Will not be used if Icon Emoji is set.", |
|||
aboutMattermostChannelName: "You can override the default channel that webhook posts to by entering the channel name into \"Channel Name\" field. This needs to be enabled in Mattermost webhook settings. Ex: #other-channel", |
|||
matrix: "Matrix", |
|||
promosmsTypeEco: "SMS ECO - cheap but slow and often overloaded. Limited only to Polish recipients.", |
|||
promosmsTypeFlash: "SMS FLASH - Message will automatically show on recipient device. Limited only to Polish recipients.", |
|||
promosmsTypeFull: "SMS FULL - Premium tier of SMS, You can use Your Sender Name (You need to register name first). Reliable for alerts.", |
|||
promosmsTypeSpeed: "SMS SPEED - Highest priority in system. Very quick and reliable but costly (about twice of SMS FULL price).", |
|||
promosmsPhoneNumber: "Phone number (for Polish recipient You can skip area codes)", |
|||
promosmsSMSSender: "SMS Sender Name : Pre-registred name or one of defaults: InfoSMS, SMS Info, MaxSMS, INFO, SMS", |
|||
}; |
@ -0,0 +1,283 @@ |
|||
export default { |
|||
languageName: "Vietnamese", |
|||
checkEverySecond: "Kiểm tra mỗi {0} giây.", |
|||
retryCheckEverySecond: "Thử lại mỗi {0} giây.", |
|||
retriesDescription: "Số lần thử lại tối đa trước khi dịch vụ được đánh dấu là down và gửi thông báo.", |
|||
ignoreTLSError: "Bỏ qua lỗi TLS/SSL với các web HTTPS.", |
|||
upsideDownModeDescription: "Trạng thái đảo ngược, nếu dịch vụ có thể truy cập được nghĩa là DOWN.", |
|||
maxRedirectDescription: "Số lần chuyển hướng (redirect) tối đa. Đặt thành 0 để tắt chuyển hướng", |
|||
acceptedStatusCodesDescription: "Chọn mã code trạng thái được coi là phản hồi thành công.", |
|||
passwordNotMatchMsg: "Mật khẩu nhập lại không khớp.", |
|||
notificationDescription: "Vui lòng chỉ định một kênh thông báo.", |
|||
keywordDescription: "Từ khoá tìm kiếm phản hồi ở dạng html hoặc JSON, có phân biệt chữ HOA - thường", |
|||
pauseDashboardHome: "Tạm dừng", |
|||
deleteMonitorMsg: "Bạn chắc chắn muốn xóa monitor này chứ?", |
|||
deleteNotificationMsg: "Bạn có chắc chắn muốn xóa kênh thông báo này cho tất cả monitor?", |
|||
resoverserverDescription: "Cloudflare là máy chủ mặc định, bạn có thể thay đổi bất cứ lúc nào.", |
|||
rrtypeDescription: "Hãy chọn RR-Type mà bạn muốn giám sát", |
|||
pauseMonitorMsg: "Bạn chắc chắn muốn tạm dừng chứ?", |
|||
enableDefaultNotificationDescription: "Bật làm mặc định cho mọi monitor mới về sau. Bạn vẫn có thể tắt thông báo riêng cho từng monitor.", |
|||
clearEventsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ sự kiện cho monitor này chứ?", |
|||
clearHeartbeatsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ heartbeats cho monitor này chứ?", |
|||
confirmClearStatisticsMsg: "Bạn chắc chắn muốn xoá TẤT CẢ số liệu thống kê?", |
|||
importHandleDescription: "Chọn 'Skip existing' nếu bạn muốn bỏ qua mọi monitor và kênh thông báo trùng tên. 'Overwrite' sẽ ghi đè lên tất cả các monitor và kênh thông báo.", |
|||
confirmImportMsg: "Bạn có chắc chắn muốn khôi phục bản bản sao lưu này không?.", |
|||
twoFAVerifyLabel: "Vui lòng nhập mã token của bạn để xác minh rằng 2FA đang hoạt động", |
|||
tokenValidSettingsMsg: "Mã token hợp lệ! Bạn có thể lưu cài đặt 2FA bây giờ.", |
|||
confirmEnableTwoFAMsg: "Bạn chắc chắn muốn bật 2FA chứ?", |
|||
confirmDisableTwoFAMsg: "Bạn chắc chắn muốn tắt 2FA chứ?", |
|||
Settings: "Cài đặt", |
|||
Dashboard: "Dashboard", |
|||
"New Update": "Bản cập nhật mới", |
|||
Language: "Ngôn ngữ", |
|||
Appearance: "Giao diện", |
|||
Theme: "Theme", |
|||
General: "Chung", |
|||
Version: "Phiên bản", |
|||
"Check Update On GitHub": "Kiểm tra bản cập nhật mới trên GitHub", |
|||
List: "List", |
|||
Add: "Thêm", |
|||
"Add New Monitor": "Thêm mới Monitor", |
|||
"Quick Stats": "Thống kê nhanh", |
|||
Up: "Lên", |
|||
Down: "Xuống", |
|||
Pending: "Chờ xử lý", |
|||
Unknown: "Không xác định", |
|||
Pause: "Tạm dừng", |
|||
Name: "Tên", |
|||
Status: "Trạng thái", |
|||
DateTime: "Ngày tháng", |
|||
Message: "Tin nhắn", |
|||
"No important events": "Không có sự kiện quan trọng nào", |
|||
Resume: "Khôi phục", |
|||
Edit: "Sửa", |
|||
Delete: "Xoá", |
|||
Current: "Hiện tại", |
|||
Uptime: "Uptime", |
|||
"Cert Exp.": "Cert hết hạn", |
|||
days: "ngày", |
|||
day: "ngày", |
|||
"-day": "-ngày", |
|||
hour: "giờ", |
|||
"-hour": "-giờ", |
|||
Response: "Phản hồi", |
|||
Ping: "Ping", |
|||
"Monitor Type": "Kiểu monitor", |
|||
Keyword: "Từ khoá", |
|||
"Friendly Name": "Tên dễ hiểu", |
|||
URL: "URL", |
|||
Hostname: "Hostname", |
|||
Port: "Port", |
|||
"Heartbeat Interval": "Tần suất heartbeat", |
|||
Retries: "Thử lại", |
|||
"Heartbeat Retry Interval": "Tần suất thử lại của Heartbeat", |
|||
Advanced: "Nâng cao", |
|||
"Upside Down Mode": "Trạng thái đảo ngược", |
|||
"Max. Redirects": "Chuyển hướng tối đa", |
|||
"Accepted Status Codes": "Codes trạng thái chấp nhận", |
|||
Save: "Lưu", |
|||
Notifications: "Thông báo", |
|||
"Not available, please setup.": "Chưa sẵn sàng, hãy cài đặt.", |
|||
"Setup Notification": "Cài đặt thông báo", |
|||
Light: "Sáng", |
|||
Dark: "Tối", |
|||
Auto: "Tự động", |
|||
"Theme - Heartbeat Bar": "Theme - Heartbeat Bar", |
|||
Normal: "Bình thường", |
|||
Bottom: "Dưới", |
|||
None: "Không có", |
|||
Timezone: "Múi giờ", |
|||
"Search Engine Visibility": "Hiển thị với các công cụ tìm kiếm", |
|||
"Allow indexing": "Cho phép indexing", |
|||
"Discourage search engines from indexing site": "Ngăn chặn các công cụ tìm kiếm indexing trang", |
|||
"Change Password": "Thay đổi mật khẩu", |
|||
"Current Password": "Mật khẩu hiện tại", |
|||
"New Password": "Mật khẩu mới", |
|||
"Repeat New Password": "Lặp lại mật khẩu mới", |
|||
"Update Password": "Cập nhật mật khẩu", |
|||
"Disable Auth": "Tắt xác minh", |
|||
"Enable Auth": "Bật xác minh", |
|||
Logout: "Đăng xuất", |
|||
Leave: "Rời", |
|||
"I understand, please disable": "Tôi hiểu, làm ơn hãy tắt!", |
|||
Confirm: "Xác nhận", |
|||
Yes: "Có", |
|||
No: "Không", |
|||
Username: "Tài khoản", |
|||
Password: "Mật khẩu", |
|||
"Remember me": "Lưu phiên đăng nhập", |
|||
Login: "Đăng nhập", |
|||
"No Monitors, please": "Không có monitor nào", |
|||
"add one": "Thêm mới", |
|||
"Notification Type": "Kiểu thông báo", |
|||
Email: "Email", |
|||
Test: "Thử", |
|||
"Certificate Info": "Thông tin Certificate", |
|||
"Resolver Server": "Máy chủ Resolver", |
|||
"Resource Record Type": "Loại bản ghi", |
|||
"Last Result": "Kết quả cuối cùng", |
|||
"Create your admin account": "Tạo tài khoản quản trị", |
|||
"Repeat Password": "Lặp lại mật khẩu", |
|||
"Import Backup": "Khôi phục bản sao lưu", |
|||
"Export Backup": "Xuất bản sao lưu", |
|||
Export: "Xuất", |
|||
Import: "Khôi phục", |
|||
respTime: "Thời gian phản hồi (ms)", |
|||
notAvailableShort: "N/A", |
|||
"Default enabled": "Mặc định bật", |
|||
"Apply on all existing monitors": "Áp dụng cho tất cả monitor đang có", |
|||
Create: "Tạo", |
|||
"Clear Data": "Xoá dữ liệu", |
|||
Events: "Sự kiện", |
|||
Heartbeats: "Heartbeats", |
|||
"Auto Get": "Tự động lấy", |
|||
backupDescription: "Bạn có thể sao lưu tất cả các màn hình và tất cả các thông báo vào một file JSON.", |
|||
backupDescription2: "PS: Không bao gồm dữ liệu lịch sử các sự kiện.", |
|||
backupDescription3: "Hãy lưu giữ file này cẩn thận vì trong file đó chứa cả các mã token thông báo.", |
|||
alertNoFile: "Hãy chọn file để khôi phục.", |
|||
alertWrongFileType: "Hãy chọn file JSON.", |
|||
"Clear all statistics": "Xoá tất cả thống kê", |
|||
"Skip existing": "Skip existing", |
|||
Overwrite: "Ghi đè", |
|||
Options: "Tuỳ chọn", |
|||
"Keep both": "Giữ lại cả hai", |
|||
"Verify Token": "Xác minh Token", |
|||
"Setup 2FA": "Cài đặt 2FA", |
|||
"Enable 2FA": "Bật 2FA", |
|||
"Disable 2FA": "Tắt 2FA", |
|||
"2FA Settings": "Cài đặt 2FA", |
|||
"Two Factor Authentication": "Xác thực hai yếu tố", |
|||
Active: "Hoạt động", |
|||
Inactive: "Ngừng hoạt động", |
|||
Token: "Token", |
|||
"Show URI": "Hiển thị URI", |
|||
Tags: "Tags", |
|||
"Add New below or Select...": "Thêm mới ở dưới hoặc Chọn...", |
|||
"Tag with this name already exist.": "Tag với tên đã tồn tại.", |
|||
"Tag with this value already exist.": "Tag với value đã tồn tại.", |
|||
color: "Màu sắc", |
|||
"value (optional)": "Value (tuỳ chọn)", |
|||
Gray: "Xám", |
|||
Red: "Đỏ", |
|||
Orange: "Cam", |
|||
Green: "Xanh lá", |
|||
Blue: "Xanh da trời", |
|||
Indigo: "Chàm", |
|||
Purple: "Tím", |
|||
Pink: "Hồng", |
|||
"Search...": "Tìm kiếm...", |
|||
"Avg. Ping": "Ping Trung bình", |
|||
"Avg. Response": "Phản hồi trung bình", |
|||
"Entry Page": "Entry Page", |
|||
statusPageNothing: "Không có gì, hãy thêm nhóm monitor hoặc monitor.", |
|||
"No Services": "Không có dịch vụ", |
|||
"All Systems Operational": "Tất cả các hệ thống hoạt động", |
|||
"Partially Degraded Service": "Dịch vụ xuống cấp một phần", |
|||
"Degraded Service": "Degraded Service", |
|||
"Add Group": "Thêm nhóm", |
|||
"Add a monitor": "Thêm monitor", |
|||
"Edit Status Page": "Sửa trang trạng thái", |
|||
"Go to Dashboard": "Đi tới Dashboard", |
|||
"Status Page": "Trang trạng thái", |
|||
defaultNotificationName: "My {notification} Alerts ({number})", |
|||
here: "tại đây", |
|||
Required: "Bắt buộc", |
|||
telegram: "Telegram", |
|||
"Bot Token": "Bot Token", |
|||
"You can get a token from": "Bạn có thể lấy mã token từ", |
|||
"Chat ID": "Chat ID", |
|||
supportTelegramChatID: "Hỗ trợ chat trực tiếp / Nhóm / Kênh Chat ID", |
|||
wayToGetTelegramChatID: "Bạn có thể lấy chat id của mình bằng cách gửi tin nhắn tới bot và truy cập url này để xem chat_id:", |
|||
"YOUR BOT TOKEN HERE": "MÃ BOT TOKEN CỦA BẠN", |
|||
chatIDNotFound: "Không tìm thấy Chat ID, vui lòng gửi tin nhắn cho bot này trước", |
|||
webhook: "Webhook", |
|||
"Post URL": "URL đăng", |
|||
"Content Type": "Loại nội dung", |
|||
webhookJsonDesc: "{0} phù hợp với bất kỳ máy chủ http hiện đại nào như express.js", |
|||
webhookFormDataDesc: "{multipart} phù hợp với PHP, bạn chỉ cần phân tích cú pháp json bằng {decodeFunction}", |
|||
smtp: "Email (SMTP)", |
|||
secureOptionNone: "None / STARTTLS (25, 587)", |
|||
secureOptionTLS: "TLS (465)", |
|||
"Ignore TLS Error": "Bỏ qua lỗi TLS", |
|||
"From Email": "Từ Email", |
|||
"To Email": "Tới Email", |
|||
smtpCC: "CC", |
|||
smtpBCC: "BCC", |
|||
discord: "Discord", |
|||
"Discord Webhook URL": "Discord Webhook URL", |
|||
wayToGetDiscordURL: "Để lấy Discord, hãy vào: Server Settings -> Integrations -> Create Webhook", |
|||
"Bot Display Name": "Tên hiển thị của Bot", |
|||
"Prefix Custom Message": "Tiền tố tin nhắn tuỳ chọn", |
|||
"Hello @everyone is...": "Xin chào {'@'} mọi người đang...", |
|||
teams: "Microsoft Teams", |
|||
"Webhook URL": "Webhook URL", |
|||
wayToGetTeamsURL: "Bạn có thể học cách tạo webhook url {0}.", |
|||
signal: "Signal", |
|||
Number: "Số", |
|||
Recipients: "Người nhận", |
|||
needSignalAPI: "Bạn cần một tín hiệu client với REST API.", |
|||
wayToCheckSignalURL: "Bạn có thể kiểm tra url này để xem cách thiết lập:", |
|||
signalImportant: "QUAN TRỌNG: Bạn không thể kết hợp các nhóm và số trong người nhận!", |
|||
gotify: "Gotify", |
|||
"Application Token": "Mã Token ứng dụng", |
|||
"Server URL": "URL máy chủ", |
|||
Priority: "Mức ưu tiên", |
|||
slack: "Slack", |
|||
"Icon Emoji": "Icon Emoji", |
|||
"Channel Name": "Tên Channel", |
|||
"Uptime Kuma URL": "Uptime Kuma URL", |
|||
aboutWebhooks: "Thông tin thêm về webhook trên: {0}", |
|||
aboutChannelName: "Nhập tên kênh trên {0} trường Channel Name nếu bạn muốn bỏ qua kênh webhook. vd: #other-channel", |
|||
aboutKumaURL: "Nếu bạn để trống trường Uptime Kuma URL, mặc định sẽ là trang Project Github.", |
|||
emojiCheatSheet: "Bảng tra cứu Emoji: {0}", |
|||
"rocket.chat": "Rocket.chat", |
|||
pushover: "Pushover", |
|||
pushy: "Pushy", |
|||
octopush: "Octopush", |
|||
promosms: "PromoSMS", |
|||
lunasea: "LunaSea", |
|||
apprise: "Thông báo (Hỗ trợ 50+ dịch vụ thông báo)", |
|||
pushbullet: "Pushbullet", |
|||
line: "Line Messenger", |
|||
mattermost: "Mattermost", |
|||
"User Key": "User Key", |
|||
Device: "Thiết bị", |
|||
"Message Title": "Tiêu đề tin nhắn", |
|||
"Notification Sound": "Âm thanh thông báo", |
|||
"More info on:": "Thông tin chi tiết tại: {0}", |
|||
pushoverDesc1: "Mức ưu tiên khẩn cấp (2) có thời gian chờ mặc định là 30 giây giữa các lần thử lại và sẽ hết hạn sau 1 giờ.", |
|||
pushoverDesc2: "Nếu bạn muốn gửi thông báo đến các thiết bị khác nhau, hãy điền vào trường Thiết bị.", |
|||
"SMS Type": "SMS Type", |
|||
octopushTypePremium: "Premium (Nhanh - Khuyến nghị nên dùng cho cảnh báo)", |
|||
octopushTypeLowCost: "Giá rẻ (Chậm, thỉnh thoảng bị chặn)", |
|||
"Check octopush prices": "Kiểm tra giá octopush {0}.", |
|||
octopushPhoneNumber: "Số điện thoại (Định dạng intl, vd : +33612345678) ", |
|||
octopushSMSSender: "SMS người gửi : 3-11 ký tự chữ, số và dấu cách (a-zA-Z0-9)", |
|||
"LunaSea Device ID": "LunaSea ID thiết bị", |
|||
"Apprise URL": "Apprise URL", |
|||
"Example:": "Ví dụ: {0}", |
|||
"Read more:": "Đọc thêm: {0}", |
|||
"Status:": "Trạng thái: {0}", |
|||
"Read more": "Đọc thêm", |
|||
appriseInstalled: "Đã cài đặt Apprise.", |
|||
appriseNotInstalled: "Chưa cài đặt Apprise. {0}", |
|||
"Access Token": "Token truy cập", |
|||
"Channel access token": "Token kênh truy cập", |
|||
"Line Developers Console": "Line Developers Console", |
|||
lineDevConsoleTo: "Line Developers Console - {0}", |
|||
"Basic Settings": "Cài đặt cơ bản", |
|||
"User ID": "User ID", |
|||
"Messaging API": "Messaging API", |
|||
wayToGetLineChannelToken: "Trước tiên, hãy truy cập {0},tạo nhà cung cấp và kênh (Messaging API), sau đó bạn có thể nhận mã token truy cập kênh và id người dùng từ các mục menu được đề cập ở trên.", |
|||
"Icon URL": "Icon URL", |
|||
aboutIconURL: "Bạn có thể cung cấp liên kết đến ảnh trong \"Icon URL\" để ghi đè ảnh hồ sơ mặc định. Sẽ không được sử dụng nếu Biểu tượng cảm xúc được thiết lập.", |
|||
aboutMattermostChannelName: "Bạn có thể ghi đè kênh mặc định mà webhook đăng lên bằng cách nhập tên kênh vào trường \"Channel Name\". Điều này cần được bật trong cài đặt Mattermost webhook. Ví dụ: #other-channel", |
|||
matrix: "Matrix", |
|||
promosmsTypeEco: "SMS ECO - rẻ nhưng chậm và thường xuyên quá tải. Chỉ dành cho người Ba Lan.", |
|||
promosmsTypeFlash: "SMS FLASH - Tin nhắn sẽ tự động hiển thị trên thiết bị của người nhận. Chỉ dành cho người Ba Lan.", |
|||
promosmsTypeFull: "SMS FULL - SMS cao cấp, Bạn có thể sử dụng Tên Người gửi (Bạn cần đăng ký tên trước). Đáng tin cậy cho các cảnh báo.", |
|||
promosmsTypeSpeed: "SMS SPEED - Ưu tiên cao nhất trong hệ thống. Rất nhanh chóng và đáng tin cậy nhưng tốn kém, (giá gấp đôi SMS FULL).", |
|||
promosmsPhoneNumber: "Số điện thoại (Bỏ qua mã vùng với người Ba Lan)", |
|||
promosmsSMSSender: "SMS Tên người gửi: Tên đã đăng ký trước hoặc tên mặc định: InfoSMS, SMS Info, MaxSMS, INFO, SMS", |
|||
"Feishu WebHookUrl": "Feishu WebHookUrl", |
|||
}; |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue