mirror of
https://github.com/TracksApp/tracks.git
synced 2025-09-22 05:50:47 +02:00
Compare commits
620 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
97220798db | ||
![]() |
bebdcb233c | ||
![]() |
52c9a50f16 | ||
![]() |
6e0cb8125d | ||
![]() |
1d483148d7 | ||
![]() |
d397e7be97 | ||
![]() |
8a8a816645 | ||
![]() |
36cba2fffc | ||
![]() |
02ca81f761 | ||
![]() |
f8966fb48f | ||
![]() |
a121b6381d | ||
![]() |
d670a70ede | ||
![]() |
21e27915a6 | ||
![]() |
2691d18cdb | ||
![]() |
4ffdf00dca | ||
![]() |
889540cc94 | ||
![]() |
ea70f0a13b | ||
![]() |
3b2c26478f | ||
![]() |
a2d86b5d6c | ||
![]() |
86a0ace6b9 | ||
![]() |
18e9fb7b0c | ||
![]() |
a3e23ef9ed | ||
![]() |
4cf825cb83 | ||
![]() |
c684b1ce19 | ||
![]() |
86b982df8e | ||
![]() |
c1dd33975b | ||
![]() |
661ef20c5f | ||
![]() |
ab640a8f46 | ||
![]() |
8a50b67edd | ||
![]() |
61841c1f14 | ||
![]() |
e7aace3cac | ||
![]() |
160b9a7ab5 | ||
![]() |
2f5451a713 | ||
![]() |
42e397d028 | ||
![]() |
edf145f366 | ||
![]() |
82e49bd00b | ||
![]() |
e3a26f9396 | ||
![]() |
3fbf0b07f5 | ||
![]() |
4bbc809a1c | ||
![]() |
a185b2c0f8 | ||
![]() |
3ccd2345ba | ||
![]() |
95597a969c | ||
![]() |
4f6d806724 | ||
![]() |
63d2060dc1 | ||
![]() |
2eb54b1c3e | ||
![]() |
36b47125ef | ||
![]() |
d51432d09b | ||
![]() |
46a6cd716b | ||
![]() |
1a9ffd96d3 | ||
![]() |
eecd15b150 | ||
![]() |
7b6f7fe8bb | ||
![]() |
2f6dd0f808 | ||
![]() |
8a8bdfe732 | ||
![]() |
db41886954 | ||
![]() |
77d12853c1 | ||
![]() |
19c8fcc0d9 | ||
![]() |
b97aa8fd4e | ||
![]() |
fc2a8bb8f3 | ||
![]() |
70c5ba94df | ||
![]() |
761ec11e07 | ||
![]() |
c69811e19c | ||
![]() |
3fbe3b2c90 | ||
![]() |
8868c389af | ||
![]() |
23223dea9b | ||
![]() |
674e24ea62 | ||
![]() |
3e07e27099 | ||
![]() |
c43cd6cb16 | ||
![]() |
7ed9f2ca3d | ||
![]() |
b32cb2090e | ||
![]() |
2094826d2f | ||
![]() |
4f94e2dfc2 | ||
![]() |
13bdef74b3 | ||
![]() |
3fc943ce2a | ||
![]() |
e77b83683a | ||
![]() |
854034c554 | ||
![]() |
7d9c5786be | ||
![]() |
fa7d213ca7 | ||
![]() |
da726b1700 | ||
![]() |
ffa79f2820 | ||
![]() |
6d5f269d77 | ||
![]() |
2144160ec5 | ||
![]() |
41f7a86bba | ||
![]() |
03dc26c06e | ||
![]() |
10bb9e86ac | ||
![]() |
4863c82469 | ||
![]() |
3a8988ac74 | ||
![]() |
5484a4c894 | ||
![]() |
ecaed7bca7 | ||
![]() |
69d3ea5f30 | ||
![]() |
fb38741fa2 | ||
![]() |
cb9fc6900d | ||
![]() |
ad356a9a01 | ||
![]() |
b27cf9f533 | ||
![]() |
7d96e9b0cf | ||
![]() |
0487c9f17c | ||
![]() |
4e6d8396ad | ||
![]() |
c8c48306ea | ||
![]() |
87a2fca247 | ||
![]() |
9d737b57f4 | ||
![]() |
2431cdef3b | ||
![]() |
f64445cd33 | ||
![]() |
0d2223ef52 | ||
![]() |
29ce045f15 | ||
![]() |
dd406ad6cc | ||
![]() |
c5e27b3c5a | ||
![]() |
57cc1185f4 | ||
![]() |
1d1bc3b71e | ||
![]() |
fbd888c200 | ||
![]() |
186901cf32 | ||
![]() |
9a2e947173 | ||
![]() |
692b6bf653 | ||
![]() |
976ad893e7 | ||
![]() |
fe2befc72e | ||
![]() |
846494843b | ||
![]() |
57aa499027 | ||
![]() |
3221f1c194 | ||
![]() |
61b9c93a7d | ||
![]() |
1ca43b8ee5 | ||
![]() |
9742bfc338 | ||
![]() |
39ab8dddcf | ||
![]() |
450db54865 | ||
![]() |
f960c1939e | ||
![]() |
308410ea71 | ||
![]() |
d946081e0f | ||
![]() |
c56db12281 | ||
![]() |
a5e5d0934f | ||
![]() |
3077578e6b | ||
![]() |
2e82791887 | ||
![]() |
5b49f9e704 | ||
![]() |
a746dd31d3 | ||
![]() |
b3754f2ee6 | ||
![]() |
5243a0a092 | ||
![]() |
5682a380f3 | ||
![]() |
477dd9737f | ||
![]() |
4b043968ad | ||
![]() |
ecccf02cc9 | ||
![]() |
9290e32739 | ||
![]() |
df1e9a064a | ||
![]() |
e4b366494d | ||
![]() |
cfaa0a00be | ||
![]() |
06000a0aab | ||
![]() |
894e497e88 | ||
![]() |
6eef42d569 | ||
![]() |
0616dc41a7 | ||
![]() |
7be0e4286a | ||
![]() |
1438f25b79 | ||
![]() |
89a464d9ea | ||
![]() |
8e85af75e8 | ||
![]() |
322d2b62d8 | ||
![]() |
6844679547 | ||
![]() |
2204b2c246 | ||
![]() |
87950c6500 | ||
![]() |
e829daca1e | ||
![]() |
e4f3fd0737 | ||
![]() |
24c4634a7b | ||
![]() |
e70a569511 | ||
![]() |
e81919888e | ||
![]() |
d9854e1a4e | ||
![]() |
8abfafa0c6 | ||
![]() |
efea77c9cb | ||
![]() |
96712ee99c | ||
![]() |
a79660299a | ||
![]() |
5f456d5300 | ||
![]() |
fac04ee0c1 | ||
![]() |
d9f254e2c5 | ||
![]() |
10a6ebcb41 | ||
![]() |
36529c50b3 | ||
![]() |
75420d9c38 | ||
![]() |
b0d288d2ef | ||
![]() |
6a4a72270e | ||
![]() |
d64e1a0fa4 | ||
![]() |
c23ca0574e | ||
![]() |
c7d81bb79f | ||
![]() |
784f8c3009 | ||
![]() |
0fc66953c0 | ||
![]() |
49fa90c7a6 | ||
![]() |
31f35f50c7 | ||
![]() |
a984011ddc | ||
![]() |
22f42211b0 | ||
![]() |
92348f9bc5 | ||
![]() |
0d2d89780b | ||
![]() |
3fcdb41fa9 | ||
![]() |
a9a978c1f8 | ||
![]() |
e1c5fbbbc2 | ||
![]() |
36f139d879 | ||
![]() |
11a1a6a58e | ||
![]() |
62ad2f7f0b | ||
![]() |
a0999e3e45 | ||
![]() |
76d3083e8f | ||
![]() |
50f5a946d4 | ||
![]() |
13d7a711a4 | ||
![]() |
55050af2cb | ||
![]() |
f5f0193b60 | ||
![]() |
ad87729e31 | ||
![]() |
f097a1f5e9 | ||
![]() |
2bf2f9476a | ||
![]() |
7b9a1e322f | ||
![]() |
d2fff6a64c | ||
![]() |
8f7b1ab7b2 | ||
![]() |
0968152c5a | ||
![]() |
7a64917647 | ||
![]() |
8464d0c60e | ||
![]() |
212b2dc20c | ||
![]() |
75a88f2955 | ||
![]() |
ff5adc5696 | ||
![]() |
5940fe10a6 | ||
![]() |
11ef1b6f6b | ||
![]() |
a66dca4a6b | ||
![]() |
2726abb8ea | ||
![]() |
2108b203a6 | ||
![]() |
78ab8b0ff2 | ||
![]() |
713c89c6e0 | ||
![]() |
38db8f983d | ||
![]() |
720cb02697 | ||
![]() |
867f1bc5d1 | ||
![]() |
b280485ef2 | ||
![]() |
54ed7d118b | ||
![]() |
f20aa13b7b | ||
![]() |
247caf6e98 | ||
![]() |
1d79436a52 | ||
![]() |
29a8c3dff8 | ||
![]() |
167274a6da | ||
![]() |
b274c270f1 | ||
![]() |
d5235e8c61 | ||
![]() |
6274e9e1d3 | ||
![]() |
fcdc464725 | ||
![]() |
8ed97a511d | ||
![]() |
d26275c5e9 | ||
![]() |
10ad112b70 | ||
![]() |
98e57367e9 | ||
![]() |
ddf0260a03 | ||
![]() |
2214c18d9f | ||
![]() |
0eaa0d65c1 | ||
![]() |
fa8be2a238 | ||
![]() |
fd76ff273a | ||
![]() |
f024ff7650 | ||
![]() |
3a0ddc0c02 | ||
![]() |
495d84adb7 | ||
![]() |
2d5aba6ad0 | ||
![]() |
1e86b123cc | ||
![]() |
03c85842db | ||
![]() |
9ba1f7a5e3 | ||
![]() |
180af5c752 | ||
![]() |
1e1fcd20a1 | ||
![]() |
d056abbc3a | ||
![]() |
445ad25571 | ||
![]() |
a910eaf436 | ||
![]() |
e9f9d8fa5c | ||
![]() |
c27c517648 | ||
![]() |
bbff8d2d07 | ||
![]() |
b01f46e412 | ||
![]() |
781ae2de5c | ||
![]() |
3150420940 | ||
![]() |
085faab554 | ||
![]() |
05854c6560 | ||
![]() |
80c3b22e04 | ||
![]() |
86b0a7aa95 | ||
![]() |
aefa65a4b4 | ||
![]() |
fcff755284 | ||
![]() |
753d230259 | ||
![]() |
8f4a0f475f | ||
![]() |
12d7b7911c | ||
![]() |
b79c983f36 | ||
![]() |
974af02dbf | ||
![]() |
ddd8cb8f29 | ||
![]() |
1be3c27165 | ||
![]() |
063c8bd786 | ||
![]() |
a94d4fa00b | ||
![]() |
86e36b07a6 | ||
![]() |
7f567862d7 | ||
![]() |
9e662428b8 | ||
![]() |
2f32ba5595 | ||
![]() |
cecdac6af7 | ||
![]() |
9e7010b6fb | ||
![]() |
444fa0dfff | ||
![]() |
9fe75adca3 | ||
![]() |
2360a4ba4e | ||
![]() |
662782ec46 | ||
![]() |
97da4df7cb | ||
![]() |
03bc9a4dda | ||
![]() |
099a0ff886 | ||
![]() |
f76a00f261 | ||
![]() |
7584d4f051 | ||
![]() |
a9a54f76bf | ||
![]() |
6ead4c0307 | ||
![]() |
7eb80fb1a1 | ||
![]() |
f405861c60 | ||
![]() |
101c97ddff | ||
![]() |
7c5aaa9594 | ||
![]() |
010eb00f8e | ||
![]() |
f5f82bb250 | ||
![]() |
3d45c7dbae | ||
![]() |
1b1e3c5322 | ||
![]() |
7b84dadd87 | ||
![]() |
4b8dbe4a8c | ||
![]() |
ebb4e63fb2 | ||
![]() |
854cac6acf | ||
![]() |
e01d52756c | ||
![]() |
7ec8279178 | ||
![]() |
f81137591f | ||
![]() |
01b63e6c18 | ||
![]() |
a8ca55389b | ||
![]() |
b6797bf67c | ||
![]() |
d98f173aa5 | ||
![]() |
61a4de71ac | ||
![]() |
d64e3fb96d | ||
![]() |
6f8bf1db4e | ||
![]() |
e97f74041c | ||
![]() |
fbc0c4f39a | ||
![]() |
e454fc21ce | ||
![]() |
c8ddc60f0c | ||
![]() |
c214037b9a | ||
![]() |
12afa11429 | ||
![]() |
471f07bf46 | ||
![]() |
cc7dcee618 | ||
![]() |
31b46825de | ||
![]() |
f5000acb43 | ||
![]() |
c58a16106e | ||
![]() |
10ff863c38 | ||
![]() |
33ac82c262 | ||
![]() |
77af1b4148 | ||
![]() |
6345d3c643 | ||
![]() |
bb9baae664 | ||
![]() |
92c0fd2c7c | ||
![]() |
282510a7e7 | ||
![]() |
5aa51245ed | ||
![]() |
e66e782a96 | ||
![]() |
d4f7457cf4 | ||
![]() |
c278640525 | ||
![]() |
bda9bde5e1 | ||
![]() |
53d69fcb02 | ||
![]() |
e9b44f6370 | ||
![]() |
706832cc78 | ||
![]() |
596b700c7f | ||
![]() |
5537de25ef | ||
![]() |
beaf5b9064 | ||
![]() |
6d92f273a6 | ||
![]() |
1342be9697 | ||
![]() |
2ad4631ae6 | ||
![]() |
c87abb62d0 | ||
![]() |
c0cdc19a37 | ||
![]() |
2ca6b731f0 | ||
![]() |
13603eff68 | ||
![]() |
97a5f622f1 | ||
![]() |
f295bfd023 | ||
![]() |
140d804745 | ||
![]() |
5863dd47d5 | ||
![]() |
1a293ea325 | ||
![]() |
11895a160a | ||
![]() |
0164195ae9 | ||
![]() |
a55d4500a0 | ||
![]() |
399f6cfbcf | ||
![]() |
452c12b38f | ||
![]() |
5d5b552685 | ||
![]() |
1cc50d071b | ||
![]() |
3d21e2a415 | ||
![]() |
a57843ec36 | ||
![]() |
d62cd4fc90 | ||
![]() |
fae82f91b6 | ||
![]() |
69e254c4e2 | ||
![]() |
a385d82626 | ||
![]() |
76050612ea | ||
![]() |
b2c40534b6 | ||
![]() |
d2cfb7e7f9 | ||
![]() |
e088e63cb9 | ||
![]() |
67f07ec0c8 | ||
![]() |
8e598ec760 | ||
![]() |
e746f190f7 | ||
![]() |
87377792c3 | ||
![]() |
49bf58d536 | ||
![]() |
69fc52347f | ||
![]() |
08c3ced469 | ||
![]() |
d3fb77ebe5 | ||
![]() |
d2f6ac7e1b | ||
![]() |
ae9470659b | ||
![]() |
39c28c1e6d | ||
![]() |
b8657dc4d3 | ||
![]() |
4b023c0454 | ||
![]() |
3deb8ce993 | ||
![]() |
763578f165 | ||
![]() |
2802d7cf4e | ||
![]() |
1f72de1ff5 | ||
![]() |
deb2e9b123 | ||
![]() |
1fcdd40f3f | ||
![]() |
796712472e | ||
![]() |
f6ddc170c5 | ||
![]() |
0ce54f8475 | ||
![]() |
df687a6df2 | ||
![]() |
cf4a25e6c0 | ||
![]() |
b03f84893f | ||
![]() |
79f2cadd97 | ||
![]() |
07035ca2fe | ||
![]() |
0e5fa90c2d | ||
![]() |
6caacad9d1 | ||
![]() |
fdcd6b2abb | ||
![]() |
2963e2d454 | ||
![]() |
beb2583679 | ||
![]() |
ea5a4a8ec7 | ||
![]() |
f01a3fd2f9 | ||
![]() |
18c603162b | ||
![]() |
fa56fa4ef2 | ||
![]() |
7b78b635f0 | ||
![]() |
ca941cf69e | ||
![]() |
54f9379afe | ||
![]() |
0557fd3401 | ||
![]() |
ea3886b4ed | ||
![]() |
936d057217 | ||
![]() |
a00d6d5ca8 | ||
![]() |
428ee55976 | ||
![]() |
4ddc6ffc99 | ||
![]() |
0e4592f642 | ||
![]() |
f972941f4e | ||
![]() |
dc1dc7c739 | ||
![]() |
51c2889443 | ||
![]() |
228b92677e | ||
![]() |
bb63717810 | ||
![]() |
81d27edbf0 | ||
![]() |
4c372fa2f6 | ||
![]() |
df0e99b8dc | ||
![]() |
53858b10fe | ||
![]() |
bafaf6adb5 | ||
![]() |
a75e8e4cba | ||
![]() |
98f94ff185 | ||
![]() |
011162849d | ||
![]() |
5e369866b1 | ||
![]() |
58942cc5e6 | ||
![]() |
e2d435135e | ||
![]() |
eeeeb952a6 | ||
![]() |
59790c0236 | ||
![]() |
d039a9f12c | ||
![]() |
068edfe5c1 | ||
![]() |
0e95c8aa53 | ||
![]() |
f8b8e28ea1 | ||
![]() |
571f2b4ba2 | ||
![]() |
c1e2b2880e | ||
![]() |
f322b54643 | ||
![]() |
878577bf14 | ||
![]() |
d90782ee25 | ||
![]() |
10382ea4d6 | ||
![]() |
242e522d02 | ||
![]() |
9bde927072 | ||
![]() |
b194d72189 | ||
![]() |
d4a69ce2b0 | ||
![]() |
9c2fb152d9 | ||
![]() |
967289becc | ||
![]() |
d9d9d19921 | ||
![]() |
2e43dfd4e2 | ||
![]() |
371ef6e827 | ||
![]() |
b6884ad385 | ||
![]() |
98b14f8482 | ||
![]() |
af6fcc8c67 | ||
![]() |
d424d59dba | ||
![]() |
031230d807 | ||
![]() |
6f930da901 | ||
![]() |
c91a5ab05c | ||
![]() |
e6a8dbb994 | ||
![]() |
baae1f2924 | ||
![]() |
f0c2e0a19f | ||
![]() |
66aca440d5 | ||
![]() |
8afaebf721 | ||
![]() |
d89f9176b6 | ||
![]() |
aee0630a81 | ||
![]() |
9cb844d7a7 | ||
![]() |
fae6c2cb8e | ||
![]() |
e24f5f4016 | ||
![]() |
f29b72ec44 | ||
![]() |
d451e90c51 | ||
![]() |
5a98b62cb1 | ||
![]() |
076aba6f8c | ||
![]() |
c5e5f39648 | ||
![]() |
226c7c2bd8 | ||
![]() |
6130547e07 | ||
![]() |
3fd631ac6a | ||
![]() |
7c7f1b5a76 | ||
![]() |
957892055c | ||
![]() |
eb33ffdc97 | ||
![]() |
be45b47f2e | ||
![]() |
7d67195322 | ||
![]() |
ba08928618 | ||
![]() |
82bc9d7417 | ||
![]() |
5542bffe21 | ||
![]() |
45093f31fd | ||
![]() |
7010d88313 | ||
![]() |
abc4fc7b22 | ||
![]() |
c38797cc3b | ||
![]() |
f54455c845 | ||
![]() |
8cceece390 | ||
![]() |
99057020ec | ||
![]() |
11010b3008 | ||
![]() |
dc1b8f4ac6 | ||
![]() |
23b60f2099 | ||
![]() |
7bea9f2f3d | ||
![]() |
4ae2a4e1b2 | ||
![]() |
22c9bba754 | ||
![]() |
7633500f37 | ||
![]() |
f2476df3e8 | ||
![]() |
f08007fc91 | ||
![]() |
0f60fa7e0d | ||
![]() |
67e158bea2 | ||
![]() |
4f2671e1a8 | ||
![]() |
ad62bb28c2 | ||
![]() |
2be637754f | ||
![]() |
d40d7db1b5 | ||
![]() |
36a27c3a13 | ||
![]() |
84cc264a9c | ||
![]() |
21e1009ad7 | ||
![]() |
6e27633f64 | ||
![]() |
ef99075c91 | ||
![]() |
c101e9cf4e | ||
![]() |
a34922f59b | ||
![]() |
0a315c10e3 | ||
![]() |
f599cafff8 | ||
![]() |
fcb178fd66 | ||
![]() |
4ab8837c2c | ||
![]() |
ca54386523 | ||
![]() |
ac54c0fb6c | ||
![]() |
9ae21dd491 | ||
![]() |
21373cea43 | ||
![]() |
24e3ff53b8 | ||
![]() |
e669a18733 | ||
![]() |
9f653ea520 | ||
![]() |
15425153ff | ||
![]() |
6db8474c49 | ||
![]() |
cbf0166208 | ||
![]() |
89b50b4ffa | ||
![]() |
1e76f598b8 | ||
![]() |
819dbb4a1e | ||
![]() |
5cd03b4443 | ||
![]() |
4fef516bc1 | ||
![]() |
643331ae43 | ||
![]() |
0b167bade4 | ||
![]() |
9501239c3e | ||
![]() |
e19ee92cc1 | ||
![]() |
f77d3c7f51 | ||
![]() |
3acca63506 | ||
![]() |
7fbcc9da12 | ||
![]() |
b00e14cac6 | ||
![]() |
c5eb0823c4 | ||
![]() |
0e0490ec03 | ||
![]() |
cd2f9ffda3 | ||
![]() |
cdb727974c | ||
![]() |
7dce5fff1b | ||
![]() |
a52949b699 | ||
![]() |
8f3eab0744 | ||
![]() |
741b26e366 | ||
![]() |
13b8de2a92 | ||
![]() |
86e4cdcadd | ||
![]() |
070cf4ef32 | ||
![]() |
943c7907d0 | ||
![]() |
de74f9c71a | ||
![]() |
0e6f637ca8 | ||
![]() |
d3d02845bf | ||
![]() |
4b12a34cce | ||
![]() |
223c615433 | ||
![]() |
069ec8b778 | ||
![]() |
bfa0cec088 | ||
![]() |
5ad0f57779 | ||
![]() |
9493ec91b3 | ||
![]() |
c1ad402a70 | ||
![]() |
407ab3b0c0 | ||
![]() |
8515bf9b7d | ||
![]() |
cfafa94303 | ||
![]() |
afaa4f07a9 | ||
![]() |
4eabdb1a83 | ||
![]() |
1e6794ad09 | ||
![]() |
d2cd74f9e3 | ||
![]() |
e00836875d | ||
![]() |
195e6af846 | ||
![]() |
57b8e996a5 | ||
![]() |
2eedde60f9 | ||
![]() |
6a0bfb0a1a | ||
![]() |
2b89c890bb | ||
![]() |
c8cc67162f | ||
![]() |
3fdc3eb520 | ||
![]() |
af6819b9ad | ||
![]() |
e6e37c279f | ||
![]() |
f801a5ed93 | ||
![]() |
4dce1c45af | ||
![]() |
d52893bc58 | ||
![]() |
f0f5718291 | ||
![]() |
a5fea13526 | ||
![]() |
f4415c6221 | ||
![]() |
ceebffadaa | ||
![]() |
4e4ca1566a | ||
![]() |
212bdf8d82 | ||
![]() |
4ffa5d8b47 | ||
![]() |
5f913c4b84 | ||
![]() |
085d9a89fd | ||
![]() |
2bf00960e2 | ||
![]() |
a928a1ead0 | ||
![]() |
7435979cb9 | ||
![]() |
21c5371116 | ||
![]() |
fa0989c929 | ||
![]() |
4881e753ed | ||
![]() |
785e1f836a | ||
![]() |
6f380e26be | ||
![]() |
9b0a47faa3 | ||
![]() |
cde0d18da9 | ||
![]() |
2316a23a42 | ||
![]() |
84ba41546f | ||
![]() |
57ca7f9e26 | ||
![]() |
8bed183582 | ||
![]() |
a7d938f988 | ||
![]() |
e687e370f2 | ||
![]() |
651c13a3d9 | ||
![]() |
72b4981c7e | ||
![]() |
d64c7627a2 | ||
![]() |
73993cde40 | ||
![]() |
8507a41e9a | ||
![]() |
29dcf89032 | ||
![]() |
684ab66eba | ||
![]() |
64a4e457dd | ||
![]() |
af1261be37 | ||
![]() |
9d0e4384d6 | ||
![]() |
e703584f9f | ||
![]() |
a37a9088e7 | ||
![]() |
4501abc264 | ||
![]() |
50c6ba4e0c | ||
![]() |
d820d6af9c | ||
![]() |
a0f0ca0c13 |
107 changed files with 2578 additions and 1902 deletions
|
@ -1,4 +1,18 @@
|
||||||
engines:
|
version: "2"
|
||||||
|
checks:
|
||||||
|
file-lines:
|
||||||
|
config:
|
||||||
|
threshold: 300
|
||||||
|
method-complexity:
|
||||||
|
config:
|
||||||
|
threshold: 50
|
||||||
|
method-count:
|
||||||
|
config:
|
||||||
|
threshold: 20
|
||||||
|
method-lines:
|
||||||
|
config:
|
||||||
|
threshold: 100
|
||||||
|
plugins:
|
||||||
brakeman:
|
brakeman:
|
||||||
enabled: true
|
enabled: true
|
||||||
fixme:
|
fixme:
|
||||||
|
@ -7,12 +21,5 @@ engines:
|
||||||
enabled: true
|
enabled: true
|
||||||
reek:
|
reek:
|
||||||
enabled: true
|
enabled: true
|
||||||
rubocop:
|
#exclude_patterns:
|
||||||
enabled: true
|
#- app/assets/javascripts-jquery-ui
|
||||||
checks:
|
|
||||||
Rubocop/Style/StringLiterals:
|
|
||||||
enabled: false
|
|
||||||
Rubocop/Style/TrailingCommaInLiteral:
|
|
||||||
enabled: false
|
|
||||||
Rubocop/Style/HashSyntax:
|
|
||||||
enabled: false
|
|
||||||
|
|
|
@ -3,9 +3,7 @@ config/database.yml
|
||||||
config/site.yml
|
config/site.yml
|
||||||
coverage
|
coverage
|
||||||
db/*.sqlite3
|
db/*.sqlite3
|
||||||
doc
|
|
||||||
features
|
features
|
||||||
log
|
log
|
||||||
public/assets
|
public/assets
|
||||||
test
|
|
||||||
tmp
|
tmp
|
||||||
|
|
1
.github/dependabot.yml
vendored
1
.github/dependabot.yml
vendored
|
@ -9,3 +9,4 @@ updates:
|
||||||
directory: "/"
|
directory: "/"
|
||||||
schedule:
|
schedule:
|
||||||
interval: "daily"
|
interval: "daily"
|
||||||
|
open-pull-requests-limit: 10
|
||||||
|
|
55
.github/workflows/build-custom-release.yml
vendored
Normal file
55
.github/workflows/build-custom-release.yml
vendored
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
---
|
||||||
|
name: 'Build custom release'
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
tag:
|
||||||
|
description: 'Tag to release'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: 'Name of the release'
|
||||||
|
required: true
|
||||||
|
type: string
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-publish-release:
|
||||||
|
name: 'Build custom release'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
-
|
||||||
|
name: Checkout the code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
ref: ${{ inputs.tag }}
|
||||||
|
-
|
||||||
|
name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
-
|
||||||
|
name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
-
|
||||||
|
name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
-
|
||||||
|
name: Build and push
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
target: production
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
tracksapp/tracks:${{ inputs.name }}
|
||||||
|
ghcr.io/tracksapp/tracks:${{ inputs.name }}
|
||||||
|
|
||||||
|
# platforms: linux/amd64,linux/arm64
|
45
.github/workflows/build-latest.yml
vendored
Normal file
45
.github/workflows/build-latest.yml
vendored
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
---
|
||||||
|
name: 'Build latest'
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-publish-latest:
|
||||||
|
name: 'Build latest'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2 # Checking out the repo
|
||||||
|
-
|
||||||
|
name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
-
|
||||||
|
name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
-
|
||||||
|
name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
-
|
||||||
|
name: Build and push
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
target: production
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
tracksapp/tracks:latest
|
||||||
|
tracksapp/tracks:master
|
||||||
|
ghcr.io/tracksapp/tracks:latest
|
||||||
|
|
||||||
|
# platforms: linux/amd64,linux/arm64
|
44
.github/workflows/build-release.yml
vendored
Normal file
44
.github/workflows/build-release.yml
vendored
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
---
|
||||||
|
name: 'Build release'
|
||||||
|
on:
|
||||||
|
release:
|
||||||
|
types:
|
||||||
|
- published
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-publish-release:
|
||||||
|
name: 'Build release'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2 # Checking out the repo
|
||||||
|
-
|
||||||
|
name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v2
|
||||||
|
-
|
||||||
|
name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
-
|
||||||
|
name: Login to DockerHub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
-
|
||||||
|
name: Login to GitHub Container Registry
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.repository_owner }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
-
|
||||||
|
name: Build and push
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
target: production
|
||||||
|
push: true
|
||||||
|
tags: |
|
||||||
|
tracksapp/tracks:${{ github.event.release.name }}
|
||||||
|
ghcr.io/tracksapp/tracks:${{ github.event.release.name }}
|
||||||
|
|
||||||
|
# platforms: linux/amd64,linux/arm64
|
8
.github/workflows/continuous-integration.yml
vendored
8
.github/workflows/continuous-integration.yml
vendored
|
@ -6,14 +6,8 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
ruby: ["2.6", "2.7", "3.0"]
|
ruby: ["3.2", "3.3"]
|
||||||
db: [sqlite, mysql, postgres]
|
db: [sqlite, mysql, postgres]
|
||||||
exclude:
|
|
||||||
- ruby: "2.6"
|
|
||||||
db: sqlite
|
|
||||||
- ruby: "2.6"
|
|
||||||
db: postgres
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v1
|
- uses: actions/checkout@v1
|
||||||
- run: bash -x script/cibuild ${{ matrix.ruby }} ${{ matrix.db }}
|
- run: bash -x script/cibuild ${{ matrix.ruby }} ${{ matrix.db }}
|
||||||
|
|
17
.rubocop.yml
17
.rubocop.yml
|
@ -16,3 +16,20 @@ Style/StringLiterals:
|
||||||
|
|
||||||
Layout/AlignParameters:
|
Layout/AlignParameters:
|
||||||
EnforcedStyle: with_fixed_indentation
|
EnforcedStyle: with_fixed_indentation
|
||||||
|
|
||||||
|
Metrics/AbcSize:
|
||||||
|
Max: 100
|
||||||
|
Metrics/CyclomaticComplexity:
|
||||||
|
Max: 100
|
||||||
|
Metrics/MethodLength:
|
||||||
|
Max: 100
|
||||||
|
CountAsOne: ['array', 'hash', 'heredoc']
|
||||||
|
Metrics/ModuleLength:
|
||||||
|
Max: 300
|
||||||
|
CountAsOne: ['array', 'hash', 'heredoc']
|
||||||
|
Metrics/ClassLength:
|
||||||
|
Max: 300
|
||||||
|
Metrics/ParameterLists:
|
||||||
|
Max: 20
|
||||||
|
Metrics/PerceivedComplexity:
|
||||||
|
Max: 100
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
2.5
|
3.3
|
||||||
|
|
|
@ -19,13 +19,15 @@ It would be great to first discuss them on the [mailing list](https://groups.goo
|
||||||
If you want to contribute an enhancement or a fix, you can:
|
If you want to contribute an enhancement or a fix, you can:
|
||||||
|
|
||||||
1. [fork the project](https://help.github.com/articles/fork-a-repo)
|
1. [fork the project](https://help.github.com/articles/fork-a-repo)
|
||||||
1. [create a topic branch](http://learn.github.com/p/branching.html).
|
2. [create a topic branch](http://learn.github.com/p/branching.html).
|
||||||
1. install [docker-compose](https://docs.docker.com/compose/)
|
3. install [docker-compose](https://docs.docker.com/compose/)
|
||||||
1. copy `app/config/site.yml.tmpl` to `app/config/site.yml` and customize as needed
|
4. copy `app/config/site.yml.tmpl` to `app/config/site.yml` and customize as needed
|
||||||
1. then with `./bin/setup` you will prepare for the first run
|
5. then with `./bin/setup` you will prepare for the first run
|
||||||
1. start the server with `./script/server` which will start everything you need in Docker and present Tracks at [http://0.0.0.0:3000](http://0.0.0.0:3000)
|
6. start the server with `./script/server` which will start everything you need in Docker and present Tracks at [http://0.0.0.0:3000](http://0.0.0.0:3000)
|
||||||
1. if you need, you can launch a Rails console with `./bin/rails c` (will run inside Docker)
|
7. if you need, you can launch a Rails console with `./bin/rails c` (will run inside Docker)
|
||||||
1. make your changes and add/update relevant tests
|
8. make your changes and add/update relevant tests
|
||||||
1. run the test suite with `./bin/rake test` (will run inside Docker)
|
9. run the test suite with `./bin/rake test` (will run inside Docker)
|
||||||
1. commit the changes
|
10. commit the changes
|
||||||
1. send a pull request.
|
11. send a pull request.
|
||||||
|
|
||||||
|
Make sure that you've added the necessary tests for any new functionality and preferably also for any bugs and that your contribution conforms to the coding style defined by the CodeClimate checks. The coding style definition should be approximately the same as the [Shopify Ruby Style Guide](https://ruby-style-guide.shopify.dev/).
|
||||||
|
|
49
Dockerfile
49
Dockerfile
|
@ -1,19 +1,12 @@
|
||||||
FROM ruby:2.7
|
ARG RUBY_VERSION=3.3
|
||||||
|
FROM ruby:${RUBY_VERSION} AS base
|
||||||
# throw errors if Gemfile has been modified since Gemfile.lock
|
|
||||||
RUN bundle config --global frozen 1
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN touch /etc/app-env
|
RUN touch /etc/app-env
|
||||||
|
|
||||||
COPY Gemfile* /app/
|
RUN apt-get update && apt-get install -y npm netcat-openbsd
|
||||||
|
RUN npm install -g yarn
|
||||||
RUN gem install bundler
|
RUN gem install bundler
|
||||||
RUN bundle install --jobs 4
|
|
||||||
|
|
||||||
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
|
||||||
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
|
|
||||||
RUN apt-get update && apt-get install -y yarn netcat
|
|
||||||
|
|
||||||
RUN mkdir /app/log
|
RUN mkdir /app/log
|
||||||
|
|
||||||
|
@ -36,12 +29,38 @@ COPY lib /app/lib/
|
||||||
COPY app /app/app/
|
COPY app /app/app/
|
||||||
COPY db /app/db/
|
COPY db /app/db/
|
||||||
|
|
||||||
COPY .git /app/.git
|
# Use glob to omit error if the .git directory doesn't exists (in case the
|
||||||
|
# code is from a release archive, not a Git clone)
|
||||||
|
COPY .gi[t] /app/.git
|
||||||
|
|
||||||
RUN RAILS_ENV=production bundle exec rake assets:precompile
|
COPY Gemfile* /app/
|
||||||
|
|
||||||
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
CMD ["./bin/rails", "server", "-b", "0.0.0.0"]
|
CMD ["./bin/rails", "server", "-b", "0.0.0.0"]
|
||||||
|
|
||||||
|
FROM base AS precompile
|
||||||
|
RUN bundle config set deployment true
|
||||||
|
RUN bundle install --jobs 4
|
||||||
|
RUN RAILS_GROUPS=assets bundle exec rake assets:precompile
|
||||||
|
|
||||||
|
# Build the environment-specific stuff
|
||||||
|
FROM base AS production
|
||||||
|
RUN bundle config set without assets
|
||||||
|
RUN bundle config --global frozen 1
|
||||||
|
RUN bundle install --jobs 4
|
||||||
|
COPY --from=precompile /app/public/assets /app/public/assets
|
||||||
|
|
||||||
|
FROM base AS test
|
||||||
|
COPY test /app/test/
|
||||||
|
# For testing the API client
|
||||||
|
COPY doc /app/doc/
|
||||||
|
RUN bundle config set without assets
|
||||||
|
RUN bundle config set with development test
|
||||||
|
RUN bundle config --global frozen 1
|
||||||
|
RUN bundle install --jobs 4
|
||||||
|
COPY --from=precompile /app/public/assets /app/public/assets
|
||||||
|
|
||||||
|
FROM base AS development
|
||||||
|
RUN bundle config set with development test
|
||||||
|
RUN bundle install --jobs 4
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
FROM ruby:2.6
|
|
||||||
|
|
||||||
# throw errors if Gemfile has been modified since Gemfile.lock
|
|
||||||
RUN bundle config --global frozen 1
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
RUN touch /etc/app-env
|
|
||||||
|
|
||||||
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
|
||||||
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
|
|
||||||
RUN apt-get update && apt-get install -y yarn
|
|
||||||
|
|
||||||
COPY Gemfile* /app/
|
|
||||||
RUN gem install bundler
|
|
||||||
RUN bundle install --jobs 4
|
|
||||||
|
|
||||||
RUN mkdir /app/log
|
|
||||||
|
|
||||||
COPY . /app/
|
|
||||||
COPY config/database.docker.yml /app/config/database.yml
|
|
||||||
COPY config/site.docker.yml /app/config/site.yml
|
|
||||||
|
|
||||||
RUN RAILS_ENV=production bundle exec rake assets:precompile
|
|
||||||
|
|
||||||
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
|
||||||
|
|
||||||
EXPOSE 3000
|
|
||||||
|
|
||||||
CMD ["rails", "server", "-b", "0.0.0.0"]
|
|
|
@ -1,30 +0,0 @@
|
||||||
FROM ruby:3.0
|
|
||||||
|
|
||||||
# throw errors if Gemfile has been modified since Gemfile.lock
|
|
||||||
RUN bundle config --global frozen 1
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
RUN touch /etc/app-env
|
|
||||||
|
|
||||||
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
|
|
||||||
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
|
|
||||||
RUN apt-get update && apt-get install -y yarn
|
|
||||||
|
|
||||||
COPY Gemfile* /app/
|
|
||||||
RUN gem install bundler
|
|
||||||
RUN bundle install --jobs 4
|
|
||||||
|
|
||||||
RUN mkdir /app/log
|
|
||||||
|
|
||||||
COPY . /app/
|
|
||||||
COPY config/database.docker.yml /app/config/database.yml
|
|
||||||
COPY config/site.docker.yml /app/config/site.yml
|
|
||||||
|
|
||||||
RUN RAILS_ENV=production bundle exec rake assets:precompile
|
|
||||||
|
|
||||||
ENTRYPOINT ["/app/docker-entrypoint.sh"]
|
|
||||||
|
|
||||||
EXPOSE 3000
|
|
||||||
|
|
||||||
CMD ["rails", "server", "-b", "0.0.0.0"]
|
|
76
Gemfile
76
Gemfile
|
@ -1,70 +1,72 @@
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
gem 'actionpack-xml_parser', '~> 2.0'
|
gem 'actionpack-xml_parser', '~> 2.0'
|
||||||
gem 'activemodel-serializers-xml', '~> 1.0.1'
|
gem 'activemodel-serializers-xml', '~> 1.0.3'
|
||||||
|
|
||||||
gem 'coffee-rails', '~> 5.0.0'
|
gem 'rails', '~> 7.1'
|
||||||
|
|
||||||
gem 'jquery-rails', '~> 4.4'
|
gem 'font-awesome-sass', '~> 6.7.2'
|
||||||
gem 'jquery-ui-rails', '~>6.0.1'
|
gem 'jquery-rails', '~> 4.6'
|
||||||
|
gem 'jquery-ui-rails', '~>8.0.0'
|
||||||
gem 'rails', '~> 6.0.4'
|
gem 'aasm', '~> 5.5.1'
|
||||||
gem 'sassc-rails', '~> 2.1.2'
|
|
||||||
|
|
||||||
gem 'bootstrap-sass', '3.4.1'
|
|
||||||
gem 'font-awesome-sass', '~> 5.15.1'
|
|
||||||
|
|
||||||
gem 'uglifier', '>=1.3.0'
|
|
||||||
|
|
||||||
gem 'aasm', '~> 5.2.0'
|
|
||||||
gem 'acts_as_list'
|
gem 'acts_as_list'
|
||||||
gem 'bcrypt', '~> 3.1.16'
|
gem 'bcrypt', '~> 3.1.20'
|
||||||
gem 'htmlentities'
|
gem 'htmlentities'
|
||||||
gem "kt-paperclip", "~> 7.1"
|
gem "kt-paperclip", "~> 7.2"
|
||||||
gem 'puma', '~> 5.6'
|
gem 'puma', '~> 6.6'
|
||||||
gem 'rails_autolink'
|
gem 'rails_autolink'
|
||||||
gem 'RedCloth'
|
gem 'RedCloth'
|
||||||
gem 'sanitize', '~> 6.0'
|
gem 'sanitize', '~> 7.0'
|
||||||
gem 'tracks-chartjs-ror'
|
gem 'tracks-chartjs-ror'
|
||||||
gem 'will_paginate'
|
gem 'will_paginate'
|
||||||
|
|
||||||
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
gem 'rexml'
|
||||||
gem 'therubyracer', group: :therubyracer
|
|
||||||
|
|
||||||
# Use --without <group> argument to skip unnecessary drivers
|
# Use --without <group> argument to skip unnecessary drivers
|
||||||
gem 'sqlite3', group: :sqlite
|
gem 'sqlite3', '~> 2.7', group: :sqlite
|
||||||
gem 'mysql2', '~> 0.5.3', group: :mysql
|
gem 'mysql2', '~> 0.5', group: :mysql
|
||||||
gem 'pg', '~> 1.3.2', group: :postgresql
|
gem 'pg', '~> 1.5', group: :postgresql
|
||||||
|
|
||||||
group :development do
|
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
|
||||||
gem 'spring'
|
gem 'mini_racer', group: :therubyracer
|
||||||
|
|
||||||
|
gem 'sprockets-rails'
|
||||||
|
gem 'coffee-rails', '~> 5.0.0'
|
||||||
|
gem 'dartsass-sprockets'
|
||||||
|
gem 'bootstrap-sass', '3.4.1'
|
||||||
|
gem 'terser'
|
||||||
|
gem 'listen'
|
||||||
|
gem 'tolk', '~> 6.0.0'
|
||||||
|
|
||||||
|
group :development, :optional => true do
|
||||||
|
gem 'spring', '~> 4'
|
||||||
gem 'yard'
|
gem 'yard'
|
||||||
|
|
||||||
gem 'tolk', '~> 4.1.1'
|
|
||||||
|
|
||||||
gem 'bullet'
|
gem 'bullet'
|
||||||
gem 'rack-mini-profiler'
|
gem 'rack-mini-profiler'
|
||||||
gem 'solargraph'
|
gem 'solargraph'
|
||||||
|
|
||||||
gem 'i18n-tasks', '~> 0.9.37'
|
gem 'i18n-tasks', '~> 1.0.15'
|
||||||
end
|
end
|
||||||
|
|
||||||
group :development, :test do
|
group :development, :test, :optional => true do
|
||||||
gem 'byebug'
|
gem 'byebug'
|
||||||
gem 'listen'
|
gem 'rubocop', '~> 1.78'
|
||||||
gem 'rubocop', '~> 1.25', require: false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
group :test do
|
group :test, :optional => true do
|
||||||
|
|
||||||
# get test coverage info on codeclimate
|
# get test coverage info on codeclimate
|
||||||
gem 'codeclimate-test-reporter', '1.0.7', group: :test, require: nil
|
gem 'codeclimate-test-reporter', '1.0.9'
|
||||||
gem 'database_cleaner'
|
gem 'database_cleaner', '~> 2'
|
||||||
gem 'factory_bot_rails'
|
gem 'factory_bot_rails'
|
||||||
gem 'mocha', :require => false
|
|
||||||
gem 'minitest-stub-const'
|
gem 'minitest-stub-const'
|
||||||
|
gem 'mocha'
|
||||||
gem 'rails-controller-testing'
|
gem 'rails-controller-testing'
|
||||||
gem 'rails-dom-testing', '~> 2.0.0'
|
gem 'rails-dom-testing', '~> 2.3.0'
|
||||||
gem 'rspec-expectations'
|
gem 'rspec-expectations'
|
||||||
gem 'simplecov'
|
gem 'simplecov'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
group :stripe, :optional => true do
|
||||||
|
gem 'stripe'
|
||||||
|
end
|
||||||
|
|
584
Gemfile.lock
584
Gemfile.lock
|
@ -1,90 +1,115 @@
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
RedCloth (4.3.2)
|
RedCloth (4.3.4)
|
||||||
aasm (5.2.0)
|
aasm (5.5.1)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
actioncable (6.0.4.6)
|
actioncable (7.1.5.1)
|
||||||
actionpack (= 6.0.4.6)
|
actionpack (= 7.1.5.1)
|
||||||
|
activesupport (= 7.1.5.1)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
websocket-driver (>= 0.6.1)
|
websocket-driver (>= 0.6.1)
|
||||||
actionmailbox (6.0.4.6)
|
zeitwerk (~> 2.6)
|
||||||
actionpack (= 6.0.4.6)
|
actionmailbox (7.1.5.1)
|
||||||
activejob (= 6.0.4.6)
|
actionpack (= 7.1.5.1)
|
||||||
activerecord (= 6.0.4.6)
|
activejob (= 7.1.5.1)
|
||||||
activestorage (= 6.0.4.6)
|
activerecord (= 7.1.5.1)
|
||||||
activesupport (= 6.0.4.6)
|
activestorage (= 7.1.5.1)
|
||||||
|
activesupport (= 7.1.5.1)
|
||||||
mail (>= 2.7.1)
|
mail (>= 2.7.1)
|
||||||
actionmailer (6.0.4.6)
|
net-imap
|
||||||
actionpack (= 6.0.4.6)
|
net-pop
|
||||||
actionview (= 6.0.4.6)
|
net-smtp
|
||||||
activejob (= 6.0.4.6)
|
actionmailer (7.1.5.1)
|
||||||
|
actionpack (= 7.1.5.1)
|
||||||
|
actionview (= 7.1.5.1)
|
||||||
|
activejob (= 7.1.5.1)
|
||||||
|
activesupport (= 7.1.5.1)
|
||||||
mail (~> 2.5, >= 2.5.4)
|
mail (~> 2.5, >= 2.5.4)
|
||||||
rails-dom-testing (~> 2.0)
|
net-imap
|
||||||
actionpack (6.0.4.6)
|
net-pop
|
||||||
actionview (= 6.0.4.6)
|
net-smtp
|
||||||
activesupport (= 6.0.4.6)
|
rails-dom-testing (~> 2.2)
|
||||||
rack (~> 2.0, >= 2.0.8)
|
actionpack (7.1.5.1)
|
||||||
|
actionview (= 7.1.5.1)
|
||||||
|
activesupport (= 7.1.5.1)
|
||||||
|
nokogiri (>= 1.8.5)
|
||||||
|
racc
|
||||||
|
rack (>= 2.2.4)
|
||||||
|
rack-session (>= 1.0.1)
|
||||||
rack-test (>= 0.6.3)
|
rack-test (>= 0.6.3)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.2)
|
||||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
rails-html-sanitizer (~> 1.6)
|
||||||
actionpack-xml_parser (2.0.1)
|
actionpack-xml_parser (2.0.1)
|
||||||
actionpack (>= 5.0)
|
actionpack (>= 5.0)
|
||||||
railties (>= 5.0)
|
railties (>= 5.0)
|
||||||
actiontext (6.0.4.6)
|
actiontext (7.1.5.1)
|
||||||
actionpack (= 6.0.4.6)
|
actionpack (= 7.1.5.1)
|
||||||
activerecord (= 6.0.4.6)
|
activerecord (= 7.1.5.1)
|
||||||
activestorage (= 6.0.4.6)
|
activestorage (= 7.1.5.1)
|
||||||
activesupport (= 6.0.4.6)
|
activesupport (= 7.1.5.1)
|
||||||
|
globalid (>= 0.6.0)
|
||||||
nokogiri (>= 1.8.5)
|
nokogiri (>= 1.8.5)
|
||||||
actionview (6.0.4.6)
|
actionview (7.1.5.1)
|
||||||
activesupport (= 6.0.4.6)
|
activesupport (= 7.1.5.1)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
erubi (~> 1.4)
|
erubi (~> 1.11)
|
||||||
rails-dom-testing (~> 2.0)
|
rails-dom-testing (~> 2.2)
|
||||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
rails-html-sanitizer (~> 1.6)
|
||||||
activejob (6.0.4.6)
|
activejob (7.1.5.1)
|
||||||
activesupport (= 6.0.4.6)
|
activesupport (= 7.1.5.1)
|
||||||
globalid (>= 0.3.6)
|
globalid (>= 0.3.6)
|
||||||
activemodel (6.0.4.6)
|
activemodel (7.1.5.1)
|
||||||
activesupport (= 6.0.4.6)
|
activesupport (= 7.1.5.1)
|
||||||
activemodel-serializers-xml (1.0.2)
|
activemodel-serializers-xml (1.0.3)
|
||||||
activemodel (> 5.x)
|
activemodel (>= 5.0.0.a)
|
||||||
activesupport (> 5.x)
|
activesupport (>= 5.0.0.a)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
activerecord (6.0.4.6)
|
activerecord (7.1.5.1)
|
||||||
activemodel (= 6.0.4.6)
|
activemodel (= 7.1.5.1)
|
||||||
activesupport (= 6.0.4.6)
|
activesupport (= 7.1.5.1)
|
||||||
activestorage (6.0.4.6)
|
timeout (>= 0.4.0)
|
||||||
actionpack (= 6.0.4.6)
|
activestorage (7.1.5.1)
|
||||||
activejob (= 6.0.4.6)
|
actionpack (= 7.1.5.1)
|
||||||
activerecord (= 6.0.4.6)
|
activejob (= 7.1.5.1)
|
||||||
marcel (~> 1.0.0)
|
activerecord (= 7.1.5.1)
|
||||||
activesupport (6.0.4.6)
|
activesupport (= 7.1.5.1)
|
||||||
|
marcel (~> 1.0)
|
||||||
|
activesupport (7.1.5.1)
|
||||||
|
base64
|
||||||
|
benchmark (>= 0.3)
|
||||||
|
bigdecimal
|
||||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||||
i18n (>= 0.7, < 2)
|
connection_pool (>= 2.2.5)
|
||||||
minitest (~> 5.1)
|
drb
|
||||||
tzinfo (~> 1.1)
|
i18n (>= 1.6, < 2)
|
||||||
zeitwerk (~> 2.2, >= 2.2.2)
|
logger (>= 1.4.2)
|
||||||
acts_as_list (1.0.4)
|
minitest (>= 5.1)
|
||||||
activerecord (>= 4.2)
|
mutex_m
|
||||||
ast (2.4.2)
|
securerandom (>= 0.3)
|
||||||
autoprefixer-rails (10.1.0.0)
|
tzinfo (~> 2.0)
|
||||||
execjs
|
acts_as_list (1.2.4)
|
||||||
|
activerecord (>= 6.1)
|
||||||
|
activesupport (>= 6.1)
|
||||||
|
ast (2.4.3)
|
||||||
|
autoprefixer-rails (10.4.21.0)
|
||||||
|
execjs (~> 2)
|
||||||
backport (1.2.0)
|
backport (1.2.0)
|
||||||
bcrypt (3.1.16)
|
base64 (0.3.0)
|
||||||
benchmark (0.2.0)
|
bcrypt (3.1.20)
|
||||||
|
benchmark (0.4.1)
|
||||||
|
bigdecimal (3.2.2)
|
||||||
bootstrap-sass (3.4.1)
|
bootstrap-sass (3.4.1)
|
||||||
autoprefixer-rails (>= 5.2.1)
|
autoprefixer-rails (>= 5.2.1)
|
||||||
sassc (>= 2.0.0)
|
sassc (>= 2.0.0)
|
||||||
builder (3.2.4)
|
builder (3.3.0)
|
||||||
bullet (7.0.1)
|
bullet (8.0.8)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
uniform_notifier (~> 1.11)
|
uniform_notifier (~> 1.11)
|
||||||
byebug (11.1.3)
|
byebug (12.0.0)
|
||||||
climate_control (0.2.0)
|
climate_control (0.2.0)
|
||||||
codeclimate-test-reporter (1.0.7)
|
codeclimate-test-reporter (1.0.9)
|
||||||
simplecov
|
simplecov (<= 0.13)
|
||||||
coffee-rails (5.0.0)
|
coffee-rails (5.0.0)
|
||||||
coffee-script (>= 2.2.0)
|
coffee-script (>= 2.2.0)
|
||||||
railties (>= 5.2.0)
|
railties (>= 5.2.0)
|
||||||
|
@ -92,274 +117,355 @@ GEM
|
||||||
coffee-script-source
|
coffee-script-source
|
||||||
execjs
|
execjs
|
||||||
coffee-script-source (1.12.2)
|
coffee-script-source (1.12.2)
|
||||||
concurrent-ruby (1.1.9)
|
concurrent-ruby (1.3.5)
|
||||||
|
connection_pool (2.5.3)
|
||||||
crass (1.0.6)
|
crass (1.0.6)
|
||||||
database_cleaner (1.8.5)
|
dartsass-sprockets (3.2.1)
|
||||||
diff-lcs (1.5.0)
|
railties (>= 4.0.0)
|
||||||
docile (1.3.4)
|
sassc-embedded (~> 1.80.1)
|
||||||
e2mmap (0.1.0)
|
sprockets (> 3.0)
|
||||||
erubi (1.10.0)
|
sprockets-rails
|
||||||
execjs (2.7.0)
|
tilt
|
||||||
factory_bot (6.2.0)
|
database_cleaner (2.1.0)
|
||||||
activesupport (>= 5.0.0)
|
database_cleaner-active_record (>= 2, < 3)
|
||||||
factory_bot_rails (6.2.0)
|
database_cleaner-active_record (2.2.0)
|
||||||
factory_bot (~> 6.2.0)
|
activerecord (>= 5.a)
|
||||||
railties (>= 5.0.0)
|
database_cleaner-core (~> 2.0.0)
|
||||||
ffi (1.15.5)
|
database_cleaner-core (2.0.1)
|
||||||
font-awesome-sass (5.15.1)
|
date (3.4.1)
|
||||||
sassc (>= 1.11)
|
diff-lcs (1.6.2)
|
||||||
globalid (1.0.0)
|
docile (1.1.5)
|
||||||
activesupport (>= 5.0)
|
drb (2.2.3)
|
||||||
highline (2.0.3)
|
erb (5.0.1)
|
||||||
|
erubi (1.13.1)
|
||||||
|
execjs (2.10.0)
|
||||||
|
factory_bot (6.5.4)
|
||||||
|
activesupport (>= 6.1.0)
|
||||||
|
factory_bot_rails (6.5.0)
|
||||||
|
factory_bot (~> 6.5)
|
||||||
|
railties (>= 6.1.0)
|
||||||
|
ffi (1.17.0)
|
||||||
|
font-awesome-sass (6.7.2)
|
||||||
|
sassc (~> 2.0)
|
||||||
|
globalid (1.2.1)
|
||||||
|
activesupport (>= 6.1)
|
||||||
|
google-protobuf (4.31.1)
|
||||||
|
bigdecimal
|
||||||
|
rake (>= 13)
|
||||||
|
highline (3.1.2)
|
||||||
|
reline
|
||||||
htmlentities (4.3.4)
|
htmlentities (4.3.4)
|
||||||
i18n (1.10.0)
|
i18n (1.14.7)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
i18n-tasks (0.9.37)
|
i18n-tasks (1.0.15)
|
||||||
activesupport (>= 4.0.2)
|
activesupport (>= 4.0.2)
|
||||||
ast (>= 2.1.0)
|
ast (>= 2.1.0)
|
||||||
erubi
|
erubi
|
||||||
highline (>= 2.0.0)
|
highline (>= 2.0.0)
|
||||||
i18n
|
i18n
|
||||||
parser (>= 2.2.3.0)
|
parser (>= 3.2.2.1)
|
||||||
rails-i18n
|
rails-i18n
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
|
ruby-progressbar (~> 1.8, >= 1.8.1)
|
||||||
terminal-table (>= 1.5.1)
|
terminal-table (>= 1.5.1)
|
||||||
jaro_winkler (1.5.4)
|
io-console (0.8.0)
|
||||||
jquery-rails (4.4.0)
|
irb (1.15.2)
|
||||||
|
pp (>= 0.6.0)
|
||||||
|
rdoc (>= 4.0.0)
|
||||||
|
reline (>= 0.4.2)
|
||||||
|
jaro_winkler (1.6.1)
|
||||||
|
jquery-rails (4.6.0)
|
||||||
rails-dom-testing (>= 1, < 3)
|
rails-dom-testing (>= 1, < 3)
|
||||||
railties (>= 4.2.0)
|
railties (>= 4.2.0)
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
jquery-ui-rails (6.0.1)
|
jquery-ui-rails (8.0.0)
|
||||||
railties (>= 3.2.16)
|
railties (>= 3.2.16)
|
||||||
kramdown (2.3.1)
|
json (2.12.2)
|
||||||
rexml
|
kramdown (2.5.1)
|
||||||
|
rexml (>= 3.3.9)
|
||||||
kramdown-parser-gfm (1.1.0)
|
kramdown-parser-gfm (1.1.0)
|
||||||
kramdown (~> 2.0)
|
kramdown (~> 2.0)
|
||||||
kt-paperclip (7.1.1)
|
kt-paperclip (7.2.0)
|
||||||
activemodel (>= 4.2.0)
|
activemodel (>= 4.2.0)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
marcel (~> 1.0.1)
|
marcel (~> 1.0.1)
|
||||||
mime-types
|
mime-types
|
||||||
terrapin (~> 0.6.0)
|
terrapin (~> 0.6.0)
|
||||||
libv8 (3.16.14.19)
|
language_server-protocol (3.17.0.5)
|
||||||
listen (3.7.1)
|
libv8-node (24.1.0.0)
|
||||||
|
lint_roller (1.1.0)
|
||||||
|
listen (3.9.0)
|
||||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||||
rb-inotify (~> 0.9, >= 0.9.10)
|
rb-inotify (~> 0.9, >= 0.9.10)
|
||||||
loofah (2.14.0)
|
logger (1.7.0)
|
||||||
|
loofah (2.24.1)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.5.9)
|
nokogiri (>= 1.12.0)
|
||||||
mail (2.7.1)
|
mail (2.8.1)
|
||||||
mini_mime (>= 0.1.1)
|
mini_mime (>= 0.1.1)
|
||||||
marcel (1.0.2)
|
net-imap
|
||||||
method_source (1.0.0)
|
net-pop
|
||||||
|
net-smtp
|
||||||
|
marcel (1.0.4)
|
||||||
mime-types (3.4.1)
|
mime-types (3.4.1)
|
||||||
mime-types-data (~> 3.2015)
|
mime-types-data (~> 3.2015)
|
||||||
mime-types-data (3.2022.0105)
|
mime-types-data (3.2023.0218.1)
|
||||||
mini_mime (1.1.2)
|
mini_mime (1.1.5)
|
||||||
mini_portile2 (2.7.1)
|
mini_portile2 (2.8.9)
|
||||||
minitest (5.15.0)
|
mini_racer (0.19.0)
|
||||||
|
libv8-node (~> 24.1.0.0)
|
||||||
|
minitest (5.25.5)
|
||||||
minitest-stub-const (0.6)
|
minitest-stub-const (0.6)
|
||||||
mocha (1.13.0)
|
mocha (2.7.1)
|
||||||
mysql2 (0.5.3)
|
ruby2_keywords (>= 0.0.5)
|
||||||
nio4r (2.5.8)
|
mutex_m (0.3.0)
|
||||||
nokogiri (1.13.1)
|
mysql2 (0.5.6)
|
||||||
mini_portile2 (~> 2.7.0)
|
net-imap (0.5.9)
|
||||||
|
date
|
||||||
|
net-protocol
|
||||||
|
net-pop (0.1.2)
|
||||||
|
net-protocol
|
||||||
|
net-protocol (0.2.2)
|
||||||
|
timeout
|
||||||
|
net-smtp (0.5.1)
|
||||||
|
net-protocol
|
||||||
|
nio4r (2.7.4)
|
||||||
|
nokogiri (1.18.9)
|
||||||
|
mini_portile2 (~> 2.8.2)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
parallel (1.21.0)
|
observer (0.1.2)
|
||||||
parser (3.1.0.0)
|
ostruct (0.6.2)
|
||||||
|
parallel (1.27.0)
|
||||||
|
parser (3.3.8.0)
|
||||||
ast (~> 2.4.1)
|
ast (~> 2.4.1)
|
||||||
pg (1.3.2)
|
racc
|
||||||
puma (5.6.2)
|
pg (1.5.9)
|
||||||
|
pp (0.6.2)
|
||||||
|
prettyprint
|
||||||
|
prettyprint (0.2.0)
|
||||||
|
prism (1.4.0)
|
||||||
|
psych (5.2.6)
|
||||||
|
date
|
||||||
|
stringio
|
||||||
|
puma (6.6.0)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
racc (1.6.0)
|
racc (1.8.1)
|
||||||
rack (2.2.3)
|
rack (3.2.0)
|
||||||
rack-mini-profiler (2.3.3)
|
rack-mini-profiler (4.0.1)
|
||||||
rack (>= 1.2.0)
|
rack (>= 1.2.0)
|
||||||
rack-test (1.1.0)
|
rack-session (2.1.1)
|
||||||
rack (>= 1.0, < 3)
|
base64 (>= 0.1.0)
|
||||||
rails (6.0.4.6)
|
rack (>= 3.0.0)
|
||||||
actioncable (= 6.0.4.6)
|
rack-test (2.2.0)
|
||||||
actionmailbox (= 6.0.4.6)
|
rack (>= 1.3)
|
||||||
actionmailer (= 6.0.4.6)
|
rackup (2.2.1)
|
||||||
actionpack (= 6.0.4.6)
|
rack (>= 3)
|
||||||
actiontext (= 6.0.4.6)
|
rails (7.1.5.1)
|
||||||
actionview (= 6.0.4.6)
|
actioncable (= 7.1.5.1)
|
||||||
activejob (= 6.0.4.6)
|
actionmailbox (= 7.1.5.1)
|
||||||
activemodel (= 6.0.4.6)
|
actionmailer (= 7.1.5.1)
|
||||||
activerecord (= 6.0.4.6)
|
actionpack (= 7.1.5.1)
|
||||||
activestorage (= 6.0.4.6)
|
actiontext (= 7.1.5.1)
|
||||||
activesupport (= 6.0.4.6)
|
actionview (= 7.1.5.1)
|
||||||
bundler (>= 1.3.0)
|
activejob (= 7.1.5.1)
|
||||||
railties (= 6.0.4.6)
|
activemodel (= 7.1.5.1)
|
||||||
sprockets-rails (>= 2.0.0)
|
activerecord (= 7.1.5.1)
|
||||||
|
activestorage (= 7.1.5.1)
|
||||||
|
activesupport (= 7.1.5.1)
|
||||||
|
bundler (>= 1.15.0)
|
||||||
|
railties (= 7.1.5.1)
|
||||||
rails-controller-testing (1.0.5)
|
rails-controller-testing (1.0.5)
|
||||||
actionpack (>= 5.0.1.rc1)
|
actionpack (>= 5.0.1.rc1)
|
||||||
actionview (>= 5.0.1.rc1)
|
actionview (>= 5.0.1.rc1)
|
||||||
activesupport (>= 5.0.1.rc1)
|
activesupport (>= 5.0.1.rc1)
|
||||||
rails-dom-testing (2.0.3)
|
rails-dom-testing (2.3.0)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 5.0.0)
|
||||||
|
minitest
|
||||||
nokogiri (>= 1.6)
|
nokogiri (>= 1.6)
|
||||||
rails-html-sanitizer (1.4.2)
|
rails-html-sanitizer (1.6.2)
|
||||||
loofah (~> 2.3)
|
loofah (~> 2.21)
|
||||||
rails-i18n (7.0.1)
|
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
|
||||||
|
rails-i18n (7.0.10)
|
||||||
i18n (>= 0.7, < 2)
|
i18n (>= 0.7, < 2)
|
||||||
railties (>= 6.0.0, < 8)
|
railties (>= 6.0.0, < 8)
|
||||||
rails_autolink (1.1.6)
|
rails_autolink (1.1.8)
|
||||||
rails (> 3.1)
|
actionview (> 3.1)
|
||||||
railties (6.0.4.6)
|
activesupport (> 3.1)
|
||||||
actionpack (= 6.0.4.6)
|
railties (> 3.1)
|
||||||
activesupport (= 6.0.4.6)
|
railties (7.1.5.1)
|
||||||
method_source
|
actionpack (= 7.1.5.1)
|
||||||
rake (>= 0.8.7)
|
activesupport (= 7.1.5.1)
|
||||||
thor (>= 0.20.3, < 2.0)
|
irb
|
||||||
|
rackup (>= 1.0.0)
|
||||||
|
rake (>= 12.2)
|
||||||
|
thor (~> 1.0, >= 1.2.2)
|
||||||
|
zeitwerk (~> 2.6)
|
||||||
rainbow (3.1.1)
|
rainbow (3.1.1)
|
||||||
rake (13.0.6)
|
rake (13.3.0)
|
||||||
rb-fsevent (0.11.0)
|
rb-fsevent (0.11.2)
|
||||||
rb-inotify (0.10.1)
|
rb-inotify (0.11.1)
|
||||||
ffi (~> 1.0)
|
ffi (~> 1.0)
|
||||||
ref (2.0.0)
|
rbs (3.9.4)
|
||||||
regexp_parser (2.2.0)
|
logger
|
||||||
reverse_markdown (2.1.1)
|
rdoc (6.14.1)
|
||||||
|
erb
|
||||||
|
psych (>= 4.0.0)
|
||||||
|
regexp_parser (2.10.0)
|
||||||
|
reline (0.6.1)
|
||||||
|
io-console (~> 0.5)
|
||||||
|
reverse_markdown (3.0.0)
|
||||||
nokogiri
|
nokogiri
|
||||||
rexml (3.2.5)
|
rexml (3.4.1)
|
||||||
rspec-expectations (3.11.0)
|
rspec-expectations (3.13.5)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-support (~> 3.11.0)
|
rspec-support (~> 3.13.0)
|
||||||
rspec-support (3.11.0)
|
rspec-support (3.13.4)
|
||||||
rubocop (1.25.1)
|
rubocop (1.78.0)
|
||||||
|
json (~> 2.3)
|
||||||
|
language_server-protocol (~> 3.17.0.2)
|
||||||
|
lint_roller (~> 1.1.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
parser (>= 3.1.0.0)
|
parser (>= 3.3.0.2)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
regexp_parser (>= 1.8, < 3.0)
|
regexp_parser (>= 2.9.3, < 3.0)
|
||||||
rexml
|
rubocop-ast (>= 1.45.1, < 2.0)
|
||||||
rubocop-ast (>= 1.15.1, < 2.0)
|
|
||||||
ruby-progressbar (~> 1.7)
|
ruby-progressbar (~> 1.7)
|
||||||
unicode-display_width (>= 1.4.0, < 3.0)
|
unicode-display_width (>= 2.4.0, < 4.0)
|
||||||
rubocop-ast (1.15.1)
|
rubocop-ast (1.45.1)
|
||||||
parser (>= 3.0.1.1)
|
parser (>= 3.3.7.2)
|
||||||
ruby-progressbar (1.11.0)
|
prism (~> 1.4)
|
||||||
safe_yaml (1.0.5)
|
ruby-progressbar (1.13.0)
|
||||||
sanitize (6.0.0)
|
ruby2_keywords (0.0.5)
|
||||||
|
sanitize (7.0.0)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.12.0)
|
nokogiri (>= 1.16.8)
|
||||||
|
sass-embedded (1.89.2)
|
||||||
|
google-protobuf (~> 4.31)
|
||||||
|
rake (>= 13)
|
||||||
sassc (2.4.0)
|
sassc (2.4.0)
|
||||||
ffi (~> 1.9)
|
ffi (~> 1.9)
|
||||||
sassc-rails (2.1.2)
|
sassc-embedded (1.80.4)
|
||||||
railties (>= 4.0.0)
|
sass-embedded (~> 1.80)
|
||||||
sassc (>= 2.0)
|
securerandom (0.4.1)
|
||||||
sprockets (> 3.0)
|
simplecov (0.13.0)
|
||||||
sprockets-rails
|
docile (~> 1.1.0)
|
||||||
tilt
|
json (>= 1.8, < 3)
|
||||||
simplecov (0.21.2)
|
simplecov-html (~> 0.10.0)
|
||||||
docile (~> 1.1)
|
simplecov-html (0.10.2)
|
||||||
simplecov-html (~> 0.11)
|
solargraph (0.56.0)
|
||||||
simplecov_json_formatter (~> 0.1)
|
|
||||||
simplecov-html (0.12.3)
|
|
||||||
simplecov_json_formatter (0.1.2)
|
|
||||||
solargraph (0.44.3)
|
|
||||||
backport (~> 1.2)
|
backport (~> 1.2)
|
||||||
benchmark
|
benchmark (~> 0.4)
|
||||||
bundler (>= 1.17.2)
|
bundler (~> 2.0)
|
||||||
diff-lcs (~> 1.4)
|
diff-lcs (~> 1.4)
|
||||||
e2mmap
|
jaro_winkler (~> 1.6, >= 1.6.1)
|
||||||
jaro_winkler (~> 1.5)
|
|
||||||
kramdown (~> 2.3)
|
kramdown (~> 2.3)
|
||||||
kramdown-parser-gfm (~> 1.1)
|
kramdown-parser-gfm (~> 1.1)
|
||||||
|
logger (~> 1.6)
|
||||||
|
observer (~> 0.1)
|
||||||
|
ostruct (~> 0.6)
|
||||||
parser (~> 3.0)
|
parser (~> 3.0)
|
||||||
reverse_markdown (>= 1.0.5, < 3)
|
prism (~> 1.4)
|
||||||
rubocop (>= 0.52)
|
rbs (~> 3.3)
|
||||||
|
reverse_markdown (~> 3.0)
|
||||||
|
rubocop (~> 1.38)
|
||||||
thor (~> 1.0)
|
thor (~> 1.0)
|
||||||
tilt (~> 2.0)
|
tilt (~> 2.0)
|
||||||
yard (~> 0.9, >= 0.9.24)
|
yard (~> 0.9, >= 0.9.24)
|
||||||
spring (3.1.1)
|
yard-solargraph (~> 0.1)
|
||||||
sprockets (4.0.2)
|
spring (4.3.0)
|
||||||
|
sprockets (4.2.2)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
rack (> 1, < 3)
|
logger
|
||||||
sprockets-rails (3.4.2)
|
rack (>= 2.2.4, < 4)
|
||||||
actionpack (>= 5.2)
|
sprockets-rails (3.5.2)
|
||||||
activesupport (>= 5.2)
|
actionpack (>= 6.1)
|
||||||
|
activesupport (>= 6.1)
|
||||||
sprockets (>= 3.0.0)
|
sprockets (>= 3.0.0)
|
||||||
sqlite3 (1.4.2)
|
sqlite3 (2.7.3)
|
||||||
terminal-table (3.0.2)
|
mini_portile2 (~> 2.8.0)
|
||||||
unicode-display_width (>= 1.1.1, < 3)
|
stringio (3.1.7)
|
||||||
|
stripe (15.5.0)
|
||||||
|
terminal-table (4.0.0)
|
||||||
|
unicode-display_width (>= 1.1.1, < 4)
|
||||||
terrapin (0.6.0)
|
terrapin (0.6.0)
|
||||||
climate_control (>= 0.0.3, < 1.0)
|
climate_control (>= 0.0.3, < 1.0)
|
||||||
therubyracer (0.12.3)
|
terser (1.2.6)
|
||||||
libv8 (~> 3.16.14.15)
|
execjs (>= 0.3.0, < 3)
|
||||||
ref
|
thor (1.4.0)
|
||||||
thor (1.2.1)
|
tilt (2.6.0)
|
||||||
thread_safe (0.3.6)
|
timeout (0.4.3)
|
||||||
tilt (2.0.10)
|
tolk (6.0.0)
|
||||||
tolk (4.1.1)
|
rails (>= 7.0, < 7.3)
|
||||||
rails (>= 5.0)
|
|
||||||
safe_yaml (>= 0.8.6)
|
|
||||||
sassc
|
|
||||||
sprockets-rails (~> 3.4)
|
sprockets-rails (~> 3.4)
|
||||||
tracks-chartjs-ror (3.6.4)
|
tracks-chartjs-ror (3.6.4)
|
||||||
rails (>= 3.1)
|
rails (>= 3.1)
|
||||||
tzinfo (1.2.9)
|
tzinfo (2.0.6)
|
||||||
thread_safe (~> 0.1)
|
concurrent-ruby (~> 1.0)
|
||||||
uglifier (4.2.0)
|
unicode-display_width (3.1.4)
|
||||||
execjs (>= 0.3.0, < 3)
|
unicode-emoji (~> 4.0, >= 4.0.4)
|
||||||
unicode-display_width (2.1.0)
|
unicode-emoji (4.0.4)
|
||||||
uniform_notifier (1.14.2)
|
uniform_notifier (1.17.0)
|
||||||
webrick (1.7.0)
|
websocket-driver (0.8.0)
|
||||||
websocket-driver (0.7.5)
|
base64
|
||||||
websocket-extensions (>= 0.1.0)
|
websocket-extensions (>= 0.1.0)
|
||||||
websocket-extensions (0.1.5)
|
websocket-extensions (0.1.5)
|
||||||
will_paginate (3.3.1)
|
will_paginate (4.0.1)
|
||||||
yard (0.9.27)
|
yard (0.9.37)
|
||||||
webrick (~> 1.7.0)
|
yard-solargraph (0.1.0)
|
||||||
zeitwerk (2.5.4)
|
yard (~> 0.9)
|
||||||
|
zeitwerk (2.7.3)
|
||||||
|
|
||||||
PLATFORMS
|
PLATFORMS
|
||||||
ruby
|
ruby
|
||||||
|
|
||||||
DEPENDENCIES
|
DEPENDENCIES
|
||||||
RedCloth
|
RedCloth
|
||||||
aasm (~> 5.2.0)
|
aasm (~> 5.5.1)
|
||||||
actionpack-xml_parser (~> 2.0)
|
actionpack-xml_parser (~> 2.0)
|
||||||
activemodel-serializers-xml (~> 1.0.1)
|
activemodel-serializers-xml (~> 1.0.3)
|
||||||
acts_as_list
|
acts_as_list
|
||||||
bcrypt (~> 3.1.16)
|
bcrypt (~> 3.1.20)
|
||||||
bootstrap-sass (= 3.4.1)
|
bootstrap-sass (= 3.4.1)
|
||||||
bullet
|
bullet
|
||||||
byebug
|
byebug
|
||||||
codeclimate-test-reporter (= 1.0.7)
|
codeclimate-test-reporter (= 1.0.9)
|
||||||
coffee-rails (~> 5.0.0)
|
coffee-rails (~> 5.0.0)
|
||||||
database_cleaner
|
dartsass-sprockets
|
||||||
|
database_cleaner (~> 2)
|
||||||
factory_bot_rails
|
factory_bot_rails
|
||||||
font-awesome-sass (~> 5.15.1)
|
font-awesome-sass (~> 6.7.2)
|
||||||
htmlentities
|
htmlentities
|
||||||
i18n-tasks (~> 0.9.37)
|
i18n-tasks (~> 1.0.15)
|
||||||
jquery-rails (~> 4.4)
|
jquery-rails (~> 4.6)
|
||||||
jquery-ui-rails (~> 6.0.1)
|
jquery-ui-rails (~> 8.0.0)
|
||||||
kt-paperclip (~> 7.1)
|
kt-paperclip (~> 7.2)
|
||||||
listen
|
listen
|
||||||
|
mini_racer
|
||||||
minitest-stub-const
|
minitest-stub-const
|
||||||
mocha
|
mocha
|
||||||
mysql2 (~> 0.5.3)
|
mysql2 (~> 0.5)
|
||||||
pg (~> 1.3.2)
|
pg (~> 1.5)
|
||||||
puma (~> 5.6)
|
puma (~> 6.6)
|
||||||
rack-mini-profiler
|
rack-mini-profiler
|
||||||
rails (~> 6.0.4)
|
rails (~> 7.1)
|
||||||
rails-controller-testing
|
rails-controller-testing
|
||||||
rails-dom-testing (~> 2.0.0)
|
rails-dom-testing (~> 2.3.0)
|
||||||
rails_autolink
|
rails_autolink
|
||||||
|
rexml
|
||||||
rspec-expectations
|
rspec-expectations
|
||||||
rubocop (~> 1.25)
|
rubocop (~> 1.78)
|
||||||
sanitize (~> 6.0)
|
sanitize (~> 7.0)
|
||||||
sassc-rails (~> 2.1.2)
|
|
||||||
simplecov
|
simplecov
|
||||||
solargraph
|
solargraph
|
||||||
spring
|
spring (~> 4)
|
||||||
sqlite3
|
sprockets-rails
|
||||||
therubyracer
|
sqlite3 (~> 2.7)
|
||||||
tolk (~> 4.1.1)
|
stripe
|
||||||
|
terser
|
||||||
|
tolk (~> 6.0.0)
|
||||||
tracks-chartjs-ror
|
tracks-chartjs-ror
|
||||||
uglifier (>= 1.3.0)
|
|
||||||
will_paginate
|
will_paginate
|
||||||
yard
|
yard
|
||||||
|
|
||||||
BUNDLED WITH
|
BUNDLED WITH
|
||||||
2.2.22
|
2.4.19
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
[](https://github.com/TracksApp/tracks/actions)
|
[](https://github.com/TracksApp/tracks/actions)
|
||||||
[](https://codeclimate.com/github/TracksApp/tracks)
|
[](https://codeclimate.com/github/TracksApp/tracks)
|
||||||
[](https://hosted.weblate.org/engage/tracks/)
|
[](https://hosted.weblate.org/engage/tracks/)
|
||||||
|
[](https://bestpractices.coreinfrastructure.org/projects/6459)
|
||||||
|
|
||||||
## About
|
## About
|
||||||
|
|
||||||
|
@ -12,7 +13,6 @@
|
||||||
* Hosted services: https://github.com/TracksApp/tracks/wiki/Hosted-Tracks
|
* Hosted services: https://github.com/TracksApp/tracks/wiki/Hosted-Tracks
|
||||||
* Bug reports and feature requests: https://github.com/TracksApp/tracks/issues
|
* Bug reports and feature requests: https://github.com/TracksApp/tracks/issues
|
||||||
* Mailing list: http://groups.google.com/group/TracksApp
|
* Mailing list: http://groups.google.com/group/TracksApp
|
||||||
* IRC channel: #tracks on Libera, available also on [Matrix](https://matrix.to/#/#tracks:matrix.org)
|
|
||||||
* License: See COPYING
|
* License: See COPYING
|
||||||
|
|
||||||
Full instructions for both new installations and upgrades from older installations
|
Full instructions for both new installations and upgrades from older installations
|
||||||
|
|
|
@ -7,5 +7,8 @@
|
||||||
//= link datepicker-fi.js
|
//= link datepicker-fi.js
|
||||||
//= link datepicker-fr.js
|
//= link datepicker-fr.js
|
||||||
//= link datepicker-he.js
|
//= link datepicker-he.js
|
||||||
|
//= link datepicker-nb_NO.js
|
||||||
//= link datepicker-nl.js
|
//= link datepicker-nl.js
|
||||||
//= link datepicker-ru.js
|
//= link datepicker-ru.js
|
||||||
|
//= link datepicker-sv.js
|
||||||
|
//= link datepicker-tr.js
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
/* Czech initialisation for the jQuery UI date picker plugin. */
|
/* Czech initialisation for the jQuery UI date picker plugin. */
|
||||||
/* Written by Tomas Muller (tomas@tomas-muller.net). */
|
/* Written by Tomas Muller (tomas@tomas-muller.net). */
|
||||||
( function( factory ) {
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
// AMD. Register as an anonymous module.
|
// AMD. Register as an anonymous module.
|
||||||
|
@ -10,20 +12,21 @@
|
||||||
// Browser globals
|
// Browser globals
|
||||||
factory( jQuery.datepicker );
|
factory( jQuery.datepicker );
|
||||||
}
|
}
|
||||||
}( function( datepicker ) {
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
datepicker.regional.cs = {
|
datepicker.regional.cs = {
|
||||||
closeText: "Zavřít",
|
closeText: "Zavřít",
|
||||||
prevText: "<Dříve",
|
prevText: "Dříve",
|
||||||
nextText: "Později>",
|
nextText: "Později",
|
||||||
currentText: "Nyní",
|
currentText: "Nyní",
|
||||||
monthNames: [ "leden","únor","březen","duben","květen","červen",
|
monthNames: [ "leden", "únor", "březen", "duben", "květen", "červen",
|
||||||
"červenec","srpen","září","říjen","listopad","prosinec" ],
|
"červenec", "srpen", "září", "říjen", "listopad", "prosinec" ],
|
||||||
monthNamesShort: [ "led","úno","bře","dub","kvě","čer",
|
monthNamesShort: [ "led", "úno", "bře", "dub", "kvě", "čer",
|
||||||
"čvc","srp","zář","říj","lis","pro" ],
|
"čvc", "srp", "zář", "říj", "lis", "pro" ],
|
||||||
dayNames: [ "neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota" ],
|
dayNames: [ "neděle", "pondělí", "úterý", "středa", "čtvrtek", "pátek", "sobota" ],
|
||||||
dayNamesShort: [ "ne", "po", "út", "st", "čt", "pá", "so" ],
|
dayNamesShort: [ "ne", "po", "út", "st", "čt", "pá", "so" ],
|
||||||
dayNamesMin: [ "ne","po","út","st","čt","pá","so" ],
|
dayNamesMin: [ "ne", "po", "út", "st", "čt", "pá", "so" ],
|
||||||
weekHeader: "Týd",
|
weekHeader: "Týd",
|
||||||
dateFormat: "dd.mm.yy",
|
dateFormat: "dd.mm.yy",
|
||||||
firstDay: 1,
|
firstDay: 1,
|
||||||
|
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.cs );
|
||||||
|
|
||||||
return datepicker.regional.cs;
|
return datepicker.regional.cs;
|
||||||
|
|
||||||
} ) );
|
} );
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
/* German initialisation for the jQuery UI date picker plugin. */
|
/* German initialisation for the jQuery UI date picker plugin. */
|
||||||
/* Written by Milian Wolff (mail@milianw.de). */
|
/* Written by Milian Wolff (mail@milianw.de). */
|
||||||
( function( factory ) {
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
// AMD. Register as an anonymous module.
|
// AMD. Register as an anonymous module.
|
||||||
|
@ -10,20 +12,21 @@
|
||||||
// Browser globals
|
// Browser globals
|
||||||
factory( jQuery.datepicker );
|
factory( jQuery.datepicker );
|
||||||
}
|
}
|
||||||
}( function( datepicker ) {
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
datepicker.regional.de = {
|
datepicker.regional.de = {
|
||||||
closeText: "Schließen",
|
closeText: "Schließen",
|
||||||
prevText: "<Zurück",
|
prevText: "Zurück",
|
||||||
nextText: "Vor>",
|
nextText: "Vor",
|
||||||
currentText: "Heute",
|
currentText: "Heute",
|
||||||
monthNames: [ "Januar","Februar","März","April","Mai","Juni",
|
monthNames: [ "Januar", "Februar", "März", "April", "Mai", "Juni",
|
||||||
"Juli","August","September","Oktober","November","Dezember" ],
|
"Juli", "August", "September", "Oktober", "November", "Dezember" ],
|
||||||
monthNamesShort: [ "Jan","Feb","Mär","Apr","Mai","Jun",
|
monthNamesShort: [ "Jan", "Feb", "Mär", "Apr", "Mai", "Jun",
|
||||||
"Jul","Aug","Sep","Okt","Nov","Dez" ],
|
"Jul", "Aug", "Sep", "Okt", "Nov", "Dez" ],
|
||||||
dayNames: [ "Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag" ],
|
dayNames: [ "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" ],
|
||||||
dayNamesShort: [ "So","Mo","Di","Mi","Do","Fr","Sa" ],
|
dayNamesShort: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
|
||||||
dayNamesMin: [ "So","Mo","Di","Mi","Do","Fr","Sa" ],
|
dayNamesMin: [ "So", "Mo", "Di", "Mi", "Do", "Fr", "Sa" ],
|
||||||
weekHeader: "KW",
|
weekHeader: "KW",
|
||||||
dateFormat: "dd.mm.yy",
|
dateFormat: "dd.mm.yy",
|
||||||
firstDay: 1,
|
firstDay: 1,
|
||||||
|
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.de );
|
||||||
|
|
||||||
return datepicker.regional.de;
|
return datepicker.regional.de;
|
||||||
|
|
||||||
} ) );
|
} );
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
|
/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
|
||||||
/* Traducido por Vester (xvester@gmail.com). */
|
/* Traducido por Vester (xvester@gmail.com). */
|
||||||
( function( factory ) {
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
// AMD. Register as an anonymous module.
|
// AMD. Register as an anonymous module.
|
||||||
|
@ -10,20 +12,21 @@
|
||||||
// Browser globals
|
// Browser globals
|
||||||
factory( jQuery.datepicker );
|
factory( jQuery.datepicker );
|
||||||
}
|
}
|
||||||
}( function( datepicker ) {
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
datepicker.regional.es = {
|
datepicker.regional.es = {
|
||||||
closeText: "Cerrar",
|
closeText: "Cerrar",
|
||||||
prevText: "<Ant",
|
prevText: "Ant",
|
||||||
nextText: "Sig>",
|
nextText: "Sig",
|
||||||
currentText: "Hoy",
|
currentText: "Hoy",
|
||||||
monthNames: [ "enero","febrero","marzo","abril","mayo","junio",
|
monthNames: [ "enero", "febrero", "marzo", "abril", "mayo", "junio",
|
||||||
"julio","agosto","septiembre","octubre","noviembre","diciembre" ],
|
"julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre" ],
|
||||||
monthNamesShort: [ "ene","feb","mar","abr","may","jun",
|
monthNamesShort: [ "ene", "feb", "mar", "abr", "may", "jun",
|
||||||
"jul","ago","sep","oct","nov","dic" ],
|
"jul", "ago", "sep", "oct", "nov", "dic" ],
|
||||||
dayNames: [ "domingo","lunes","martes","miércoles","jueves","viernes","sábado" ],
|
dayNames: [ "domingo", "lunes", "martes", "miércoles", "jueves", "viernes", "sábado" ],
|
||||||
dayNamesShort: [ "dom","lun","mar","mié","jue","vie","sáb" ],
|
dayNamesShort: [ "dom", "lun", "mar", "mié", "jue", "vie", "sáb" ],
|
||||||
dayNamesMin: [ "D","L","M","X","J","V","S" ],
|
dayNamesMin: [ "D", "L", "M", "X", "J", "V", "S" ],
|
||||||
weekHeader: "Sm",
|
weekHeader: "Sm",
|
||||||
dateFormat: "dd/mm/yy",
|
dateFormat: "dd/mm/yy",
|
||||||
firstDay: 1,
|
firstDay: 1,
|
||||||
|
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.es );
|
||||||
|
|
||||||
return datepicker.regional.es;
|
return datepicker.regional.es;
|
||||||
|
|
||||||
} ) );
|
} );
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
/* Finnish initialisation for the jQuery UI date picker plugin. */
|
/* Finnish initialisation for the jQuery UI date picker plugin. */
|
||||||
/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
|
/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
|
||||||
( function( factory ) {
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
// AMD. Register as an anonymous module.
|
// AMD. Register as an anonymous module.
|
||||||
|
@ -10,20 +12,21 @@
|
||||||
// Browser globals
|
// Browser globals
|
||||||
factory( jQuery.datepicker );
|
factory( jQuery.datepicker );
|
||||||
}
|
}
|
||||||
}( function( datepicker ) {
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
datepicker.regional.fi = {
|
datepicker.regional.fi = {
|
||||||
closeText: "Sulje",
|
closeText: "Sulje",
|
||||||
prevText: "«Edellinen",
|
prevText: "Edellinen",
|
||||||
nextText: "Seuraava»",
|
nextText: "Seuraava",
|
||||||
currentText: "Tänään",
|
currentText: "Tänään",
|
||||||
monthNames: [ "Tammikuu","Helmikuu","Maaliskuu","Huhtikuu","Toukokuu","Kesäkuu",
|
monthNames: [ "Tammikuu", "Helmikuu", "Maaliskuu", "Huhtikuu", "Toukokuu", "Kesäkuu",
|
||||||
"Heinäkuu","Elokuu","Syyskuu","Lokakuu","Marraskuu","Joulukuu" ],
|
"Heinäkuu", "Elokuu", "Syyskuu", "Lokakuu", "Marraskuu", "Joulukuu" ],
|
||||||
monthNamesShort: [ "Tammi","Helmi","Maalis","Huhti","Touko","Kesä",
|
monthNamesShort: [ "Tammi", "Helmi", "Maalis", "Huhti", "Touko", "Kesä",
|
||||||
"Heinä","Elo","Syys","Loka","Marras","Joulu" ],
|
"Heinä", "Elo", "Syys", "Loka", "Marras", "Joulu" ],
|
||||||
dayNamesShort: [ "Su","Ma","Ti","Ke","To","Pe","La" ],
|
dayNamesShort: [ "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" ],
|
||||||
dayNames: [ "Sunnuntai","Maanantai","Tiistai","Keskiviikko","Torstai","Perjantai","Lauantai" ],
|
dayNames: [ "Sunnuntai", "Maanantai", "Tiistai", "Keskiviikko", "Torstai", "Perjantai", "Lauantai" ],
|
||||||
dayNamesMin: [ "Su","Ma","Ti","Ke","To","Pe","La" ],
|
dayNamesMin: [ "Su", "Ma", "Ti", "Ke", "To", "Pe", "La" ],
|
||||||
weekHeader: "Vk",
|
weekHeader: "Vk",
|
||||||
dateFormat: "d.m.yy",
|
dateFormat: "d.m.yy",
|
||||||
firstDay: 1,
|
firstDay: 1,
|
||||||
|
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.fi );
|
||||||
|
|
||||||
return datepicker.regional.fi;
|
return datepicker.regional.fi;
|
||||||
|
|
||||||
} ) );
|
} );
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
Stéphane Nahmani (sholby@sholby.net),
|
Stéphane Nahmani (sholby@sholby.net),
|
||||||
Stéphane Raimbault <stephane.raimbault@gmail.com> */
|
Stéphane Raimbault <stephane.raimbault@gmail.com> */
|
||||||
( function( factory ) {
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
// AMD. Register as an anonymous module.
|
// AMD. Register as an anonymous module.
|
||||||
|
@ -12,7 +14,8 @@
|
||||||
// Browser globals
|
// Browser globals
|
||||||
factory( jQuery.datepicker );
|
factory( jQuery.datepicker );
|
||||||
}
|
}
|
||||||
}( function( datepicker ) {
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
datepicker.regional.fr = {
|
datepicker.regional.fr = {
|
||||||
closeText: "Fermer",
|
closeText: "Fermer",
|
||||||
|
@ -25,7 +28,7 @@ datepicker.regional.fr = {
|
||||||
"juil.", "août", "sept.", "oct.", "nov.", "déc." ],
|
"juil.", "août", "sept.", "oct.", "nov.", "déc." ],
|
||||||
dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ],
|
dayNames: [ "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi" ],
|
||||||
dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ],
|
dayNamesShort: [ "dim.", "lun.", "mar.", "mer.", "jeu.", "ven.", "sam." ],
|
||||||
dayNamesMin: [ "D","L","M","M","J","V","S" ],
|
dayNamesMin: [ "D", "L", "M", "M", "J", "V", "S" ],
|
||||||
weekHeader: "Sem.",
|
weekHeader: "Sem.",
|
||||||
dateFormat: "dd/mm/yy",
|
dateFormat: "dd/mm/yy",
|
||||||
firstDay: 1,
|
firstDay: 1,
|
||||||
|
@ -36,4 +39,4 @@ datepicker.setDefaults( datepicker.regional.fr );
|
||||||
|
|
||||||
return datepicker.regional.fr;
|
return datepicker.regional.fr;
|
||||||
|
|
||||||
} ) );
|
} );
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
/* Hebrew initialisation for the UI Datepicker extension. */
|
/* Hebrew initialisation for the UI Datepicker extension. */
|
||||||
/* Written by Amir Hardon (ahardon at gmail dot com). */
|
/* Written by Amir Hardon (ahardon at gmail dot com). */
|
||||||
( function( factory ) {
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
// AMD. Register as an anonymous module.
|
// AMD. Register as an anonymous module.
|
||||||
|
@ -10,20 +12,21 @@
|
||||||
// Browser globals
|
// Browser globals
|
||||||
factory( jQuery.datepicker );
|
factory( jQuery.datepicker );
|
||||||
}
|
}
|
||||||
}( function( datepicker ) {
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
datepicker.regional.he = {
|
datepicker.regional.he = {
|
||||||
closeText: "סגור",
|
closeText: "סגור",
|
||||||
prevText: "<הקודם",
|
prevText: "הקודם",
|
||||||
nextText: "הבא>",
|
nextText: "הבא",
|
||||||
currentText: "היום",
|
currentText: "היום",
|
||||||
monthNames: [ "ינואר","פברואר","מרץ","אפריל","מאי","יוני",
|
monthNames: [ "ינואר", "פברואר", "מרץ", "אפריל", "מאי", "יוני",
|
||||||
"יולי","אוגוסט","ספטמבר","אוקטובר","נובמבר","דצמבר" ],
|
"יולי", "אוגוסט", "ספטמבר", "אוקטובר", "נובמבר", "דצמבר" ],
|
||||||
monthNamesShort: [ "ינו","פבר","מרץ","אפר","מאי","יוני",
|
monthNamesShort: [ "ינו", "פבר", "מרץ", "אפר", "מאי", "יוני",
|
||||||
"יולי","אוג","ספט","אוק","נוב","דצמ" ],
|
"יולי", "אוג", "ספט", "אוק", "נוב", "דצמ" ],
|
||||||
dayNames: [ "ראשון","שני","שלישי","רביעי","חמישי","שישי","שבת" ],
|
dayNames: [ "ראשון", "שני", "שלישי", "רביעי", "חמישי", "שישי", "שבת" ],
|
||||||
dayNamesShort: [ "א'","ב'","ג'","ד'","ה'","ו'","שבת" ],
|
dayNamesShort: [ "א'", "ב'", "ג'", "ד'", "ה'", "ו'", "שבת" ],
|
||||||
dayNamesMin: [ "א'","ב'","ג'","ד'","ה'","ו'","שבת" ],
|
dayNamesMin: [ "א'", "ב'", "ג'", "ד'", "ה'", "ו'", "שבת" ],
|
||||||
weekHeader: "Wk",
|
weekHeader: "Wk",
|
||||||
dateFormat: "dd/mm/yy",
|
dateFormat: "dd/mm/yy",
|
||||||
firstDay: 0,
|
firstDay: 0,
|
||||||
|
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.he );
|
||||||
|
|
||||||
return datepicker.regional.he;
|
return datepicker.regional.he;
|
||||||
|
|
||||||
} ) );
|
} );
|
||||||
|
|
52
app/assets/javascripts-jquery-ui/datepicker-nb_NO.js
Normal file
52
app/assets/javascripts-jquery-ui/datepicker-nb_NO.js
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/* Norwegian Bokmål initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Bjørn Johansen (post@bjornjohansen.no). */
|
||||||
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define( [ "../widgets/datepicker" ], factory );
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Browser globals
|
||||||
|
factory( jQuery.datepicker );
|
||||||
|
}
|
||||||
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
datepicker.regional.nb = {
|
||||||
|
closeText: "Lukk",
|
||||||
|
prevText: "Forrige",
|
||||||
|
nextText: "Neste",
|
||||||
|
currentText: "I dag",
|
||||||
|
monthNames: [
|
||||||
|
"januar",
|
||||||
|
"februar",
|
||||||
|
"mars",
|
||||||
|
"april",
|
||||||
|
"mai",
|
||||||
|
"juni",
|
||||||
|
"juli",
|
||||||
|
"august",
|
||||||
|
"september",
|
||||||
|
"oktober",
|
||||||
|
"november",
|
||||||
|
"desember"
|
||||||
|
],
|
||||||
|
monthNamesShort: [ "jan", "feb", "mar", "apr", "mai", "jun", "jul", "aug", "sep", "okt", "nov", "des" ],
|
||||||
|
dayNamesShort: [ "søn", "man", "tir", "ons", "tor", "fre", "lør" ],
|
||||||
|
dayNames: [ "søndag", "mandag", "tirsdag", "onsdag", "torsdag", "fredag", "lørdag" ],
|
||||||
|
dayNamesMin: [ "sø", "ma", "ti", "on", "to", "fr", "lø" ],
|
||||||
|
weekHeader: "Uke",
|
||||||
|
dateFormat: "dd.mm.yy",
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: ""
|
||||||
|
};
|
||||||
|
datepicker.setDefaults( datepicker.regional.nb );
|
||||||
|
|
||||||
|
return datepicker.regional.nb;
|
||||||
|
|
||||||
|
} );
|
|
@ -1,6 +1,8 @@
|
||||||
/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
|
/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
|
||||||
/* Written by Mathias Bynens <http://mathiasbynens.be/> */
|
/* Written by Mathias Bynens <http://mathiasbynens.be/> */
|
||||||
( function( factory ) {
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
// AMD. Register as an anonymous module.
|
// AMD. Register as an anonymous module.
|
||||||
|
@ -10,12 +12,13 @@
|
||||||
// Browser globals
|
// Browser globals
|
||||||
factory( jQuery.datepicker );
|
factory( jQuery.datepicker );
|
||||||
}
|
}
|
||||||
}( function( datepicker ) {
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
datepicker.regional.nl = {
|
datepicker.regional.nl = {
|
||||||
closeText: "Sluiten",
|
closeText: "Sluiten",
|
||||||
prevText: "←",
|
prevText: "Vorig",
|
||||||
nextText: "→",
|
nextText: "Volgende",
|
||||||
currentText: "Vandaag",
|
currentText: "Vandaag",
|
||||||
monthNames: [ "januari", "februari", "maart", "april", "mei", "juni",
|
monthNames: [ "januari", "februari", "maart", "april", "mei", "juni",
|
||||||
"juli", "augustus", "september", "oktober", "november", "december" ],
|
"juli", "augustus", "september", "oktober", "november", "december" ],
|
||||||
|
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.nl );
|
||||||
|
|
||||||
return datepicker.regional.nl;
|
return datepicker.regional.nl;
|
||||||
|
|
||||||
} ) );
|
} );
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
|
/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
|
||||||
/* Written by Andrew Stromnov (stromnov@gmail.com). */
|
/* Written by Andrew Stromnov (stromnov@gmail.com). */
|
||||||
( function( factory ) {
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
if ( typeof define === "function" && define.amd ) {
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
// AMD. Register as an anonymous module.
|
// AMD. Register as an anonymous module.
|
||||||
|
@ -10,20 +12,21 @@
|
||||||
// Browser globals
|
// Browser globals
|
||||||
factory( jQuery.datepicker );
|
factory( jQuery.datepicker );
|
||||||
}
|
}
|
||||||
}( function( datepicker ) {
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
datepicker.regional.ru = {
|
datepicker.regional.ru = {
|
||||||
closeText: "Закрыть",
|
closeText: "Закрыть",
|
||||||
prevText: "<Пред",
|
prevText: "Пред",
|
||||||
nextText: "След>",
|
nextText: "След",
|
||||||
currentText: "Сегодня",
|
currentText: "Сегодня",
|
||||||
monthNames: [ "Январь","Февраль","Март","Апрель","Май","Июнь",
|
monthNames: [ "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь",
|
||||||
"Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь" ],
|
"Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ],
|
||||||
monthNamesShort: [ "Янв","Фев","Мар","Апр","Май","Июн",
|
monthNamesShort: [ "Янв", "Фев", "Мар", "Апр", "Май", "Июн",
|
||||||
"Июл","Авг","Сен","Окт","Ноя","Дек" ],
|
"Июл", "Авг", "Сен", "Окт", "Ноя", "Дек" ],
|
||||||
dayNames: [ "воскресенье","понедельник","вторник","среда","четверг","пятница","суббота" ],
|
dayNames: [ "воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота" ],
|
||||||
dayNamesShort: [ "вск","пнд","втр","срд","чтв","птн","сбт" ],
|
dayNamesShort: [ "вск", "пнд", "втр", "срд", "чтв", "птн", "сбт" ],
|
||||||
dayNamesMin: [ "Вс","Пн","Вт","Ср","Чт","Пт","Сб" ],
|
dayNamesMin: [ "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" ],
|
||||||
weekHeader: "Нед",
|
weekHeader: "Нед",
|
||||||
dateFormat: "dd.mm.yy",
|
dateFormat: "dd.mm.yy",
|
||||||
firstDay: 1,
|
firstDay: 1,
|
||||||
|
@ -34,4 +37,4 @@ datepicker.setDefaults( datepicker.regional.ru );
|
||||||
|
|
||||||
return datepicker.regional.ru;
|
return datepicker.regional.ru;
|
||||||
|
|
||||||
} ) );
|
} );
|
||||||
|
|
40
app/assets/javascripts-jquery-ui/datepicker-sv.js
Normal file
40
app/assets/javascripts-jquery-ui/datepicker-sv.js
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/* Swedish initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Anders Ekdahl ( anders@nomadiz.se). */
|
||||||
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define( [ "../widgets/datepicker" ], factory );
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Browser globals
|
||||||
|
factory( jQuery.datepicker );
|
||||||
|
}
|
||||||
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
datepicker.regional.sv = {
|
||||||
|
closeText: "Stäng",
|
||||||
|
prevText: "Förra",
|
||||||
|
nextText: "Nästa",
|
||||||
|
currentText: "Idag",
|
||||||
|
monthNames: [ "januari", "februari", "mars", "april", "maj", "juni",
|
||||||
|
"juli", "augusti", "september", "oktober", "november", "december" ],
|
||||||
|
monthNamesShort: [ "jan.", "feb.", "mars", "apr.", "maj", "juni",
|
||||||
|
"juli", "aug.", "sep.", "okt.", "nov.", "dec." ],
|
||||||
|
dayNamesShort: [ "sön", "mån", "tis", "ons", "tor", "fre", "lör" ],
|
||||||
|
dayNames: [ "söndag", "måndag", "tisdag", "onsdag", "torsdag", "fredag", "lördag" ],
|
||||||
|
dayNamesMin: [ "sö", "må", "ti", "on", "to", "fr", "lö" ],
|
||||||
|
weekHeader: "Ve",
|
||||||
|
dateFormat: "yy-mm-dd",
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: "" };
|
||||||
|
datepicker.setDefaults( datepicker.regional.sv );
|
||||||
|
|
||||||
|
return datepicker.regional.sv;
|
||||||
|
|
||||||
|
} );
|
40
app/assets/javascripts-jquery-ui/datepicker-tr.js
Normal file
40
app/assets/javascripts-jquery-ui/datepicker-tr.js
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/* Turkish initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
|
||||||
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define( [ "../widgets/datepicker" ], factory );
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Browser globals
|
||||||
|
factory( jQuery.datepicker );
|
||||||
|
}
|
||||||
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
datepicker.regional.tr = {
|
||||||
|
closeText: "kapat",
|
||||||
|
prevText: "geri",
|
||||||
|
nextText: "ileri",
|
||||||
|
currentText: "bugün",
|
||||||
|
monthNames: [ "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran",
|
||||||
|
"Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık" ],
|
||||||
|
monthNamesShort: [ "Oca", "Şub", "Mar", "Nis", "May", "Haz",
|
||||||
|
"Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara" ],
|
||||||
|
dayNames: [ "Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi" ],
|
||||||
|
dayNamesShort: [ "Pz", "Pt", "Sa", "Ça", "Pe", "Cu", "Ct" ],
|
||||||
|
dayNamesMin: [ "Pz", "Pt", "Sa", "Ça", "Pe", "Cu", "Ct" ],
|
||||||
|
weekHeader: "Hf",
|
||||||
|
dateFormat: "dd.mm.yy",
|
||||||
|
firstDay: 1,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: false,
|
||||||
|
yearSuffix: "" };
|
||||||
|
datepicker.setDefaults( datepicker.regional.tr );
|
||||||
|
|
||||||
|
return datepicker.regional.tr;
|
||||||
|
|
||||||
|
} );
|
40
app/assets/javascripts-jquery-ui/datepicker-zh-TW.js
Normal file
40
app/assets/javascripts-jquery-ui/datepicker-zh-TW.js
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/* Traditional Chinese (Taiwan) initialisation for the jQuery UI date picker plugin. */
|
||||||
|
/* Written by Claude Code for Tracks application. */
|
||||||
|
( function( factory ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
if ( typeof define === "function" && define.amd ) {
|
||||||
|
|
||||||
|
// AMD. Register as an anonymous module.
|
||||||
|
define( [ "../widgets/datepicker" ], factory );
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Browser globals
|
||||||
|
factory( jQuery.datepicker );
|
||||||
|
}
|
||||||
|
} )( function( datepicker ) {
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
datepicker.regional["zh-TW"] = {
|
||||||
|
closeText: "關閉",
|
||||||
|
prevText: "上一月",
|
||||||
|
nextText: "下一月",
|
||||||
|
currentText: "今天",
|
||||||
|
monthNames: [ "一月", "二月", "三月", "四月", "五月", "六月",
|
||||||
|
"七月", "八月", "九月", "十月", "十一月", "十二月" ],
|
||||||
|
monthNamesShort: [ "1月", "2月", "3月", "4月", "5月", "6月",
|
||||||
|
"7月", "8月", "9月", "10月", "11月", "12月" ],
|
||||||
|
dayNames: [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" ],
|
||||||
|
dayNamesShort: [ "日", "一", "二", "三", "四", "五", "六" ],
|
||||||
|
dayNamesMin: [ "日", "一", "二", "三", "四", "五", "六" ],
|
||||||
|
weekHeader: "週",
|
||||||
|
dateFormat: "yy/mm/dd",
|
||||||
|
firstDay: 0,
|
||||||
|
isRTL: false,
|
||||||
|
showMonthAfterYear: true,
|
||||||
|
yearSuffix: "年" };
|
||||||
|
datepicker.setDefaults( datepicker.regional["zh-TW"] );
|
||||||
|
|
||||||
|
return datepicker.regional["zh-TW"];
|
||||||
|
|
||||||
|
} );
|
|
@ -10,9 +10,9 @@
|
||||||
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
|
||||||
// about supported directives.
|
// about supported directives.
|
||||||
//
|
//
|
||||||
//= require jquery
|
|
||||||
//= require jquery_ujs
|
//= require jquery_ujs
|
||||||
//= require bootstrap-sprockets
|
//= require jquery3
|
||||||
|
//= require bootstrap
|
||||||
|
|
||||||
//= require jquery-ui/widgets/autocomplete
|
//= require jquery-ui/widgets/autocomplete
|
||||||
//= require jquery-ui/widgets/datepicker
|
//= require jquery-ui/widgets/datepicker
|
||||||
|
|
|
@ -1,2 +1 @@
|
||||||
@import "font-awesome-sprockets";
|
|
||||||
@import "font-awesome";
|
@import "font-awesome";
|
||||||
|
|
|
@ -21,7 +21,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.bootstrap {
|
.bootstrap {
|
||||||
@import "bootstrap-sprockets";
|
|
||||||
@import "bootstrap";
|
@import "bootstrap";
|
||||||
@import "tracks-logo";
|
@import "tracks-logo";
|
||||||
@import "login";
|
@import "login";
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
require_dependency "login_system"
|
require_dependency "login_system"
|
||||||
require_dependency "tracks/source_view"
|
require_dependency "tracks/source_view_switching"
|
||||||
|
|
||||||
class ApplicationController < ActionController::Base
|
class ApplicationController < ActionController::Base
|
||||||
# Prevent CSRF attacks by raising an exception.
|
# Prevent CSRF attacks by raising an exception.
|
||||||
|
|
|
@ -83,7 +83,7 @@ class ContextsController < ApplicationController
|
||||||
end
|
end
|
||||||
format.xml do
|
format.xml do
|
||||||
if @context.new_record?
|
if @context.new_record?
|
||||||
render_failure @context.errors.to_xml.html_safe, 409
|
render_failure @context.errors.full_messages.to_xml(root: "errors", skip_types: true).html_safe, 409
|
||||||
else
|
else
|
||||||
head :created, :location => context_url(@context)
|
head :created, :location => context_url(@context)
|
||||||
end
|
end
|
||||||
|
|
|
@ -36,7 +36,7 @@ class FeedlistController < ApplicationController
|
||||||
|
|
||||||
def get_feeds_for(object)
|
def get_feeds_for(object)
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html { render :file => "feedlist/get_feeds_for_#{object.class.name.downcase}" }
|
format.html { render :template => "feedlist/get_feeds_for_#{object.class.name.downcase}" }
|
||||||
format.js
|
format.js
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
class IntegrationsController < ApplicationController
|
class IntegrationsController < ApplicationController
|
||||||
require 'mail'
|
require 'mail'
|
||||||
|
|
||||||
skip_before_action :login_required, :only => [:cloudmailin, :search_plugin]
|
skip_before_action :login_required, :only => [:search_plugin]
|
||||||
skip_before_action :verify_authenticity_token, only: [:cloudmailin]
|
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@page_title = 'TRACKS::Integrations'
|
@page_title = 'TRACKS::Integrations'
|
||||||
|
@ -21,31 +20,8 @@ class IntegrationsController < ApplicationController
|
||||||
.pack('m').gsub(/\n/, '')
|
.pack('m').gsub(/\n/, '')
|
||||||
end
|
end
|
||||||
|
|
||||||
def cloudmailin
|
|
||||||
if !verify_cloudmailin_signature
|
|
||||||
render :body => "Message signature verification failed.", :status => 403
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
|
|
||||||
if process_message(params[:message])
|
|
||||||
render :body => 'success', :status => 200
|
|
||||||
else
|
|
||||||
render :body => "No user found or other error", :status => 404
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def process_message(message)
|
|
||||||
MessageGateway.receive(Mail.new(message))
|
|
||||||
end
|
|
||||||
|
|
||||||
def verify_cloudmailin_signature
|
|
||||||
provided = request.request_parameters.delete(:signature)
|
|
||||||
signature = Digest::MD5.hexdigest(flatten_params(request.request_parameters).sort.map { |k, v| v }.join + SITE_CONFIG['cloudmailin'])
|
|
||||||
return provided == signature
|
|
||||||
end
|
|
||||||
|
|
||||||
def flatten_params(params, title = nil, result = {})
|
def flatten_params(params, title = nil, result = {})
|
||||||
params.each do |key, value|
|
params.each do |key, value|
|
||||||
if value.is_a? Hash
|
if value.is_a? Hash
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
require 'openssl'
|
|
||||||
|
|
||||||
class MailgunController < ApplicationController
|
|
||||||
skip_before_action :login_required, :only => [:mailgun]
|
|
||||||
before_action :verify, :only => [:mailgun]
|
|
||||||
protect_from_forgery with: :null_session
|
|
||||||
|
|
||||||
def mailgun
|
|
||||||
unless params.include? 'body-mime'
|
|
||||||
Rails.logger.info "Cannot process Mailgun request, no body-mime sent"
|
|
||||||
render_failure "Unacceptable body-mime", 406
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
todo = MessageGateway.receive(params['body-mime'])
|
|
||||||
if todo
|
|
||||||
render :xml => todo.to_xml(*todo_xml_params)
|
|
||||||
else
|
|
||||||
render_failure "Todo not saved", 406
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def verify
|
|
||||||
unless params['signature'] == OpenSSL::HMAC.hexdigest(
|
|
||||||
OpenSSL::Digest.new('sha256'),
|
|
||||||
SITE_CONFIG['mailgun_api_key'],
|
|
||||||
'%s%s' % [params['timestamp'], params['token']]
|
|
||||||
)
|
|
||||||
Rails.logger.info "Cannot verify Mailgun signature"
|
|
||||||
render_failure "Access denied", 406
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -186,7 +186,7 @@ class ProjectsController < ApplicationController
|
||||||
end
|
end
|
||||||
format.xml do
|
format.xml do
|
||||||
if @project.new_record?
|
if @project.new_record?
|
||||||
render_failure @project.errors.to_xml.html_safe, 409
|
render_failure @project.errors.full_messages.to_xml(root: "errors", skip_types: true).html_safe, 409
|
||||||
else
|
else
|
||||||
head :created, :location => project_url(@project), :text => @project.id
|
head :created, :location => project_url(@project), :text => @project.id
|
||||||
end
|
end
|
||||||
|
|
|
@ -154,7 +154,7 @@ class TodosController < ApplicationController
|
||||||
if @saved
|
if @saved
|
||||||
head :created, :location => todo_url(@todo)
|
head :created, :location => todo_url(@todo)
|
||||||
else
|
else
|
||||||
render_failure @todo.errors.to_xml.html_safe, 409
|
render_failure @todo.errors.full_messages.to_xml(root: "errors", skip_types: true).html_safe, 409
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -438,7 +438,7 @@ class TodosController < ApplicationController
|
||||||
rescue ActiveRecord::RecordInvalid => exception
|
rescue ActiveRecord::RecordInvalid => exception
|
||||||
record = exception.record
|
record = exception.record
|
||||||
if record.is_a?(Dependency)
|
if record.is_a?(Dependency)
|
||||||
record.errors.each { |key, value| @todo.errors[key] << value }
|
record.errors.each { |key, value| @todo.errors.add(key, value) }
|
||||||
end
|
end
|
||||||
@saved = false
|
@saved = false
|
||||||
end
|
end
|
||||||
|
@ -863,8 +863,10 @@ class TodosController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
@single_tag = @tag_expr.size == 1 && @tag_expr[0].size == 1
|
@single_tag = @tag_expr.size == 1 && @tag_expr[0].size == 1
|
||||||
@tag_name = @tag_expr[0][0]
|
|
||||||
@tag_title = @single_tag ? @tag_name : tag_title(@tag_expr)
|
# These are used in the templates, sanitise to prevent XSS.
|
||||||
|
@tag_name = sanitize(@tag_expr[0][0])
|
||||||
|
@tag_title = sanitize(@single_tag ? @tag_name : tag_title(@tag_expr))
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter_format_for_tag_view
|
def filter_format_for_tag_view
|
||||||
|
@ -1192,7 +1194,7 @@ end
|
||||||
begin
|
begin
|
||||||
parse_date_per_user_prefs(date)
|
parse_date_per_user_prefs(date)
|
||||||
rescue
|
rescue
|
||||||
@todo.errors[:base] << error_msg
|
@todo.errors.add(:base, error_msg)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -81,13 +81,15 @@ class UsersController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
unless params['approve_tos'] == 'on' || SITE_CONFIG['tos_link'].blank?
|
unless params['approve_tos'] == 'on' || SITE_CONFIG['tos_link'].blank?
|
||||||
render_failure "You have to accept the terms of service to sign up!"
|
notify :error, t('users.tos_error')
|
||||||
|
redirect_to signup_path
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
user = User.new(user_params)
|
user = User.new(user_params)
|
||||||
|
|
||||||
unless user.valid?
|
unless user.valid?
|
||||||
|
notify :error, t('users.create_error')
|
||||||
redirect_to signup_path
|
redirect_to signup_path
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -125,7 +127,7 @@ class UsersController < ApplicationController
|
||||||
unless user.new_record?
|
unless user.new_record?
|
||||||
render :body => t('users.user_created'), :status => 200
|
render :body => t('users.user_created'), :status => 200
|
||||||
else
|
else
|
||||||
render_failure user.errors.to_xml, 409
|
render_failure user.errors.full_messages.to_xml(root: "errors", skip_types: true), 409
|
||||||
end
|
end
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,141 +0,0 @@
|
||||||
class MessageGateway < ActionMailer::Base
|
|
||||||
def receive(email)
|
|
||||||
user = get_receiving_user_from_email_address(email)
|
|
||||||
return false if user.nil?
|
|
||||||
return false unless check_sender_is_in_mailmap(user, email)
|
|
||||||
|
|
||||||
context = user.prefs.sms_context
|
|
||||||
todo_params = get_todo_params(email)
|
|
||||||
|
|
||||||
todo_builder = TodoFromRichMessage.new(user, context.id, todo_params[:description], todo_params[:notes])
|
|
||||||
todo = todo_builder.construct
|
|
||||||
|
|
||||||
if todo.save!
|
|
||||||
Rails.logger.info "Saved email as todo for user #{user.login} in context #{context.name}"
|
|
||||||
|
|
||||||
if attach_email_to_todo(todo, email)
|
|
||||||
Rails.logger.info "Saved email as attachment to todo for user #{user.login} in context #{context.name}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
todo
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def attach_email_to_todo(todo, email)
|
|
||||||
attachment = todo.attachments.build
|
|
||||||
|
|
||||||
# create temp file
|
|
||||||
tmp = Tempfile.new(['attachment', '.eml'], universal_newline: true)
|
|
||||||
tmp.write email.raw_source.gsub(/\r/, "")
|
|
||||||
|
|
||||||
# add temp file to attachment. paperclip will copy the file to the right location
|
|
||||||
Rails.logger.info "Saved received email to #{tmp.path}"
|
|
||||||
attachment.file = tmp
|
|
||||||
tmp.close
|
|
||||||
saved = attachment.save!
|
|
||||||
|
|
||||||
# enable write permissions on group, since MessageGateway could be run under different
|
|
||||||
# user than Tracks (i.e. apache versus mail)
|
|
||||||
dir = File.open(File.dirname(attachment.file.path))
|
|
||||||
dir.chmod(0770)
|
|
||||||
|
|
||||||
# delete temp file
|
|
||||||
tmp.unlink
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_todo_params(email)
|
|
||||||
params = {}
|
|
||||||
|
|
||||||
if email.multipart?
|
|
||||||
params[:description] = get_text_or_nil(email.subject)
|
|
||||||
params[:notes] = get_first_text_plain_part(email)
|
|
||||||
else
|
|
||||||
if email.subject.blank?
|
|
||||||
params[:description] = get_decoded_text_or_nil(email.body)
|
|
||||||
params[:notes] = nil
|
|
||||||
else
|
|
||||||
params[:description] = get_text_or_nil(email.subject)
|
|
||||||
params[:notes] = get_decoded_text_or_nil(email.body)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
params
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_receiving_user_from_email_address(email)
|
|
||||||
SITE_CONFIG['email_dispatch'] == 'single_user' ? get_receiving_user_from_env_setting : get_receiving_user_from_mail_header(email)
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_receiving_user_from_env_setting
|
|
||||||
Rails.logger.info "All received email goes to #{ENV['TRACKS_MAIL_RECEIVER']}"
|
|
||||||
user = User.where(:login => ENV['TRACKS_MAIL_RECEIVER']).first
|
|
||||||
Rails.logger.info "WARNING: Unknown user set for TRACKS_MAIL_RECEIVER (#{ENV['TRACKS_MAIL_RECEIVER']})" if user.nil?
|
|
||||||
return user
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_receiving_user_from_mail_header(email)
|
|
||||||
user = get_receiving_user_from_sms_email(get_address(email))
|
|
||||||
Rails.logger.info(user.nil? ? "User unknown" : "Email belongs to #{user.login}")
|
|
||||||
return user
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_address(email)
|
|
||||||
return SITE_CONFIG['email_dispatch'] == 'to' ? email.to[0] : email.from[0]
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_receiving_user_from_sms_email(address)
|
|
||||||
Rails.logger.info "Looking for user with email #{address}"
|
|
||||||
user = User.where("preferences.sms_email" => address.strip).includes(:preference).first
|
|
||||||
user = User.where("preferences.sms_email" => address.strip[1.100]).includes(:preference).first if user.nil?
|
|
||||||
return user
|
|
||||||
end
|
|
||||||
|
|
||||||
def check_sender_is_in_mailmap(user, email)
|
|
||||||
if user.present? && !sender_is_in_mailmap?(user, email)
|
|
||||||
Rails.logger.warn "#{email.from[0]} not found in mailmap for #{user.login}"
|
|
||||||
return false
|
|
||||||
end
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
|
|
||||||
def sender_is_in_mailmap?(user, email)
|
|
||||||
if (SITE_CONFIG['mailmap'].is_a? Hash) && SITE_CONFIG['email_dispatch'] == 'to'
|
|
||||||
# Look for the sender in the map of allowed senders
|
|
||||||
SITE_CONFIG['mailmap'][user.preference.sms_email].include? email.from[0]
|
|
||||||
else
|
|
||||||
# We can't check the map if it's not defined, or if the lookup is the
|
|
||||||
# wrong way round, so just allow it
|
|
||||||
true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_text_or_nil(text)
|
|
||||||
return text ? text.strip : nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_decoded_text_or_nil(text)
|
|
||||||
return text ? text.decoded.strip : nil
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_first_text_plain_part(email)
|
|
||||||
# get all parts from multipart/alternative attachments
|
|
||||||
parts = get_all_parts(email.parts)
|
|
||||||
|
|
||||||
# remove all parts that are not text/plain
|
|
||||||
parts.reject { |part| !part.content_type.start_with?("text/plain") }
|
|
||||||
|
|
||||||
return parts.count > 0 ? parts[0].decoded.strip : ""
|
|
||||||
end
|
|
||||||
|
|
||||||
def get_all_parts(parts)
|
|
||||||
# return a flattened array of parts. If a multipart attachment is found, recurse over its parts
|
|
||||||
all_parts = parts.inject([]) do |set, elem|
|
|
||||||
if elem.content_type.start_with?("multipart/alternative")
|
|
||||||
# recurse to handle multiparts in this multipart
|
|
||||||
set += get_all_parts(elem.parts)
|
|
||||||
else
|
|
||||||
set << elem
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -80,11 +80,11 @@ module RecurringTodos
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_not_blank(object, msg)
|
def validate_not_blank(object, msg)
|
||||||
errors[:base] << msg if object.blank?
|
errors.add(:base, msg) if object.blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate_not_nil(object, msg)
|
def validate_not_nil(object, msg)
|
||||||
errors[:base] << msg if object.nil?
|
errors.add(:base, msg) if object.nil?
|
||||||
end
|
end
|
||||||
|
|
||||||
def validate
|
def validate
|
||||||
|
@ -100,7 +100,7 @@ module RecurringTodos
|
||||||
when "ends_on_end_date"
|
when "ends_on_end_date"
|
||||||
validate_not_blank(end_date, "The end date needs to be filled in for 'Ends on'")
|
validate_not_blank(end_date, "The end date needs to be filled in for 'Ends on'")
|
||||||
else
|
else
|
||||||
errors[:base] << "The end of the recurrence is not selected" unless ends_on == "no_end_date"
|
errors.add(:base, "The end of the recurrence is not selected") unless ends_on == "no_end_date"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ module RecurringTodos
|
||||||
validate_not_nil(show_always?, "Please select when to show the action")
|
validate_not_nil(show_always?, "Please select when to show the action")
|
||||||
validate_not_blank(show_from_delta, "Please fill in the number of days to show the todo before the due date") unless show_always?
|
validate_not_blank(show_from_delta, "Please fill in the number of days to show the todo before the due date") unless show_always?
|
||||||
else
|
else
|
||||||
errors[:base] << "Unexpected value of recurrence target selector '#{target}'"
|
errors.add(:base, "Unexpected value of recurrence target selector '#{target}'")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ module RecurringTodos
|
||||||
|
|
||||||
def validate
|
def validate
|
||||||
super
|
super
|
||||||
errors[:base] << "Every other nth day may not be empty for this daily recurrence setting" if (!only_work_days?) && every_x_days.blank?
|
errors.add(:base, "Every other nth day may not be empty for this daily recurrence setting") if (!only_work_days?) && every_x_days.blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_next_date(previous)
|
def get_next_date(previous)
|
||||||
|
|
|
@ -30,7 +30,7 @@ module RecurringTodos
|
||||||
super
|
super
|
||||||
validate_not_blank(every_x_week, "Every other nth week may not be empty for weekly recurrence setting")
|
validate_not_blank(every_x_week, "Every other nth week may not be empty for weekly recurrence setting")
|
||||||
something_set = %w{ sunday monday tuesday wednesday thursday friday saturday }.inject(false) { |set, day| set || send("on_#{day}") }
|
something_set = %w{ sunday monday tuesday wednesday thursday friday saturday }.inject(false) { |set, day| set || send("on_#{day}") }
|
||||||
errors[:base] << "You must specify at least one day on which the todo recurs" unless something_set
|
errors.add(:base, "You must specify at least one day on which the todo recurs") unless something_set
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_next_date(previous)
|
def get_next_date(previous)
|
||||||
|
|
|
@ -11,7 +11,7 @@ xml.rss :version => "2.0" do
|
||||||
xml.item do
|
xml.item do
|
||||||
xml.title h(context.title)
|
xml.title h(context.title)
|
||||||
xml.description context_summary(context, count_undone_todos_phrase(context))
|
xml.description context_summary(context, count_undone_todos_phrase(context))
|
||||||
xml.pubDate context.created_at.to_s(:rfc822)
|
xml.pubDate context.created_at.to_formatted_s(:rfc822)
|
||||||
xml.link context_url(context)
|
xml.link context_url(context)
|
||||||
xml.guid context_url(context)
|
xml.guid context_url(context)
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
<br/><p><%= I18n.t 'integrations.contents_header' %></p>
|
<br/><p><%= I18n.t 'integrations.contents_header' %></p>
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#email-cron-section"><%= I18n.t 'integrations.sections.automatic_email' %></a></li>
|
<li><a href="#email-cron-section"><%= I18n.t 'integrations.sections.automatic_email' %></a></li>
|
||||||
<li><a href="#message_gateway"><%= I18n.t 'integrations.sections.message_gateway' %></a></li>
|
|
||||||
<li><a href="#mailgun"><%= I18n.t 'integrations.sections.mailgun' %></a></li>
|
|
||||||
<li><a href="#todo_rich_message_format"><%= I18n.t 'integrations.sections.email_rich' %></a></li>
|
<li><a href="#todo_rich_message_format"><%= I18n.t 'integrations.sections.email_rich' %></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><%= raw I18n.t 'integrations.add_your_own', tell_us_link: link_to(I18n.t('integrations.tell_us_link_text'), 'https://github.com/TracksApp/tracks/issues') %></p>
|
<p><%= raw I18n.t 'integrations.add_your_own', tell_us_link: link_to(I18n.t('integrations.tell_us_link_text'), 'https://github.com/TracksApp/tracks/issues') %></p>
|
||||||
|
@ -19,41 +17,6 @@
|
||||||
|
|
||||||
<p><%= raw I18n.t 'integrations.cron_2', feeds_link: link_to(I18n.t('integrations.feeds_link_text'), feeds_path) %></p>
|
<p><%= raw I18n.t 'integrations.cron_2', feeds_link: link_to(I18n.t('integrations.feeds_link_text'), feeds_path) %></p>
|
||||||
|
|
||||||
<a name="message_gateway"> </a>
|
|
||||||
<h2><%= I18n.t 'integrations.sections.message_gateway' %></h2>
|
|
||||||
<p><%= I18n.t 'integrations.message_gateway.description' %></p>
|
|
||||||
<ul>
|
|
||||||
<li><%= raw I18n.t 'integrations.message_gateway.instructions.1', preferences_link: link_to(t('layouts.navigation.preferences'), preferences_url), sms_email_name: Preference.human_attribute_name('sms_email'), sms_context_name: Preference.human_attribute_name('sms_context') %></li>
|
|
||||||
<li><%= raw I18n.t 'integrations.message_gateway.instructions.2', command: "<pre>/PATH/TO/TRACKS/bin/rails r -e production 'MessageGateway.receive(STDIN.read)'</pre>" %></li>
|
|
||||||
<li><%= I18n.t 'integrations.message_gateway.instructions.3' %></li>
|
|
||||||
</ul>
|
|
||||||
<p><%= I18n.t 'integrations.message_gateway.rich_api_tip' %></p>
|
|
||||||
<p><%= raw I18n.t 'integrations.message_gateway.configuration', site_yml: '<tt>site.yml</tt>', to_name: '<tt>to:</tt>', from_name: '<tt>from:</tt>' %></p>
|
|
||||||
<p><%= raw I18n.t 'integrations.message_gateway.one_user_configuration', single_user_value: '<tt>single_user</tt>', code: "<pre>TRACKS_MAIL_RECEIVER=" + current_user.login + " /PATH/TO/TRACKS/bin/rails r -e production 'MessageGateway.receive(STDIN.read)'</pre>" %></p>
|
|
||||||
|
|
||||||
<a name="mailgun"> </a>
|
|
||||||
<h2><%= I18n.t 'integrations.sections.mailgun' %></h2>
|
|
||||||
<p><%= raw I18n.t 'integrations.mailgun.description', mailgun_link: link_to('Mailgun', 'http://www.mailgun.com/') %></p>
|
|
||||||
<p><%= I18n.t 'integrations.mailgun.conditions' %></p>
|
|
||||||
<ul>
|
|
||||||
<li><%= raw I18n.t 'integrations.mailgun.instructions.1', mailgun_link: link_to('Mailgun', 'http://www.mailgun.com/') %></li>
|
|
||||||
<li><%= I18n.t 'integrations.mailgun.instructions.2' %></li>
|
|
||||||
<ul>
|
|
||||||
<li><%= I18n.t 'integrations.mailgun.instructions.2a' %></li>
|
|
||||||
<li><%= I18n.t 'integrations.mailgun.instructions.2b' %></li>
|
|
||||||
</ul>
|
|
||||||
<li><%= raw I18n.t 'integrations.mailgun.instructions.3', preferences_link: link_to(t('layouts.navigation.preferences'), preferences_url), sms_email_name: Preference.human_attribute_name('sms_email') %></li>
|
|
||||||
<li><%= I18n.t 'integrations.mailgun.instructions.4', sms_context_name: Preference.human_attribute_name('sms_context') %></li>
|
|
||||||
<li><%= I18n.t 'integrations.mailgun.instructions.5' %></li>
|
|
||||||
<li><%= raw I18n.t 'integrations.mailgun.instructions.6', code: '<pre class=code>
|
|
||||||
mailmap:
|
|
||||||
tracks@user.mailgun.org:
|
|
||||||
- me@myhome.example.net
|
|
||||||
- mr.user@work.example.com
|
|
||||||
</pre>' %></li>
|
|
||||||
</ul>
|
|
||||||
<p><%= I18n.t 'integrations.mailgun.gateway_instructions' %></p>
|
|
||||||
|
|
||||||
<a name="todo_rich_message_format"> </a>
|
<a name="todo_rich_message_format"> </a>
|
||||||
<h2><%= I18n.t 'integrations.sections.email_rich' %></h2>
|
<h2><%= I18n.t 'integrations.sections.email_rich' %></h2>
|
||||||
<p><%= I18n.t 'integrations.email_rich.description' %></p>
|
<p><%= I18n.t 'integrations.email_rich.description' %></p>
|
||||||
|
@ -73,7 +36,7 @@ mailmap:
|
||||||
<td><</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.due_date' %></td>
|
<td><</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.due_date' %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>></td><td><%= I18n.t 'integrations.email_rich.field_descriptions.due_date' %></td>
|
<td>></td><td><%= I18n.t 'integrations.email_rich.field_descriptions.tickler_date' %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>#</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.tag' %></td>
|
<td>#</td><td><%= I18n.t 'integrations.email_rich.field_descriptions.tag' %></td>
|
||||||
|
|
|
@ -7,14 +7,14 @@
|
||||||
<%= javascript_include_tag "application" %>
|
<%= javascript_include_tag "application" %>
|
||||||
<%= csrf_meta_tags %>
|
<%= csrf_meta_tags %>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var SOURCE_VIEW = '<%=@source_view%>';
|
var SOURCE_VIEW = '<%=j @source_view %>';
|
||||||
var AUTH_TOKEN = '<%= raw(protect_against_forgery? ? form_authenticity_token.inspect : "") %>'
|
var AUTH_TOKEN = '<%=j raw(protect_against_forgery? ? form_authenticity_token.inspect : "") %>'
|
||||||
var TAG_NAME = '<%= @tag_name ? @tag_name : "" %>'
|
var TAG_NAME = '<%=j @tag_name ? @tag_name : "" %>'
|
||||||
var GROUP_VIEW_BY = '<%= @group_view_by ? @group_view_by : "" %>'
|
var GROUP_VIEW_BY = '<%=j @group_view_by ? @group_view_by : "" %>'
|
||||||
var defaultContexts = <%= default_contexts_for_autocomplete.html_safe rescue '{}' %>;
|
var defaultContexts = <%= default_contexts_for_autocomplete.html_safe rescue '{}' %>;
|
||||||
var defaultTags = <%= default_tags_for_autocomplete.html_safe rescue '{}' %>;
|
var defaultTags = <%= default_tags_for_autocomplete.html_safe rescue '{}' %>;
|
||||||
var dateFormat = '<%= date_format_for_date_picker %>';
|
var dateFormat = '<%=j date_format_for_date_picker %>';
|
||||||
var weekStart = '<%= current_user.prefs.week_starts %>';
|
var weekStart = '<%=j current_user.prefs.week_starts %>';
|
||||||
function relative_to_root(path) { return '<%= root_url %>'+path; };
|
function relative_to_root(path) { return '<%= root_url %>'+path; };
|
||||||
<% if current_user.prefs.refresh != 0 -%>
|
<% if current_user.prefs.refresh != 0 -%>
|
||||||
setup_auto_refresh(<%= current_user.prefs["refresh"].to_i*60000 %>);
|
setup_auto_refresh(<%= current_user.prefs["refresh"].to_i*60000 %>);
|
||||||
|
|
|
@ -86,7 +86,7 @@ var <%=object_name%> = {
|
||||||
return "<%= source_view_is_one_of(:project_list, :review) ? js_render('project_listing', {:suppress_drag_handle => source_view_is(:review)}, @project) : "" %>";
|
return "<%= source_view_is_one_of(:project_list, :review) ? js_render('project_listing', {:suppress_drag_handle => source_view_is(:review)}, @project) : "" %>";
|
||||||
},
|
},
|
||||||
html_for_sidebar: function() {
|
html_for_sidebar: function() {
|
||||||
return "<%= source_view_is(:project) ? escape_javascript(render(:file => 'sidebar/sidebar')) : "" %>";
|
return "<%= source_view_is(:project) ? escape_javascript(render(:template => 'sidebar/sidebar.html.erb')) : "" %>";
|
||||||
},
|
},
|
||||||
html_for_project_settings: function() {
|
html_for_project_settings: function() {
|
||||||
return "<%= source_view_is(:project) ? js_render('project_settings', {}, @project) : "" %>";
|
return "<%= source_view_is(:project) ? js_render('project_settings', {}, @project) : "" %>";
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
unless @further
|
unless @further
|
||||||
-%>
|
-%>
|
||||||
<%= raw t('stats.click_to_show_actions_from_week',
|
<%= raw t('stats.click_to_show_actions_from_week',
|
||||||
:link => link_to("here", show_actions_from_chart_path(:id=>"#{params[:id]}_end", :index => params[:index])),
|
:link => link_to("here", show_actions_from_chart_path(:id=>"#{params[:id].to_i}_end", :index => params[:index].to_i)),
|
||||||
:week => params[:index])
|
:week => params[:index].to_i)
|
||||||
-%>
|
-%>
|
||||||
<%
|
<%
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,7 +11,7 @@ xml.rss :version => "2.0" do
|
||||||
xml.item do
|
xml.item do
|
||||||
xml.title h(todo.description)
|
xml.title h(todo.description)
|
||||||
xml.description feed_content_for_todo(todo)
|
xml.description feed_content_for_todo(todo)
|
||||||
xml.pubDate todo.created_at.to_s(:rfc822)
|
xml.pubDate todo.created_at.to_formatted_s(:rfc822)
|
||||||
xml.link (todo.project && !todo.project.is_a?(NullProject)) ? project_url(todo.project) : context_url(todo.context)
|
xml.link (todo.project && !todo.project.is_a?(NullProject)) ? project_url(todo.project) : context_url(todo.context)
|
||||||
xml.guid todo_url(todo)
|
xml.guid todo_url(todo)
|
||||||
end
|
end
|
||||||
|
|
|
@ -11,5 +11,5 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="input_box">
|
<div id="input_box">
|
||||||
<%= render :partial => "shared/add_new_item_form" %>
|
<%= render :partial => "shared/add_new_item_form" %>
|
||||||
<%= render :file => "sidebar/sidebar" %>
|
<%= render :template => "sidebar/sidebar" %>
|
||||||
</div>
|
</div>
|
||||||
|
|
2
bin/rake
2
bin/rake
|
@ -9,5 +9,5 @@ if [ -e $SCRIPTPATH/../.use-docker -a ! -e /etc/app-env ];
|
||||||
then
|
then
|
||||||
$SCRIPTPATH/../script/docker-environment $0 "$@"
|
$SCRIPTPATH/../script/docker-environment $0 "$@"
|
||||||
else
|
else
|
||||||
$SCRIPTPATH/run-rake "$@"
|
bundle exec rake "$@"
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -12,7 +12,7 @@ SITE_CONFIG = YAML.load_file(File.join(File.dirname(__FILE__), 'site.yml'))
|
||||||
module Tracksapp
|
module Tracksapp
|
||||||
class Application < Rails::Application
|
class Application < Rails::Application
|
||||||
# Initialize configuration defaults for originally generated Rails version.
|
# Initialize configuration defaults for originally generated Rails version.
|
||||||
config.load_defaults 5.1
|
config.load_defaults 7.0
|
||||||
|
|
||||||
# Settings in config/environments/* take precedence over those specified here.
|
# Settings in config/environments/* take precedence over those specified here.
|
||||||
# Application configuration can go into files in config/initializers
|
# Application configuration can go into files in config/initializers
|
||||||
|
@ -21,8 +21,7 @@ module Tracksapp
|
||||||
|
|
||||||
# Custom directories with classes and modules you want to be autoloadable.
|
# Custom directories with classes and modules you want to be autoloadable.
|
||||||
# config.autoload_paths += %W(#{config.root}/extras)
|
# config.autoload_paths += %W(#{config.root}/extras)
|
||||||
config.autoload_paths += %W(#{config.root}/lib)
|
config.autoload_lib(ignore: %w(assets tasks))
|
||||||
config.eager_load_paths += %W(#{config.root}/lib)
|
|
||||||
|
|
||||||
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
||||||
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
||||||
|
@ -35,5 +34,7 @@ module Tracksapp
|
||||||
|
|
||||||
# configure Tracks to handle deployment in a subdir
|
# configure Tracks to handle deployment in a subdir
|
||||||
config.relative_url_root = SITE_CONFIG['subdir'] if SITE_CONFIG['subdir']
|
config.relative_url_root = SITE_CONFIG['subdir'] if SITE_CONFIG['subdir']
|
||||||
|
# or deployment behind a proxy
|
||||||
|
config.action_controller.default_url_options = SITE_CONFIG['default_url_options'] if SITE_CONFIG['default_url_options']
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,26 +1,26 @@
|
||||||
test:
|
test:
|
||||||
adapter: <%= ENV.fetch('DATABASE_TYPE') %>
|
adapter: <%= ENV['DATABASE_TYPE'] %>
|
||||||
encoding: <%= ENV.fetch('DATABASE_ENCODING') %>
|
encoding: <%= ENV['DATABASE_ENCODING'] %>
|
||||||
database: <%= ENV.fetch('DATABASE_NAME') %>
|
database: <%= ENV['DATABASE_NAME'] %>
|
||||||
host: <%= ENV.fetch('DATABASE_HOST') %>
|
host: <%= ENV['DATABASE_HOST'] %>
|
||||||
port: <%= ENV.fetch('DATABASE_PORT') %>
|
port: <%= ENV['DATABASE_PORT'] %>
|
||||||
username: <%= ENV.fetch('DATABASE_USERNAME') %>
|
username: <%= ENV['DATABASE_USERNAME'] %>
|
||||||
password: <%= ENV.fetch('DATABASE_PASSWORD') %>
|
password: <%= ENV['DATABASE_PASSWORD'] %>
|
||||||
|
|
||||||
development:
|
development:
|
||||||
adapter: <%= ENV.fetch('DATABASE_TYPE') %>
|
adapter: <%= ENV['DATABASE_TYPE'] %>
|
||||||
encoding: <%= ENV.fetch('DATABASE_ENCODING') %>
|
encoding: <%= ENV['DATABASE_ENCODING'] %>
|
||||||
database: <%= ENV.fetch('DATABASE_NAME') %>
|
database: <%= ENV['DATABASE_NAME'] %>
|
||||||
host: <%= ENV.fetch('DATABASE_HOST') %>
|
host: <%= ENV['DATABASE_HOST'] %>
|
||||||
port: <%= ENV.fetch('DATABASE_PORT') %>
|
port: <%= ENV['DATABASE_PORT'] %>
|
||||||
username: <%= ENV.fetch('DATABASE_USERNAME') %>
|
username: <%= ENV['DATABASE_USERNAME'] %>
|
||||||
password: <%= ENV.fetch('DATABASE_PASSWORD') %>
|
password: <%= ENV['DATABASE_PASSWORD'] %>
|
||||||
|
|
||||||
production:
|
production:
|
||||||
adapter: <%= ENV.fetch('DATABASE_TYPE') %>
|
adapter: <%= ENV['DATABASE_TYPE'] %>
|
||||||
encoding: <%= ENV.fetch('DATABASE_ENCODING') %>
|
encoding: <%= ENV['DATABASE_ENCODING'] %>
|
||||||
database: <%= ENV.fetch('DATABASE_NAME') %>
|
database: <%= ENV['DATABASE_NAME'] %>
|
||||||
host: <%= ENV.fetch('DATABASE_HOST') %>
|
host: <%= ENV['DATABASE_HOST'] %>
|
||||||
port: <%= ENV.fetch('DATABASE_PORT') %>
|
port: <%= ENV['DATABASE_PORT'] %>
|
||||||
username: <%= ENV.fetch('DATABASE_USERNAME') %>
|
username: <%= ENV['DATABASE_USERNAME'] %>
|
||||||
password: <%= ENV.fetch('DATABASE_PASSWORD') %>
|
password: <%= ENV['DATABASE_PASSWORD'] %>
|
||||||
|
|
|
@ -9,6 +9,7 @@ development:
|
||||||
password:
|
password:
|
||||||
|
|
||||||
production:
|
production:
|
||||||
|
# Set this to 'postgresql' if using PostgreSQL.
|
||||||
adapter: mysql2
|
adapter: mysql2
|
||||||
database: tracks
|
database: tracks
|
||||||
# set this if you are storing utf8 in your mysql database to handle strings
|
# set this if you are storing utf8 in your mysql database to handle strings
|
||||||
|
|
|
@ -23,7 +23,7 @@ Rails.application.configure do
|
||||||
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
|
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
|
||||||
|
|
||||||
# Compress JavaScripts and CSS.
|
# Compress JavaScripts and CSS.
|
||||||
config.assets.js_compressor = :uglifier
|
config.assets.js_compressor = Terser.new
|
||||||
# config.assets.css_compressor = :sass
|
# config.assets.css_compressor = :sass
|
||||||
|
|
||||||
# Do not fallback to assets pipeline if a precompiled asset is missed.
|
# Do not fallback to assets pipeline if a precompiled asset is missed.
|
||||||
|
|
|
@ -23,7 +23,7 @@ Rails.application.configure do
|
||||||
config.action_controller.perform_caching = false
|
config.action_controller.perform_caching = false
|
||||||
|
|
||||||
# Raise exceptions instead of rendering exception templates.
|
# Raise exceptions instead of rendering exception templates.
|
||||||
config.action_dispatch.show_exceptions = false
|
config.action_dispatch.show_exceptions = :none
|
||||||
|
|
||||||
# Disable request forgery protection in test environment.
|
# Disable request forgery protection in test environment.
|
||||||
config.action_controller.allow_forgery_protection = false
|
config.action_controller.allow_forgery_protection = false
|
||||||
|
|
|
@ -7,3 +7,11 @@ Rails.application.config.assets.version = '1.0'
|
||||||
# Rails.application.config.assets.paths << Emoji.images_path
|
# Rails.application.config.assets.paths << Emoji.images_path
|
||||||
# Add Yarn node_modules folder to the asset load path.
|
# Add Yarn node_modules folder to the asset load path.
|
||||||
Rails.application.config.assets.paths << Rails.root.join('node_modules')
|
Rails.application.config.assets.paths << Rails.root.join('node_modules')
|
||||||
|
|
||||||
|
# Precompile additional assets.
|
||||||
|
# application.js, application.css, and all non-JS/CSS in the app/assets
|
||||||
|
# folder are already added.
|
||||||
|
# Rails.application.config.assets.precompile += %w( admin.js admin.css )
|
||||||
|
|
||||||
|
# Precompile jQuery UI datepicker locale files
|
||||||
|
Rails.application.config.assets.precompile += Dir[Rails.root.join('app/assets/javascripts-jquery-ui/datepicker-*.js')].map { |f| File.basename(f) }
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
TRACKS_VERSION='2.6.0'
|
TRACKS_VERSION='2.7.1'
|
||||||
TRACKS_REVISION_WITH_DATE=`git log --date=format:'%Y-%m-%d' --pretty=format:"%h @ %ad" -1`
|
TRACKS_REVISION_WITH_DATE=`git log --date=format:'%Y-%m-%d' --pretty=format:"%h @ %ad" -1`
|
||||||
TRACKS_REVISION=`git log --pretty=format:"%h" -1`
|
TRACKS_REVISION=`git log --pretty=format:"%h" -1`
|
||||||
|
|
|
@ -248,9 +248,9 @@ cs:
|
||||||
- Listopad
|
- Listopad
|
||||||
- Prosinec
|
- Prosinec
|
||||||
order:
|
order:
|
||||||
- rok
|
- :year
|
||||||
- ":měsíc"
|
- :month
|
||||||
- den
|
- :day
|
||||||
datetime:
|
datetime:
|
||||||
distance_in_words:
|
distance_in_words:
|
||||||
about_x_hours:
|
about_x_hours:
|
||||||
|
|
|
@ -472,7 +472,7 @@ de:
|
||||||
)'"
|
)'"
|
||||||
'3': 'Go to %{preferences_link} and enter your incoming Mailgun email address
|
'3': 'Go to %{preferences_link} and enter your incoming Mailgun email address
|
||||||
(e.g. tracks@user.mailgun.com) in the "%{sms_email_name}" box.'
|
(e.g. tracks@user.mailgun.com) in the "%{sms_email_name}" box.'
|
||||||
'4': 'Select a default context for emails to be put in with "%{sms_context_name"'
|
'4': 'Select a default context for emails to be put in with "%{sms_context_name}"'
|
||||||
'5': "Add your Mailgun API key (not the Public API key) to the Tracks 'site.yml'"
|
'5': "Add your Mailgun API key (not the Public API key) to the Tracks 'site.yml'"
|
||||||
'6': "Update the mailmap in 'site.yml' to define which senders can send emails\
|
'6': "Update the mailmap in 'site.yml' to define which senders can send emails\
|
||||||
\ to which incoming addresses. For example, to send emails from your work\
|
\ to which incoming addresses. For example, to send emails from your work\
|
||||||
|
|
|
@ -483,7 +483,7 @@ en:
|
||||||
\ and home email accounts to your Tracks Mailgun route, set it up like this:\
|
\ and home email accounts to your Tracks Mailgun route, set it up like this:\
|
||||||
\ %{code}"
|
\ %{code}"
|
||||||
email_rich:
|
email_rich:
|
||||||
description: "For both of the above methods, the follow format can be used:"
|
description: "For both of the above methods, the following format can be used in the message subject to add metadata:"
|
||||||
fields_title: "The fields are:"
|
fields_title: "The fields are:"
|
||||||
symbol_title: Symbol
|
symbol_title: Symbol
|
||||||
meaning_title: Meaning
|
meaning_title: Meaning
|
||||||
|
@ -494,6 +494,8 @@ en:
|
||||||
project: The project to place the Todo in
|
project: The project to place the Todo in
|
||||||
due_date: The due date for the Todo (may be 2 digits for day, 4 digits for
|
due_date: The due date for the Todo (may be 2 digits for day, 4 digits for
|
||||||
month-day, or 6 digits for year-month-day)
|
month-day, or 6 digits for year-month-day)
|
||||||
|
tickler_date: The tickler date for the Todo (may be 2 digits for day, 4 digits for
|
||||||
|
month-day, or 6 digits for year-month-day)
|
||||||
tag: A tag to apply to the Todo – may be used multiple times
|
tag: A tag to apply to the Todo – may be used multiple times
|
||||||
star: Flag to star the Todo
|
star: Flag to star the Todo
|
||||||
example_names:
|
example_names:
|
||||||
|
@ -1279,6 +1281,7 @@ en:
|
||||||
change_password_title: TRACKS::Change password
|
change_password_title: TRACKS::Change password
|
||||||
choose_password: Choose password
|
choose_password: Choose password
|
||||||
confirm_password: Confirm password
|
confirm_password: Confirm password
|
||||||
|
create_error: User creation failed, maybe you already have an account here?
|
||||||
desired_login: Desired login
|
desired_login: Desired login
|
||||||
destroy_confirmation: 'Warning: this will delete user ''%{login}'', all their
|
destroy_confirmation: 'Warning: this will delete user ''%{login}'', all their
|
||||||
actions, contexts, project and notes. Are you sure that you want to continue?'
|
actions, contexts, project and notes. Are you sure that you want to continue?'
|
||||||
|
@ -1313,6 +1316,7 @@ en:
|
||||||
signup_successful: Signup successful for user %{username}.
|
signup_successful: Signup successful for user %{username}.
|
||||||
successfully_deleted_user: Successfully deleted user %{username}
|
successfully_deleted_user: Successfully deleted user %{username}
|
||||||
tos_link: read the Terms of Service
|
tos_link: read the Terms of Service
|
||||||
|
tos_error: You have to accept the terms of service to sign up!
|
||||||
total_actions: Total actions
|
total_actions: Total actions
|
||||||
total_contexts: Total contexts
|
total_contexts: Total contexts
|
||||||
total_notes: Total notes
|
total_notes: Total notes
|
||||||
|
|
|
@ -2,8 +2,8 @@ es:
|
||||||
activerecord:
|
activerecord:
|
||||||
attributes:
|
attributes:
|
||||||
note:
|
note:
|
||||||
created_at: Creado el
|
created_at: Creado en
|
||||||
updated_at: actualizado a las
|
updated_at: Actualizado en
|
||||||
preference:
|
preference:
|
||||||
date_format: Formato de fecha
|
date_format: Formato de fecha
|
||||||
due_style: Debido al estilo
|
due_style: Debido al estilo
|
||||||
|
@ -133,7 +133,7 @@ es:
|
||||||
not_available_abbr: n/d
|
not_available_abbr: n/d
|
||||||
note:
|
note:
|
||||||
one: 1 nota
|
one: 1 nota
|
||||||
other: "%{count} notas"
|
other: '%{count} notas'
|
||||||
zero: 0 notas
|
zero: 0 notas
|
||||||
notes: Notas
|
notes: Notas
|
||||||
numbered_step: Paso %{number}
|
numbered_step: Paso %{number}
|
||||||
|
@ -150,13 +150,13 @@ es:
|
||||||
show_all: Mostrar todo
|
show_all: Mostrar todo
|
||||||
sort:
|
sort:
|
||||||
alphabetically: Alfabéticamente
|
alphabetically: Alfabéticamente
|
||||||
alphabetically_confirm: "¿Está seguro que desea ordenar estos proyectos alfabéticamente?\
|
alphabetically_confirm: "¿Está seguro que desea ordenar estos proyectos alfabéticamente?
|
||||||
\ Esto reemplazará el orden existente."
|
Esto reemplazará el orden existente."
|
||||||
alphabetically_title: Ordenar proyectos alfabéticamente
|
alphabetically_title: Ordenar proyectos alfabéticamente
|
||||||
by_task_count: Por número de tareas
|
by_task_count: Por número de tareas
|
||||||
by_task_count_title: Ordenar por número de tareas
|
by_task_count_title: Ordenar por número de tareas
|
||||||
by_task_count_title_confirm: "¿Seguro que desea ordenar estos proyectos por\
|
by_task_count_title_confirm: "¿Seguro que desea ordenar estos proyectos por
|
||||||
\ el número de tareas? Esto reemplazará la ordenación existente."
|
el número de tareas? Esto reemplazará la ordenación existente."
|
||||||
sort: Ordenar
|
sort: Ordenar
|
||||||
third: Tercero
|
third: Tercero
|
||||||
todo: pendiente
|
todo: pendiente
|
||||||
|
@ -175,9 +175,9 @@ es:
|
||||||
context_name: Nombre contextual
|
context_name: Nombre contextual
|
||||||
context_state: Estado contextual
|
context_state: Estado contextual
|
||||||
delete_context: Borrar contexto
|
delete_context: Borrar contexto
|
||||||
delete_context_confirmation: "¿Seguro que desea borrar el contexto '%{name}'?\
|
delete_context_confirmation: "¿Seguro que desea borrar el contexto '%{name}'?
|
||||||
\ ¡Tenga en cuenta que esto también borra todas las acciones (recurrentes) dentro\
|
¡Tenga en cuenta que esto también borra todas las acciones (recurrentes) dentro
|
||||||
\ de este contexto!"
|
de este contexto!"
|
||||||
delete_context_title: Borrar contexto
|
delete_context_title: Borrar contexto
|
||||||
edit_context: Editar contexto
|
edit_context: Editar contexto
|
||||||
hidden_contexts: Contextos ocultos
|
hidden_contexts: Contextos ocultos
|
||||||
|
@ -203,23 +203,29 @@ es:
|
||||||
data:
|
data:
|
||||||
import:
|
import:
|
||||||
errors:
|
errors:
|
||||||
invalid_destination: ""
|
invalid_destination: "Destino de importación no válido: %{e}"
|
||||||
some: Han ocurrido algunos errores durante la importación
|
some: Han ocurrido algunos errores durante la importación
|
||||||
file_blank: ''
|
file_blank: 'Archivo no puede estar en blanco'
|
||||||
invalid_csv: ""
|
invalid_csv: "CSV inválido: no pudo leer cabeceras: %{e}"
|
||||||
save_error: ""
|
save_error: "No pudo guardar CSV subido (%{path_and_file}). Puede hacer un
|
||||||
map_title: ''
|
seguimiento de escritura al directorio de la subida? %{e}"
|
||||||
|
no_context: No pudo encontrar un contexto predeterminado
|
||||||
|
map_title: 'Asocia campos a ser importados'
|
||||||
header: Importando datos
|
header: Importando datos
|
||||||
submit: Importar
|
submit: Importar
|
||||||
successful: Importación se realizó correctamente.
|
successful: Importación se realizó correctamente.
|
||||||
target_field: "Import to:"
|
target_field: "Import to:"
|
||||||
upload: Subir
|
upload: Subir
|
||||||
upload_csv: ''
|
upload_csv: 'Suba su archivo CSV'
|
||||||
projects_count: "%{count} proyectos importados"
|
projects_count: "%{count} proyectos importados"
|
||||||
todos_count: "%{count} pendientes importados"
|
todos_count: "%{count} pendientes importados"
|
||||||
yaml_disabled: ""
|
yaml_disabled: "Carga YAML deshabilitada"
|
||||||
yaml_warning: ""
|
yaml_warning: "%{warning}: todos sus datos actuales serán destruidos antes de
|
||||||
paste_field: ""
|
importar el archivo YAML, por lo que si tiene acceso a la base de datos, le
|
||||||
|
recomendamos encarecidamente respaldar la base de dato ahora mismo, por si
|
||||||
|
algo pueda salir mal."
|
||||||
|
paste_field: "Pegue el contenido del archivo YAML que ha exportado a la caja
|
||||||
|
de texto de abajo:"
|
||||||
warning: Aviso
|
warning: Aviso
|
||||||
export:
|
export:
|
||||||
page_title: Tracks::Export
|
page_title: Tracks::Export
|
||||||
|
@ -228,11 +234,11 @@ es:
|
||||||
yaml_description: "%{yaml}: Mejor formato para exportar datos."
|
yaml_description: "%{yaml}: Mejor formato para exportar datos."
|
||||||
yaml_link_description: Fichero YAML con todas sus acciones, contextos, proyectos,
|
yaml_link_description: Fichero YAML con todas sus acciones, contextos, proyectos,
|
||||||
etiquetas y notas
|
etiquetas y notas
|
||||||
yaml_experimental: "Por favor tenga en cuenta que la importación de ficheros\
|
yaml_experimental: "Por favor tenga en cuenta que la importación de ficheros
|
||||||
\ YAML actualmente esta soportada de forma experimental. No confíe en este\
|
YAML actualmente esta soportada de forma experimental. No confíe en este formato
|
||||||
\ formato para hacer copias de seguridad de datos importantes."
|
para hacer copias de seguridad de datos importantes."
|
||||||
csv_description: "%{csv}: Mejor formato para importar en una hoja de cálculo\
|
csv_description: "%{csv}: Mejor formato para importar en una hoja de cálculo
|
||||||
\ o en programas de análisis de datos"
|
o en programas de análisis de datos"
|
||||||
csv_actions_description: Fichero CSV con todas sus acciones, con contextos por
|
csv_actions_description: Fichero CSV con todas sus acciones, con contextos por
|
||||||
nombre y proyectos
|
nombre y proyectos
|
||||||
csv_notes_description: Fichero CSV con todas sus notas
|
csv_notes_description: Fichero CSV con todas sus notas
|
||||||
|
@ -299,7 +305,10 @@ es:
|
||||||
- Octubre
|
- Octubre
|
||||||
- Noviembre
|
- Noviembre
|
||||||
- Diciembre
|
- Diciembre
|
||||||
order: "[:year, :month, :day]"
|
order:
|
||||||
|
- :year
|
||||||
|
- :month
|
||||||
|
- :day
|
||||||
datetime:
|
datetime:
|
||||||
distance_in_words:
|
distance_in_words:
|
||||||
about_x_hours:
|
about_x_hours:
|
||||||
|
@ -413,18 +422,120 @@ es:
|
||||||
update: Actualizar %{model}
|
update: Actualizar %{model}
|
||||||
integrations:
|
integrations:
|
||||||
opensearch_description: Buscar en las Pistas
|
opensearch_description: Buscar en las Pistas
|
||||||
|
sections:
|
||||||
|
message_gateway: Integre Seguimientos con un servidor de correo para ser capaz
|
||||||
|
de enviar una acción a través del correo a los Seguimientos
|
||||||
|
mailgun: Enviar correos a los Seguimientos con Mailgun
|
||||||
|
automatic_email: Envíese automáticamente por correo electrónico las próximas
|
||||||
|
acciones
|
||||||
|
email_rich: Formato del correo electrónico de Rich Todo Message
|
||||||
|
message_gateway:
|
||||||
|
one_user_configuration: 'También puede enviar todos los correos electrónicos
|
||||||
|
a un usuario específico de Tracks. Configure mail_dispatch en site.yml a %{single_user_value}
|
||||||
|
y pase el inicio de sesión del usuario en el comando de canalización: %{code}'
|
||||||
|
instructions:
|
||||||
|
'1': Vaya a %{preferences_link} y configure su "%{sms_email_name}" y "%{sms_context_name}"
|
||||||
|
para todos los enviados por correo electrónico (que podrían provenir de
|
||||||
|
un mensaje SMS)
|
||||||
|
'3': ¡Envíe un correo electrónico a su dirección recién configurada!
|
||||||
|
'2': En sendmail/qmail/postfix/whatever, configure un alias de dirección de
|
||||||
|
correo electrónico para enviar mensajes a %{command}
|
||||||
|
description: 'Si Tracks se ejecuta en el mismo servidor que tu correo, puedes
|
||||||
|
utilizar el gestor de correo integrado en Tracks. Pasos para configurarlo:'
|
||||||
|
rich_api_tip: También puedes utilizar la Rich Todo API para enviar tareas como
|
||||||
|
"lavar la ropa en casa" o "llamar a Bill > proyecto X". El asunto del mensaje
|
||||||
|
rellenará la descripción, el contexto y el proyecto, mientras que el cuerpo
|
||||||
|
rellenará la nota de la tarea.
|
||||||
|
configuration: Es posible que deba configurar su %{site_yml} para decirle a
|
||||||
|
la puerta de enlace de mensajes que mire el campo %{to_name} o el campo %{from_name}
|
||||||
|
para buscar al usuario de Tracks desde la dirección de correo electrónico
|
||||||
|
en ese campo.
|
||||||
|
mailgun:
|
||||||
|
description: Si desea enviar tareas por correo electrónico a Tracks, pero no
|
||||||
|
puede ejecutar un servidor de correo en el mismo host, puede utilizar la compatibilidad
|
||||||
|
con %{mailgun_link} integrada en Tracks.
|
||||||
|
conditions: Para que esto funcione, su servidor de Tracks tendrá que ser accesible
|
||||||
|
desde Internet, para que Mailgun pueda enviarle datos.
|
||||||
|
instructions:
|
||||||
|
'1': Vaya a %{mailgun_link} y regístrese para obtener una cuenta gratuita.
|
||||||
|
'3': Vaya a %{preferences_link} e introduzca su dirección de correo electrónico
|
||||||
|
entrante de Mailgun (por ejemplo, tracks@user.mailgun.com) en la casilla
|
||||||
|
"%{sms_email_name}".
|
||||||
|
'4': Seleccione un contexto predeterminado para los correos electrónicos que
|
||||||
|
se pondrán con "%{sms_context_name}"
|
||||||
|
'2': "Vaya a 'Rutas' en el panel de control de Mailgun, y añada una nueva
|
||||||
|
ruta:"
|
||||||
|
2a: La 'Expresión de filtro' debe establecerse en 'catch_all()'
|
||||||
|
2b: "'Acción' debe ser 'adelante (\"http://mytracksserver.example.com/mailgun/mime\"\
|
||||||
|
)'"
|
||||||
|
'5': Añade tu clave de API de Mailgun (no la clave de API pública) a los Tracks
|
||||||
|
'site.yml'
|
||||||
|
'6': "Actualice el mapa de correo en 'site.yml' para definir qué remitentes
|
||||||
|
pueden enviar correos electrónicos a qué direcciones entrantes. Por ejemplo,
|
||||||
|
para enviar correos electrónicos desde sus cuentas de correo electrónico
|
||||||
|
del trabajo y de casa a su ruta Tracks Mailgun, configúrelo de la siguiente
|
||||||
|
manera: %{code}"
|
||||||
|
gateway_instructions: Todos los comentarios sobre el formato de correo electrónico
|
||||||
|
de la sección anterior se aplican a la gestión de Mailgun, ya que los datos
|
||||||
|
se procesan de la misma manera
|
||||||
|
developer_documentation_link: Información para desarrolladores de Tracks
|
||||||
|
cron_email_subject: Realiza un seguimiento de las acciones que vencen en los próximos
|
||||||
|
7 días
|
||||||
|
title: Integraciones
|
||||||
|
intro: Tracks se puede integrar con otras herramientas... lo que sea necesario
|
||||||
|
para ayudarle a hacer las cosas! Esta página tiene información sobre cómo configurar
|
||||||
|
algunos de estos. No todas ellas son aplicables a todas las plataformas, y algunas
|
||||||
|
requieren más conocimientos técnicos que otras. Véase también %{documentation_link}
|
||||||
|
cron_2: Por supuesto, puede utilizar otro texto %{feeds_link} - ¿Por qué no enviar
|
||||||
|
una lista de las próximas acciones delproyecto en particular a un grupo de colegas
|
||||||
|
que están trabajando en el proyecto?
|
||||||
|
feeds_link_text: feeds proporcionados por Tracks
|
||||||
|
contents_header: 'Contenido:'
|
||||||
|
add_your_own: ¿Tienes uno propio para agregar? %{tell_us_link} y podemos incluirlo
|
||||||
|
en esta página en futuras versiones de Tracks.
|
||||||
|
tell_us_link_text: Cuéntanos sobre ello en nuestra cola de problemas
|
||||||
|
cron_1: Si ingresa la siguiente entrada a su crontab, recibirá un correo electrónico
|
||||||
|
todos los días alrededor de las 5 AM con una lista de las próximas acciones
|
||||||
|
que deben realizarse dentro de los próximos 7 días.
|
||||||
|
example_names:
|
||||||
|
context: contexto
|
||||||
|
project: proyecto
|
||||||
|
tag:
|
||||||
|
'1': etiqueta1
|
||||||
|
'2': etiqueta2
|
||||||
|
todo: mi impresionante tarea
|
||||||
|
email_rich:
|
||||||
|
description: 'Para los dos métodos anteriores, se puede utilizar el siguiente
|
||||||
|
formato en el asunto del mensaje para añadir metadatos:'
|
||||||
|
fields_title: 'Los campos son:'
|
||||||
|
symbol_title: Símbolo
|
||||||
|
meaning_title: Significado
|
||||||
|
field_descriptions:
|
||||||
|
due_date: La fecha de vencimiento de las tareas (puede ser de 2 dígitos para
|
||||||
|
el día, de 4 dígitos para el mes-día o de 6 dígitos para el año-mes-día)
|
||||||
|
tag: Una etiqueta para aplicar a la tarea - puede utilizarse varias veces
|
||||||
|
star: Bandera para empezar la tarea
|
||||||
|
project: El proyecto para colocar la tarea en
|
||||||
|
context: El contexto en el que colocar la tarea
|
||||||
|
tickler_date: La fecha clave para las tareas (puede ser de 2 dígitos para
|
||||||
|
el día, 4 dígitos para el día del mes o 6 dígitos para el día del mes)
|
||||||
|
fields_instruction: Todos los símbolos son opcionales, y el texto hasta el primer
|
||||||
|
símbolo (o el final de la cadena) se utiliza como descripción de la tarea
|
||||||
help:
|
help:
|
||||||
title: Help
|
title: Help
|
||||||
usage: ''
|
usage: 'Puedes encontrar información sobre el uso en el %{manual_link} en la wiki
|
||||||
|
de GitHub del proyecto.'
|
||||||
manual_link_text: User manual
|
manual_link_text: User manual
|
||||||
bugs: ''
|
bugs: 'Si encuentras un error o tienes una petición de funcionalidad, por favor
|
||||||
issue_link_text: ''
|
infórmalo en el %{issue_link}.'
|
||||||
contribute: 'We gladly welcome all contributions to Tracks. Check the %{contribute_link}
|
issue_link_text: 'cola de problemas'
|
||||||
for further information. You can also come discuss with the community:'
|
contribute: 'Todas las contribuciones a Tracks son bienvenidas. Consulta el enlace
|
||||||
|
%{contribute_link} para más información. También puedes venir a debatir con
|
||||||
|
la comunidad:'
|
||||||
contribute_link_text: project website
|
contribute_link_text: project website
|
||||||
mailing_list_link_text: Mailing list
|
mailing_list_link_text: Mailing list
|
||||||
irc_bullet: '%{irc_link} (also available in %{matrix_link})'
|
irc_bullet: '%{irc_link} (también disponible en %{matrix_link})'
|
||||||
irc_link_text: 'IRC channel #Tracks@FreeNode'
|
irc_link_text: 'Canal IRC #Tracks@Libera'
|
||||||
matrix_link_text: Matriz
|
matrix_link_text: Matriz
|
||||||
layouts:
|
layouts:
|
||||||
mobile_navigation:
|
mobile_navigation:
|
||||||
|
@ -440,7 +551,7 @@ es:
|
||||||
tickler: Recordatorio
|
tickler: Recordatorio
|
||||||
navigation:
|
navigation:
|
||||||
admin: Admin
|
admin: Admin
|
||||||
api_docs: REST API Docs
|
api_docs: 'Documentación sobre la API REST'
|
||||||
calendar: Calendario
|
calendar: Calendario
|
||||||
calendar_title: Calendario de las acciones pendientes
|
calendar_title: Calendario de las acciones pendientes
|
||||||
completed_tasks: Hecho
|
completed_tasks: Hecho
|
||||||
|
@ -448,7 +559,7 @@ es:
|
||||||
contexts_title: Contextos
|
contexts_title: Contextos
|
||||||
export: Exportar
|
export: Exportar
|
||||||
export_title: Exportar datos
|
export_title: Exportar datos
|
||||||
feeds: ''
|
feeds: 'Feeds'
|
||||||
feeds_title: Vea un listado de alimentaciones disponibles
|
feeds_title: Vea un listado de alimentaciones disponibles
|
||||||
group_view_by_context: Grupo por contexto
|
group_view_by_context: Grupo por contexto
|
||||||
group_view_by_project: Grupo por proyecto
|
group_view_by_project: Grupo por proyecto
|
||||||
|
@ -462,7 +573,7 @@ es:
|
||||||
integrations_: Pistas Integradas
|
integrations_: Pistas Integradas
|
||||||
manage_users: Administrar usuarios
|
manage_users: Administrar usuarios
|
||||||
manage_users_title: Añadir o eliminar usuarios
|
manage_users_title: Añadir o eliminar usuarios
|
||||||
mobile: Mobile Site
|
mobile: 'Version móvil'
|
||||||
notes_title: Mostrar todas las notas
|
notes_title: Mostrar todas las notas
|
||||||
options: Opciones
|
options: Opciones
|
||||||
organize: Organizar
|
organize: Organizar
|
||||||
|
@ -483,34 +594,35 @@ es:
|
||||||
tickler: Recordatorio
|
tickler: Recordatorio
|
||||||
tickler_title: Recordatorio
|
tickler_title: Recordatorio
|
||||||
view: Ver
|
view: Ver
|
||||||
next_actions_rss_feed: RSS feed of next actions
|
next_actions_rss_feed: 'RSS de las próximas acciones'
|
||||||
toggle_contexts: Conmuta contextos colapsados
|
toggle_contexts: Conmuta contextos colapsados
|
||||||
toggle_contexts_title: Hacer que los contextos colapsados sea (in)visibles
|
toggle_contexts_title: Hacer que los contextos colapsados sea (in)visibles
|
||||||
toggle_notes: Conmuta anotaciones
|
toggle_notes: Conmuta anotaciones
|
||||||
toggle_notes_title: Conmuta todas las anotaciones
|
toggle_notes_title: Conmuta todas las anotaciones
|
||||||
login:
|
login:
|
||||||
account_login: Acceso a la cuenta
|
account_login: Acceso a la cuenta
|
||||||
cas_create_account: If you like to request on please go here to %{signup_link}
|
cas_create_account: 'Si desea realizar una solicitud, por favor vaya aquí %{signup_link}'
|
||||||
cas_logged_in_greeting: Hello, %{username}! You are authenticated.
|
cas_logged_in_greeting: '¡Hola, %{username}! Está autenticad@.'
|
||||||
cas_login: CAS Login
|
cas_login: 'Inicio de sesión en CAS'
|
||||||
cas_no_user_found: Hello, %{username}! You do not have an account on Tracks.
|
cas_no_user_found: '¡Hola, %{username}! No tienes una cuenta en Tracks.'
|
||||||
cas_signup_link: Solicitar cuenta
|
cas_signup_link: Solicitar cuenta
|
||||||
cas_username_not_found: Disculpe, ningún usuario por esa id de usuario CAS existe
|
cas_username_not_found: Disculpe, ningún usuario por esa id de usuario CAS existe
|
||||||
(%{username})
|
(%{username})
|
||||||
log_in_again: log in again.
|
log_in_again: 'conéctate de nuevo.'
|
||||||
logged_out: You have been logged out of Tracks.
|
logged_out: 'Has salido de Tracks.'
|
||||||
login_cas: go to the CAS
|
login_cas: 'ir al CAS'
|
||||||
login_standard: go back to the standard login
|
login_standard: 'volver al inicio de sesión estándar'
|
||||||
login_with_openid: login with an OpenID
|
login_with_openid: 'iniciar sesión con OpenID'
|
||||||
mobile_use_openid: "…or login with an OpenID"
|
mobile_use_openid: "...o iniciar sesión con OpenID"
|
||||||
openid_identity_url_not_found: Sorry, no user by that identity URL exists (%{identity_url})
|
openid_identity_url_not_found: 'Lo sentimos, no existe ningún usuari@ con esa
|
||||||
|
URL (%{identity_url})'
|
||||||
option_separator: o,
|
option_separator: o,
|
||||||
please_login: Please log in to use Tracks
|
please_login: 'Por favor, inicia sesión para utilizar Tracks'
|
||||||
session_time_out: Session has timed out. Please %{link}
|
session_time_out: 'La sesión ha expirado. Por favor %{link}'
|
||||||
session_will_expire: session will expire after %{hours} hour(s) of inactivity.
|
session_will_expire: 'la sesión expirará tras %{hours} hora(s) de inactividad.'
|
||||||
session_will_not_expire: sesión no caducada.
|
session_will_not_expire: sesión no caducada.
|
||||||
sign_in: Entrar
|
sign_in: Entrar
|
||||||
signup_prompt: Want to create an account?
|
signup_prompt: '¿Quiere crear una cuenta?'
|
||||||
successful: Has entrado correctamente. ¡Bienvenido de nuevo!
|
successful: Has entrado correctamente. ¡Bienvenido de nuevo!
|
||||||
successful_with_session_info: 'Entrada correcta:'
|
successful_with_session_info: 'Entrada correcta:'
|
||||||
unsuccessful: Entrada incorrecta.
|
unsuccessful: Entrada incorrecta.
|
||||||
|
@ -533,19 +645,19 @@ es:
|
||||||
user:
|
user:
|
||||||
error_context_not_associated: ID de contexto %{context} no asociado con el id
|
error_context_not_associated: ID de contexto %{context} no asociado con el id
|
||||||
%{user} del usuario.
|
%{user} del usuario.
|
||||||
error_project_not_associated: Project id %{project} not associated with user
|
error_project_not_associated: 'El id de proyecto %{project} no está asociado
|
||||||
id %{user}.
|
al id de usuario %{user}.'
|
||||||
notes:
|
notes:
|
||||||
delete_confirmation: Are you sure that you want to delete the note '%{id}'?
|
delete_confirmation: '¿Estás seguro de que quieres borrar la nota ''%{id}''?'
|
||||||
delete_item_title: Delete item
|
delete_item_title: Delete item
|
||||||
delete_note_confirm: Are you sure that you want to delete the note '%{id}'?
|
delete_note_confirm: Are you sure that you want to delete the note '%{id}'?
|
||||||
delete_note_title: Delete the note '%{id}'
|
delete_note_title: Delete the note '%{id}'
|
||||||
deleted_note: Deleted note '%{id}'
|
deleted_note: Deleted note '%{id}'
|
||||||
edit_item_title: Edit item
|
edit_item_title: Edit item
|
||||||
in_project: 'En: '
|
in_project: 'En: '
|
||||||
no_notes_available: 'Currently there are no notes: add notes to projects from
|
no_notes_available: 'Ahora no hay notas: agregue notas a proyectos desde páginas
|
||||||
individual project pages.'
|
de proyecto individuales.'
|
||||||
note_header: Note %{id}
|
note_header: Nota %{id}
|
||||||
note_link_title: Mostrar nota %{id}
|
note_link_title: Mostrar nota %{id}
|
||||||
note_location_link: 'En:'
|
note_location_link: 'En:'
|
||||||
save_status_message: Nota %{id} fue guardada
|
save_status_message: Nota %{id} fue guardada
|
||||||
|
@ -558,14 +670,14 @@ es:
|
||||||
precision: '2'
|
precision: '2'
|
||||||
separator: "."
|
separator: "."
|
||||||
significant: Significant
|
significant: Significant
|
||||||
strip_insignificant_zeros: Strip insignificant zeros
|
strip_insignificant_zeros: Recorta ceros insignificantes
|
||||||
unit: "€"
|
unit: "€"
|
||||||
format:
|
format:
|
||||||
delimiter: ","
|
delimiter: ","
|
||||||
precision: '3'
|
precision: '3'
|
||||||
separator: "."
|
separator: "."
|
||||||
significant: Significant
|
significant: Significante
|
||||||
strip_insignificant_zeros: Strip insignificant zeros
|
strip_insignificant_zeros: Recorta ceros insignificantes
|
||||||
human:
|
human:
|
||||||
decimal_units:
|
decimal_units:
|
||||||
format: "%n %u"
|
format: "%n %u"
|
||||||
|
@ -631,6 +743,8 @@ es:
|
||||||
token_description: Token (for feeds and API use)
|
token_description: Token (for feeds and API use)
|
||||||
token_header: Su vale
|
token_header: Su vale
|
||||||
updated: Las preferencias de actualización
|
updated: Las preferencias de actualización
|
||||||
|
pick_one: 'O elige uno de los siguientes:'
|
||||||
|
result_in: 'Esto dará lugar a: '
|
||||||
projects:
|
projects:
|
||||||
actions_in_project_title: Acciones en este proyecto
|
actions_in_project_title: Acciones en este proyecto
|
||||||
active_projects: Proyectos Activos
|
active_projects: Proyectos Activos
|
||||||
|
@ -975,7 +1089,8 @@ es:
|
||||||
depends_on: Depends on
|
depends_on: Depends on
|
||||||
depends_on_separate_with_commas: Depende de (separar con comas)
|
depends_on_separate_with_commas: Depende de (separar con comas)
|
||||||
done: Done?
|
done: Done?
|
||||||
drag_action_title: ''
|
drag_action_title: 'Arrastre sobre otra acción para marcar esa acción como dependencia
|
||||||
|
de esta acción.'
|
||||||
due: Fecha límite
|
due: Fecha límite
|
||||||
edit: Edit
|
edit: Edit
|
||||||
edit_action: Edit action
|
edit_action: Edit action
|
||||||
|
@ -1152,57 +1267,58 @@ es:
|
||||||
recurring_todos: Recursión pendiente
|
recurring_todos: Recursión pendiente
|
||||||
remove_dependency: Remove dependency (does not delete the action)
|
remove_dependency: Remove dependency (does not delete the action)
|
||||||
removed_predecessor: Removed %{successor} as dependency from %{predecessor}.
|
removed_predecessor: Removed %{successor} as dependency from %{predecessor}.
|
||||||
scheduled_overdue: Scheduled to show %{days} days ago
|
scheduled_overdue: Planificado para mostrar %{days} días anteriores
|
||||||
see_all_completed: Usted puede ver todas las acciones realizadas %{link}
|
see_all_completed: Usted puede ver todas las acciones realizadas %{link}
|
||||||
set_to_pending: "%{task} set to pending"
|
set_to_pending: "%{task} fijar a pendiente"
|
||||||
show_from: Show from
|
show_from: Mostrar origen
|
||||||
show_in_days: Show in %{days} days
|
show_in_days: Muestra en %{days} días
|
||||||
show_on_date: Show on %{date}
|
show_on_date: Mostrar en %{date}
|
||||||
show_today: Show Today
|
show_today: Show Today
|
||||||
show_tomorrow: Show Tomorrow
|
show_tomorrow: Muestra Mañana
|
||||||
star_action: Star this action
|
star_action: Iniciar esta acción
|
||||||
star_action_with_description: star the action '%{description}'
|
star_action_with_description: inicia la acción '%{description}'
|
||||||
tagged_page_title: TRACKS::Tagged with '%{tag_name}'
|
tagged_page_title: TRACKS::Etiquetado con '%{tag_name}'
|
||||||
tagged_with: tagged with ‘%{tag_name}’
|
tagged_with: etiquetado con ‘%{tag_name}’
|
||||||
tags: Tags (separate with commas)
|
tags: Etiquetas (separadas por comas)
|
||||||
task_list_title: TRACKS::List tasks
|
task_list_title: TRACKS::List etiquetadas
|
||||||
tickler_items_due:
|
tickler_items_due:
|
||||||
one: One tickler item is now due - refresh the page to see it.
|
one: Un elemento de tiquet ahora está vencido - recargue la página para verlo.
|
||||||
other: '%{count} tickler items are now due - refresh the page to see them.'
|
other: '%{count} elementos de ticket ahora están vencidos - recargue la página
|
||||||
|
para verlos.'
|
||||||
to_tickler: al recordatorio
|
to_tickler: al recordatorio
|
||||||
unable_to_add_dependency: Unable to add dependency
|
unable_to_add_dependency: Es imposible añadir dependencia
|
||||||
unresolved_dependency: The value you entered in the dependency field did not resolve
|
unresolved_dependency: 'El valor que ha introducido en el campo de dependencia
|
||||||
to an existing action. This value will not be saved with the rest of the action.
|
no se ha resuelto con una acción existente. Este valor no se guardará con el
|
||||||
Continue?
|
resto de la acción. ¿Continuar?'
|
||||||
was_due_on_date: was due on %{date}
|
was_due_on_date: venció el %{date}
|
||||||
users:
|
users:
|
||||||
account_signup: Account signup
|
account_signup: 'Registro de la cuenta'
|
||||||
approve_tos: I approve the Terms of Service
|
approve_tos: Apruebo los Términos del Servicio
|
||||||
auth_change_submit: Change authentication type
|
auth_change_submit: Modifica el tipo de autenticación
|
||||||
auth_type_update_error: 'There was a problem updating your authentication type:
|
auth_type_update_error: 'Hubo un problema actualizando su tipo de autenticación:
|
||||||
%{error_messages}'
|
%{error_messages}'
|
||||||
auth_type_updated: Authentication type updated.
|
auth_type_updated: Tipo autenticador actualizado.
|
||||||
change_auth_type_title: TRACKS::Change authentication type
|
change_auth_type_title: TRACKS::Change tipo de autenticación
|
||||||
change_authentication_type: Change authentication type
|
change_authentication_type: Cambia el tipo de autenticación
|
||||||
change_password_prompt: Enter your new password in the fields below and click
|
change_password_prompt: Introduzca su contraseña nueva dentro de los campos debajo
|
||||||
'Change password' to replace your current password with your new one.
|
y pulse «Cambiar contraseña» para sustituirla con la nueva.
|
||||||
change_password_submit: Change password
|
change_password_submit: Cambiar contraseña
|
||||||
change_password_title: TRACKS::Change password
|
change_password_title: TRACKS::Change password
|
||||||
choose_password: Choose password
|
choose_password: Elija contraseña
|
||||||
confirm_password: Confirm password
|
confirm_password: Conformar contraseña
|
||||||
desired_login: Desired login
|
desired_login: Acceso deseado
|
||||||
destroy_confirmation: 'Warning: this will delete user ''%{login}'', all their
|
destroy_confirmation: 'Aviso: esto eliminará al usuario ''%{login}'', todas sus
|
||||||
actions, contexts, project and notes. Are you sure that you want to continue?'
|
acciones, contextos, proyecto y notas. ¿Está seguro de que desea continuar?'
|
||||||
destroy_error: There was an error deleting the user %{login}
|
destroy_error: Hubo un error al borrar el usuario %{login}
|
||||||
destroy_successful: User %{login} was successfully destroyed
|
destroy_successful: El usuario %{login} fue destruido completamente
|
||||||
destroy_user: Destroy user
|
destroy_user: Destruir usuario
|
||||||
email_address: Email address
|
email_address: Dirección de correo-e
|
||||||
failed_to_delete_user: Failed to delete user %{username}
|
failed_to_delete_user: Error al borrar el usuario %{username}
|
||||||
first_user_heading: 'Welcome to TRACKS. To get started, please create an admin
|
first_user_heading: 'Bienvenido a TRACKS. Para ver como iniciar, cree una cuenta
|
||||||
account:'
|
de admin:'
|
||||||
first_user_title: TRACKS::Sign up as the admin user
|
first_user_title: TRACKS::Sign up as the admin user
|
||||||
identity_url: Identity URL
|
identity_url: Identidad URL
|
||||||
label_auth_type: Authentication type
|
label_auth_type: Tipo de autenticación
|
||||||
manage_users: Manage users
|
manage_users: Manage users
|
||||||
new_password_label: New password
|
new_password_label: New password
|
||||||
new_token_generated: New token successfully generated
|
new_token_generated: New token successfully generated
|
||||||
|
@ -1230,6 +1346,9 @@ es:
|
||||||
total_users_count: You have a total of %{count} users
|
total_users_count: You have a total of %{count} users
|
||||||
user_created: User created.
|
user_created: User created.
|
||||||
you_have_to_reset_your_password: Usted tiene que restablecer su contraseña
|
you_have_to_reset_your_password: Usted tiene que restablecer su contraseña
|
||||||
|
manage_users_title: TRACKS::Gestión de usuarios
|
||||||
|
create_error: La creación de usuario falló, ¿quizás ya tienes una cuenta aquí?
|
||||||
|
tos_error: ¡Tienes que aceptar los términos del servicio para registrarte!
|
||||||
will_paginate:
|
will_paginate:
|
||||||
next_label: Siguiente »
|
next_label: Siguiente »
|
||||||
page_entries_info:
|
page_entries_info:
|
||||||
|
@ -1249,3 +1368,94 @@ es:
|
||||||
rest_help:
|
rest_help:
|
||||||
auth:
|
auth:
|
||||||
title: Autenticación
|
title: Autenticación
|
||||||
|
basic_auth_link_text: Autenticación HTTP básica
|
||||||
|
content: La autenticación se gestiona mediante %{auth_link}. Su nombre de usuario
|
||||||
|
y contraseña de Tracks se utilizan como credenciales de autenticación para
|
||||||
|
la API. Tenga en cuenta que en la autenticación HTTP básica, su contraseña
|
||||||
|
se envía en texto claro. Si necesitas una solución de autenticación más segura,
|
||||||
|
debes configurar tu servidor web para ejecutar Tracks bajo HTTPS.
|
||||||
|
activeresource:
|
||||||
|
ror_link_text: Ruby on Rails
|
||||||
|
title: Consumir la API con ActiveResource
|
||||||
|
activeresource_link_text: ActiveResource
|
||||||
|
wrapper_description: 'Inspirándonos en el contenedor Highrise de %{signals_link},
|
||||||
|
creamos un pequeño contenedor Ruby (que se encuentra en el directorio doc/-)
|
||||||
|
para la interfaz que crea modelos ActiveResource para que juegues con ellos
|
||||||
|
en una sesión IRB:'
|
||||||
|
description: '%{activeresource_link} es un contenedor delgado pero poderoso
|
||||||
|
para los servicios RESTful expuestos por %{ror_link}. Será parte de Rails
|
||||||
|
2.0 pero hasta entonces podrás obtenerlo con %{gem_command}.'
|
||||||
|
signals_link_text: 37 Signals
|
||||||
|
notes:
|
||||||
|
curl_description: Todos los ejemplos utilizan %{curl}.
|
||||||
|
description: 'En la documentación se han aplicado algunas convenciones, las
|
||||||
|
cuales son:'
|
||||||
|
bullet1: '%{id} del recurso %{url} indica que debe reemplazarse con el identificador
|
||||||
|
único del recurso'
|
||||||
|
bullet2: '%{omit} indica que se han omitido partes irrelevantes de los datos
|
||||||
|
de la respuesta para aclarar la instrucción'
|
||||||
|
title: Notas sobre la documentación
|
||||||
|
title: Documentación de la API REST para desarrolladores
|
||||||
|
id: ID
|
||||||
|
curl_link_text: cURL
|
||||||
|
intro:
|
||||||
|
title: Introducción
|
||||||
|
content: Tracks está diseñado para integrarse con scripts, servicios web y aplicaciones
|
||||||
|
de terceros. Esta página sirve como documentación de nuestra API REST.
|
||||||
|
content_2: La API REST de Tracks permite a los desarrolladores integrar Tracks
|
||||||
|
en sus aplicaciones. Permite a las aplicaciones acceder a los datos de Tracks
|
||||||
|
y modificarlos, y se implementa como Vanilla XML sobre HTTP.
|
||||||
|
restful_link_text: RESTful
|
||||||
|
content_3: La API es un servicio %{restful_link}. Todos los datos están disponibles
|
||||||
|
a través de la API como un recurso al que se puede hacer referencia utilizando
|
||||||
|
un identificador único. Responde a varios de los métodos HTTP, concretamente
|
||||||
|
GET, PUT, POST y UPDATE, y todas las respuestas de la API están en un formato
|
||||||
|
XML sencillo codificado como UTF-8.
|
||||||
|
writing:
|
||||||
|
example_todo_response_title: 'La respuesta es de nuevo un %{response_code} con
|
||||||
|
la cabecera %{header} indicando dónde se puede encontrar el nuevo recurso
|
||||||
|
todo. Cambiando las notas de todo, de nuevo usando curl:'
|
||||||
|
title: Escribiendo en la API
|
||||||
|
example_project_response_title: 'La respuesta es un %{response_code} con una
|
||||||
|
cabecera %{header} que indica dónde se puede encontrar el nuevo recurso del
|
||||||
|
proyecto. Ahora podemos añadir una tarea a este proyecto, usando curl:'
|
||||||
|
example_todo_name: Modelar la casa del árbol en SketchUp
|
||||||
|
example_note_text: usar textura de arce
|
||||||
|
example_delete_title: 'Si queremos borrar esa tarea podemos llamar a su identificador
|
||||||
|
único de recurso (la URL) con el método HTTP %{delete}, de nuevo con curl:'
|
||||||
|
example_delete_response_title: La API devuelve un %{response_code} y la tarea
|
||||||
|
se elimina.
|
||||||
|
example_title: 'Creando un nuevo proyecto, usando curl:'
|
||||||
|
description: La API proporciona mecanismos para añadir, actualizar y eliminar
|
||||||
|
recursos utilizando los métodos HTTP %{put}, %{post} y %{delete} en combinación
|
||||||
|
con el contenido.
|
||||||
|
example_project_name: Construir una casa en el árbol para los niños
|
||||||
|
example_note_response_title: 'La respuesta es un %{response_code} con en el
|
||||||
|
cuerpo la representación XML de la tarea actualizada. Proporcionamos un método
|
||||||
|
abreviado para activar o desactivar una tarea sin tener que realizar la actualización
|
||||||
|
con los valores de campo correctos:'
|
||||||
|
retrieve:
|
||||||
|
content: 'Para recuperar datos basta con hacer un HTTP GET sobre un identificador
|
||||||
|
de recurso. Por ejemplo, si desea obtener todos los contextos con %{curl_link}:'
|
||||||
|
single_context: 'Obtener un contexto único:'
|
||||||
|
todos_from_context: 'Obtener las tareas dentro de un contexto:'
|
||||||
|
paths_title: 'Todos los datos están disponibles según las siguientes rutas de
|
||||||
|
recursos:'
|
||||||
|
active_todos: 'Si sólo quieres obtener las tareas activas, añade el parámetro
|
||||||
|
%{active_code} y ponlo en algún valor como este:'
|
||||||
|
title: Recuperar datos de la API
|
||||||
|
projects: También puede aplicar el patrón mostrado anteriormente con proyectos
|
||||||
|
en lugar de contextos.
|
||||||
|
limit: 'Para los recursos de tareas pendientes (tareas, tickler, hecho, oculto
|
||||||
|
y calendario), puede limitar el campo devuelto a %{fields} agregando el parámetro
|
||||||
|
%{limit_parameter} y configurándolo en %{set_to}. Por ejemplo:'
|
||||||
|
response:
|
||||||
|
title: Tratamiento de la respuesta y estado de la respuesta
|
||||||
|
description: Todas las operaciones exitosas responden con un código de estado
|
||||||
|
de %{response_200} o %{response_201} dependiendo de la operación. A veces
|
||||||
|
una lista, digamos %{example_call} no tendrá ningún elemento, devolverá una
|
||||||
|
lista vacía.
|
||||||
|
xml_description: 'El XML para las respuestas de la lista vacía tiene este aspecto,
|
||||||
|
de nuevo con curl:'
|
||||||
|
auth_type:
|
||||||
|
database: Base de datos
|
||||||
|
|
|
@ -132,7 +132,7 @@ fi:
|
||||||
not_available_abbr: ei
|
not_available_abbr: ei
|
||||||
note:
|
note:
|
||||||
one: 1 muistiinpano
|
one: 1 muistiinpano
|
||||||
other: "%{count} muistiinpanoa"
|
other: '%{count} muistiinpanoa'
|
||||||
zero: ei muistiinpanoja
|
zero: ei muistiinpanoja
|
||||||
notes: Muistiinpanot
|
notes: Muistiinpanot
|
||||||
numbered_step: Askel %{number}
|
numbered_step: Askel %{number}
|
||||||
|
@ -455,12 +455,16 @@ fi:
|
||||||
määrittämiseksi näissä järjestyksissä)
|
määrittämiseksi näissä järjestyksissä)
|
||||||
project: Projekti, johon toimenpide liitetään
|
project: Projekti, johon toimenpide liitetään
|
||||||
context: Konteksti, johon toimenpide liitetään
|
context: Konteksti, johon toimenpide liitetään
|
||||||
|
tickler_date: Toimenpiteen näyttöajankohta (2 numeroa pelkän päivän määrittämiseksi,
|
||||||
|
4 numeroa kuukauden ja päivän tai 6 numeroa vuoden, kuukauden ja päivän
|
||||||
|
määrittämiseksi näissä järjestyksissä)
|
||||||
fields_instruction: Kaikki merkinnät ovat valinnaisia. Tekstiä ensimmäiseen
|
fields_instruction: Kaikki merkinnät ovat valinnaisia. Tekstiä ensimmäiseen
|
||||||
merkintään asti käytetään toimenpiteen kuvauksena
|
merkintään asti käytetään toimenpiteen kuvauksena
|
||||||
meaning_title: Tarkoitus
|
meaning_title: Tarkoitus
|
||||||
symbol_title: Merkintä
|
symbol_title: Merkintä
|
||||||
fields_title: 'Kentät:'
|
fields_title: 'Kentät:'
|
||||||
description: 'Molemmilla ylläolevilla tavoilla voidaan käyttää seuraavaa muotoilua:'
|
description: 'Molemmilla ylläolevilla tavoilla voidaan käyttää viestin otsikossa
|
||||||
|
seuraavaa muotoilua tietojen lisäämiseen:'
|
||||||
message_gateway:
|
message_gateway:
|
||||||
instructions:
|
instructions:
|
||||||
'3': Lähetä sähköposti juuri asettamaasi osoitteeseen!
|
'3': Lähetä sähköposti juuri asettamaasi osoitteeseen!
|
||||||
|
@ -1264,7 +1268,7 @@ fi:
|
||||||
tickler_items_due:
|
tickler_items_due:
|
||||||
one: Yksi muistilistan merkintä on nyt ajankohtainen – päivitä sivu nähdäksesi
|
one: Yksi muistilistan merkintä on nyt ajankohtainen – päivitä sivu nähdäksesi
|
||||||
sen.
|
sen.
|
||||||
other: '{%count} muistilistan merkintää on nyt ajankohtaisia – päivitä sivu
|
other: '%{count} muistilistan merkintää on nyt ajankohtaisia – päivitä sivu
|
||||||
nähdäksesi ne.'
|
nähdäksesi ne.'
|
||||||
to_tickler: muistilistaan
|
to_tickler: muistilistaan
|
||||||
unable_to_add_dependency: Riippuvuuden lisääminen epäonnistui
|
unable_to_add_dependency: Riippuvuuden lisääminen epäonnistui
|
||||||
|
@ -1327,6 +1331,9 @@ fi:
|
||||||
total_users_count: Sinulla on yhteensä %{count} käyttäjää
|
total_users_count: Sinulla on yhteensä %{count} käyttäjää
|
||||||
user_created: Käyttäjä luotu.
|
user_created: Käyttäjä luotu.
|
||||||
you_have_to_reset_your_password: Palauta salasanasi
|
you_have_to_reset_your_password: Palauta salasanasi
|
||||||
|
create_error: Tunnuksen luominen epäonnistui, ehkä sinulla on jo käyttäjätunnus
|
||||||
|
täällä?
|
||||||
|
tos_error: Sinun täytyy hyväksyä käyttöehdot rekisteröityäksesi!
|
||||||
will_paginate:
|
will_paginate:
|
||||||
next_label: Seuraava →
|
next_label: Seuraava →
|
||||||
page_entries_info:
|
page_entries_info:
|
||||||
|
|
|
@ -921,7 +921,7 @@ fr:
|
||||||
delete: Supprimer
|
delete: Supprimer
|
||||||
delete_action: Supprimer action
|
delete_action: Supprimer action
|
||||||
delete_recurring_action_confirm: Êtes-vous sûr·e de vouloir supprimer l'action
|
delete_recurring_action_confirm: Êtes-vous sûr·e de vouloir supprimer l'action
|
||||||
récurrente « % {description} » ?
|
récurrente « %{description} » ?
|
||||||
delete_recurring_action_title: Supprimer l'action récurrente
|
delete_recurring_action_title: Supprimer l'action récurrente
|
||||||
deleted_success: Action supprimée avec succès.
|
deleted_success: Action supprimée avec succès.
|
||||||
depends_on: Dépend de
|
depends_on: Dépend de
|
||||||
|
|
|
@ -1 +1,5 @@
|
||||||
{}
|
nb_NO:
|
||||||
|
activerecord:
|
||||||
|
attributes:
|
||||||
|
note:
|
||||||
|
created_at: Opprettet
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
---
|
|
||||||
nl:
|
nl:
|
||||||
activerecord:
|
activerecord:
|
||||||
attributes:
|
attributes:
|
||||||
|
@ -70,8 +69,8 @@ nl:
|
||||||
odd: moet oneven zijn
|
odd: moet oneven zijn
|
||||||
record_invalid: 'Validatie mislukt: %{errors}'
|
record_invalid: 'Validatie mislukt: %{errors}'
|
||||||
restrict_dependent_destroy:
|
restrict_dependent_destroy:
|
||||||
many: Kan record niet verwijderen omdat afhankelijke %{record} bestaan
|
|
||||||
one: Kan record niet verwijderen omdat een afhankelijk %{record} bestaat
|
one: Kan record niet verwijderen omdat een afhankelijk %{record} bestaat
|
||||||
|
many: Kan record niet verwijderen omdat afhankelijke %{record} bestaan
|
||||||
taken: is al gepakt
|
taken: is al gepakt
|
||||||
too_long: is te lang (maximum is %{count} karakters)
|
too_long: is te lang (maximum is %{count} karakters)
|
||||||
too_short: is te kort (minimum is %{count} karakters)
|
too_short: is te kort (minimum is %{count} karakters)
|
||||||
|
@ -87,7 +86,7 @@ nl:
|
||||||
body: Er waren problemen met de volgende velden
|
body: Er waren problemen met de volgende velden
|
||||||
header:
|
header:
|
||||||
one: 1 fout voorkomt het kunnen bewaren van deze %{model}
|
one: 1 fout voorkomt het kunnen bewaren van deze %{model}
|
||||||
other: "%{count} fouten voorkomen dat dit %{model} bewaard kan worden"
|
other: '%{count} fouten voorkomen dat dit %{model} bewaard kan worden'
|
||||||
common:
|
common:
|
||||||
action: Actie
|
action: Actie
|
||||||
actions: Acties
|
actions: Acties
|
||||||
|
@ -145,11 +144,13 @@ nl:
|
||||||
show_all: Toon alle
|
show_all: Toon alle
|
||||||
sort:
|
sort:
|
||||||
alphabetically: Alfabetisch
|
alphabetically: Alfabetisch
|
||||||
alphabetically_confirm: Weet u zeker dat u deze projecten alfabetisch wilt sorteren? Dat zal de huidige sorteervolgorde aanpassen.
|
alphabetically_confirm: Weet u zeker dat u deze projecten alfabetisch wilt sorteren?
|
||||||
|
Dat zal de huidige sorteervolgorde aanpassen.
|
||||||
alphabetically_title: Sorteer projecten alfabetisch
|
alphabetically_title: Sorteer projecten alfabetisch
|
||||||
by_task_count: Op aantal acties
|
by_task_count: Op aantal acties
|
||||||
by_task_count_title: Sorteer op aantal acties
|
by_task_count_title: Sorteer op aantal acties
|
||||||
by_task_count_title_confirm: Weet u zeker dat u deze op aantal acties wilt sorteren? Dat zal de huidige sorteervolgorde aanpassen.
|
by_task_count_title_confirm: Weet u zeker dat u deze op aantal acties wilt sorteren?
|
||||||
|
Dat zal de huidige sorteervolgorde aanpassen.
|
||||||
sort: Sorteer
|
sort: Sorteer
|
||||||
third: Derde
|
third: Derde
|
||||||
todo: actie
|
todo: actie
|
||||||
|
@ -167,7 +168,8 @@ nl:
|
||||||
context_name: Context naam
|
context_name: Context naam
|
||||||
context_state: Status
|
context_state: Status
|
||||||
delete_context: Verwijder context
|
delete_context: Verwijder context
|
||||||
delete_context_confirmation: Weet u zeker dat u de context '%{name}' wilt verwijderen? Merk op dat dit ook alle (herhalende) acties in deze context zal verwijderen!
|
delete_context_confirmation: Weet u zeker dat u de context '%{name}' wilt verwijderen?
|
||||||
|
Merk op dat dit ook alle (herhalende) acties in deze context zal verwijderen!
|
||||||
delete_context_title: Verwijder context
|
delete_context_title: Verwijder context
|
||||||
edit_context: Bewerk context
|
edit_context: Bewerk context
|
||||||
hidden_contexts: Verborgen contexten
|
hidden_contexts: Verborgen contexten
|
||||||
|
@ -279,16 +281,16 @@ nl:
|
||||||
other: over %{count} jaren
|
other: over %{count} jaren
|
||||||
x_days:
|
x_days:
|
||||||
one: 1 dag
|
one: 1 dag
|
||||||
other: "%{count} dagen"
|
other: '%{count} dagen'
|
||||||
x_minutes:
|
x_minutes:
|
||||||
one: 1 minuut
|
one: 1 minuut
|
||||||
other: "%{count} minuten"
|
other: '%{count} minuten'
|
||||||
x_months:
|
x_months:
|
||||||
one: 1 maand
|
one: 1 maand
|
||||||
other: "%{count} maanden"
|
other: '%{count} maanden'
|
||||||
x_seconds:
|
x_seconds:
|
||||||
one: 1 seconde
|
one: 1 seconde
|
||||||
other: "%{count} seconden"
|
other: '%{count} seconden'
|
||||||
prompts:
|
prompts:
|
||||||
day: Dag
|
day: Dag
|
||||||
hour: Uur
|
hour: Uur
|
||||||
|
@ -321,7 +323,8 @@ nl:
|
||||||
too_long: is te lang (maximum is %{count} karakters)
|
too_long: is te lang (maximum is %{count} karakters)
|
||||||
too_short: is te kort (minimum is %{count} karakters)
|
too_short: is te kort (minimum is %{count} karakters)
|
||||||
wrong_length: is de verkeerde lengte (zou %{count} karakters moeten zijn)
|
wrong_length: is de verkeerde lengte (zou %{count} karakters moeten zijn)
|
||||||
user_unauthorized: '401 Unauthorized: Alleen administratieve gebruikers mogen deze functie gebruiken.'
|
user_unauthorized: '401 Unauthorized: Alleen administratieve gebruikers mogen
|
||||||
|
deze functie gebruiken.'
|
||||||
feedlist:
|
feedlist:
|
||||||
actions_completed_last_week: Acties afgerond in de afgelopen 7 dagen
|
actions_completed_last_week: Acties afgerond in de afgelopen 7 dagen
|
||||||
actions_due_next_week: Acties die binnen 7 dagen afgerond moeten
|
actions_due_next_week: Acties die binnen 7 dagen afgerond moeten
|
||||||
|
@ -334,14 +337,17 @@ nl:
|
||||||
choose_context: Kies de context waar je een feed van wilt
|
choose_context: Kies de context waar je een feed van wilt
|
||||||
choose_project: Kies het project waar je een feed van wilt
|
choose_project: Kies het project waar je een feed van wilt
|
||||||
context_centric_actions: Feeds voor onafgeronde acties in een specifieke context
|
context_centric_actions: Feeds voor onafgeronde acties in een specifieke context
|
||||||
context_needed: Er moet eerst ten minste één context zijn voor je een feed kan opvragen
|
context_needed: Er moet eerst ten minste één context zijn voor je een feed kan
|
||||||
|
opvragen
|
||||||
ical_feed: iCal feed
|
ical_feed: iCal feed
|
||||||
last_fixed_number: Laatste %{number} acties
|
last_fixed_number: Laatste %{number} acties
|
||||||
legend: Legenda
|
legend: Legenda
|
||||||
notice_incomplete_only: 'Merk op: alle feeds laten alleen acties zien die niet afgerond zijn, tenzij anders vermeld.'
|
notice_incomplete_only: 'Merk op: alle feeds laten alleen acties zien die niet
|
||||||
|
afgerond zijn, tenzij anders vermeld.'
|
||||||
plain_text_feed: Reguliere tekst feed
|
plain_text_feed: Reguliere tekst feed
|
||||||
project_centric: Feeds voor onafgeronde acties in een specifiek project
|
project_centric: Feeds voor onafgeronde acties in een specifiek project
|
||||||
project_needed: Er moet ten minste één project zijn voor een feed opgevraagd kan worden
|
project_needed: Er moet ten minste één project zijn voor een feed opgevraagd kan
|
||||||
|
worden
|
||||||
projects_and_actions: Actieve projecten met hun acties
|
projects_and_actions: Actieve projecten met hun acties
|
||||||
rss_feed: RSS Feed
|
rss_feed: RSS Feed
|
||||||
select_feed_for_context: Kies de feed voor deze context
|
select_feed_for_context: Kies de feed voor deze context
|
||||||
|
@ -359,52 +365,83 @@ nl:
|
||||||
integrations:
|
integrations:
|
||||||
sections:
|
sections:
|
||||||
automatic_email: Email jezelf automatisch de acties met een aflopende deadline
|
automatic_email: Email jezelf automatisch de acties met een aflopende deadline
|
||||||
message_gateway: Integreer Tracks met een email server om een actie via email naar Tracks te sturen
|
message_gateway: Integreer Tracks met een email server om een actie via email
|
||||||
|
naar Tracks te sturen
|
||||||
mailgun: Send emails to Tracks with Mailgun
|
mailgun: Send emails to Tracks with Mailgun
|
||||||
email_rich: Rich Todo Message email format
|
email_rich: Rich Todo Message email format
|
||||||
opensearch_description: Zoek in Tracks
|
opensearch_description: Zoek in Tracks
|
||||||
title: Integratie
|
title: Integratie
|
||||||
intro: "Tracks kan met een aantal tools worden geïntegreerd... Alles om je te helpen om dingen gedaan te krijgen! Deze pagina heeft informatie over het tot stand brengen van sommige integratievormen. Deze voorbeelden zijn niet altijd voor alle platformen van toepassing en sommige voorbeelden vragen meer technische kennis dan anderen Zie ook %{documentation_link}."
|
intro: "Tracks kan met een aantal tools worden geïntegreerd... Alles om je te
|
||||||
developer_documentation_link: "de documentatie voor ontwikkelaars met Tracks' REST API"
|
helpen om dingen gedaan te krijgen! Deze pagina heeft informatie over het tot
|
||||||
|
stand brengen van sommige integratievormen. Deze voorbeelden zijn niet altijd
|
||||||
|
voor alle platformen van toepassing en sommige voorbeelden vragen meer technische
|
||||||
|
kennis dan anderen Zie ook %{documentation_link}."
|
||||||
|
developer_documentation_link: "de documentatie voor ontwikkelaars met Tracks'
|
||||||
|
REST API"
|
||||||
contents_header: "Inhoud:"
|
contents_header: "Inhoud:"
|
||||||
add_your_own: Heb je een tip om hier toe te voegen? %{tell_us_link} en misschien voegen we jouw tip toe op deze pagina in een toekomstige versie van Tracks.
|
add_your_own: Heb je een tip om hier toe te voegen? %{tell_us_link} en misschien
|
||||||
|
voegen we jouw tip toe op deze pagina in een toekomstige versie van Tracks.
|
||||||
tell_us_link_text: Vertel ons er over in onze issue queue
|
tell_us_link_text: Vertel ons er over in onze issue queue
|
||||||
cron_1: Als je de volgende regel toevoegd aan jouw crontab, dat ontvang je een e-mail op elke dag rond 05:00 met een lijst met acties waarvan de deadline afloopt binnen de komende 7 dagen.
|
cron_1: Als je de volgende regel toevoegd aan jouw crontab, dat ontvang je een
|
||||||
cron_2: "Uiteraard kan je ook een andere %{feeds_link} – bijvoorbeeld een email met een lijst van acties voor een specifiek project naar een groep collega's die werken aan dat project?"
|
e-mail op elke dag rond 05:00 met een lijst met acties waarvan de deadline afloopt
|
||||||
|
binnen de komende 7 dagen.
|
||||||
|
cron_2: "Uiteraard kan je ook een andere %{feeds_link} – bijvoorbeeld een email
|
||||||
|
met een lijst van acties voor een specifiek project naar een groep collega's
|
||||||
|
die werken aan dat project?"
|
||||||
cron_email_subject: Tracks actions due in the next 7 days
|
cron_email_subject: Tracks actions due in the next 7 days
|
||||||
feeds_link_text: text feed gebruiken die Tracks biedt
|
feeds_link_text: text feed gebruiken die Tracks biedt
|
||||||
message_gateway:
|
message_gateway:
|
||||||
description: 'Als Tracks draait op dezelfde server als jouw mailserver, dan kan je de geïntegreerde mail handler gebruiken van Tracks. Om dit in te stellen:'
|
description: 'Als Tracks draait op dezelfde server als jouw mailserver, dan
|
||||||
rich_api_tip: 'Je kan ook de Rich Todo API gebruiken om acties te maken zoals "do laundry @ Home" of "Call Bill > project X". Het onderwerp van het bericht zal de bijschrijving van de actie vullen, de context, en het project, terwijl de body van het bericht de notities van de actie zal vullen.'
|
kan je de geïntegreerde mail handler gebruiken van Tracks. Om dit in te stellen:'
|
||||||
configuration: "Het kan nodig zijn om jouw %{site_yml} te configureren om de message gateway te laten kijken naar het %{to_name} veld of het %{from_name} veld om de Tracks-gebruiker op te zoeken met het emailadres uit dat veld."
|
rich_api_tip: 'Je kan ook de Rich Todo API gebruiken om acties te maken zoals
|
||||||
one_user_configuration: "Je kan ook alle email naar een specifieke Tracks gebruiker sturen. Stel mail_dispatch in site.yml in op %{single_user_value} en geeft de login van de gebruiker door: %{code}"
|
"do laundry @ Home" of "Call Bill > project X". Het onderwerp van het bericht
|
||||||
|
zal de bijschrijving van de actie vullen, de context, en het project, terwijl
|
||||||
|
de body van het bericht de notities van de actie zal vullen.'
|
||||||
|
configuration: "Het kan nodig zijn om jouw %{site_yml} te configureren om de
|
||||||
|
message gateway te laten kijken naar het %{to_name} veld of het %{from_name}
|
||||||
|
veld om de Tracks-gebruiker op te zoeken met het emailadres uit dat veld."
|
||||||
|
one_user_configuration: "Je kan ook alle email naar een specifieke Tracks gebruiker
|
||||||
|
sturen. Stel mail_dispatch in site.yml in op %{single_user_value} en geeft
|
||||||
|
de login van de gebruiker door: %{code}"
|
||||||
instructions:
|
instructions:
|
||||||
'1': 'Ga naar %{preferences_link} en stel in "%{sms_email_name}" en "%{sms_context_name}" voor acties die verzonden zijn via email (die bijv. komen via een SMS message)'
|
'1': 'Ga naar %{preferences_link} en stel in "%{sms_email_name}" en "%{sms_context_name}"
|
||||||
'2': In sendmail/qmail/postfix/whatever, stel een email address alias in om berichten door te sturen naar %{command}
|
voor acties die verzonden zijn via email (die bijv. komen via een SMS message)'
|
||||||
|
'2': In sendmail/qmail/postfix/whatever, stel een email address alias in om
|
||||||
|
berichten door te sturen naar %{command}
|
||||||
'3': Verstuur een email naar het net geconfigureerde e-mail adres!
|
'3': Verstuur een email naar het net geconfigureerde e-mail adres!
|
||||||
mailgun:
|
mailgun:
|
||||||
description: If you want to email tasks to Tracks, but cannot run a mailserver on the same host, you could use the %{mailgun_link} support built in to Tracks.
|
description: If you want to email tasks to Tracks, but cannot run a mailserver
|
||||||
conditions: For this to work your Tracks server will need to be reachable from the internet, so that Mailgun can POST data to it.
|
on the same host, you could use the %{mailgun_link} support built in to Tracks.
|
||||||
gateway_instructions: All the comments about the email format from the section above apply to the Mailgun handling, as the data is processed the same way
|
conditions: For this to work your Tracks server will need to be reachable from
|
||||||
|
the internet, so that Mailgun can POST data to it.
|
||||||
|
gateway_instructions: All the comments about the email format from the section
|
||||||
|
above apply to the Mailgun handling, as the data is processed the same way
|
||||||
instructions:
|
instructions:
|
||||||
'1': Go to %{mailgun_link} and register for a free account.
|
'1': Go to %{mailgun_link} and register for a free account.
|
||||||
'2': "Go to 'Routes' in the Mailgun control panel, and add a new route:"
|
'2': "Go to 'Routes' in the Mailgun control panel, and add a new route:"
|
||||||
2a: "'Filter expression' should be set to 'catch_all()'"
|
2a: "'Filter expression' should be set to 'catch_all()'"
|
||||||
2b: "'Action' should be 'forward(\"http://mytracksserver.example.com/mailgun/mime\")'"
|
2b: "'Action' should be 'forward(\"http://mytracksserver.example.com/mailgun/mime\"\
|
||||||
'3': 'Go to %{preferences_link} and enter your incoming Mailgun email address (e.g. tracks@user.mailgun.com) in the "%{sms_email_name}" box.'
|
)'"
|
||||||
'4': 'Select a default context for emails to be put in with "%{sms_context_name"'
|
'3': 'Go to %{preferences_link} and enter your incoming Mailgun email address
|
||||||
|
(e.g. tracks@user.mailgun.com) in the "%{sms_email_name}" box.'
|
||||||
|
'4': 'Select a default context for emails to be put in with "%{sms_context_name}"'
|
||||||
'5': "Add your Mailgun API key (not the Public API key) to the Tracks 'site.yml'"
|
'5': "Add your Mailgun API key (not the Public API key) to the Tracks 'site.yml'"
|
||||||
'6': "Update the mailmap in 'site.yml' to define which senders can send emails to which incoming addresses. For example, to send emails from your work and home email accounts to your tracks Mailgun route, set it up like this: %{code}"
|
'6': "Update the mailmap in 'site.yml' to define which senders can send emails
|
||||||
|
to which incoming addresses. For example, to send emails from your work
|
||||||
|
and home email accounts to your tracks Mailgun route, set it up like this:
|
||||||
|
%{code}"
|
||||||
email_rich:
|
email_rich:
|
||||||
description: "For both of the above methods, the follow format can be used:"
|
description: "For both of the above methods, the follow format can be used:"
|
||||||
fields_title: "The fields are:"
|
fields_title: "The fields are:"
|
||||||
symbol_title: Symbol
|
symbol_title: Symbol
|
||||||
meaning_title: Meaning
|
meaning_title: Meaning
|
||||||
fields_instruction: All symbols are optional, and text up to the first symbol (or end of string) is used as the description of the todo
|
fields_instruction: All symbols are optional, and text up to the first symbol
|
||||||
|
(or end of string) is used as the description of the todo
|
||||||
field_descriptions:
|
field_descriptions:
|
||||||
context: The context to place the Todo in
|
context: The context to place the Todo in
|
||||||
project: The project to place the Todo in
|
project: The project to place the Todo in
|
||||||
due_date: The due date for the Todo (may be 2 digits for day, 4 digits for month-day, or 6 digits for year-month-day)
|
due_date: The due date for the Todo (may be 2 digits for day, 4 digits for
|
||||||
|
month-day, or 6 digits for year-month-day)
|
||||||
tag: A tag to apply to the Todo – may be used multiple times
|
tag: A tag to apply to the Todo – may be used multiple times
|
||||||
star: Flag to star the Todo
|
star: Flag to star the Todo
|
||||||
example_names:
|
example_names:
|
||||||
|
@ -416,11 +453,14 @@ nl:
|
||||||
'2': tag2
|
'2': tag2
|
||||||
help:
|
help:
|
||||||
title: Help
|
title: Help
|
||||||
usage: 'You can find information on the usage in the %{manual_link} in the project GitHub wiki.'
|
usage: 'You can find information on the usage in the %{manual_link} in the project
|
||||||
|
GitHub wiki.'
|
||||||
manual_link_text: User manual
|
manual_link_text: User manual
|
||||||
bugs: 'If you encounter a bug or have a feature request, please report it in the %{issue_link}.'
|
bugs: 'If you encounter a bug or have a feature request, please report it in the
|
||||||
|
%{issue_link}.'
|
||||||
issue_link_text: issue queue
|
issue_link_text: issue queue
|
||||||
contribute: 'We gladly welcome all contributions to Tracks. Check the %{contribute_link} for further information. You can also come discuss with the community:'
|
contribute: 'We gladly welcome all contributions to Tracks. Check the %{contribute_link}
|
||||||
|
for further information. You can also come discuss with the community:'
|
||||||
contribute_link_text: project website
|
contribute_link_text: project website
|
||||||
mailing_list_link_text: Mailing list
|
mailing_list_link_text: Mailing list
|
||||||
irc_bullet: '%{irc_link} (also available in %{matrix_link})'
|
irc_bullet: '%{irc_link} (also available in %{matrix_link})'
|
||||||
|
@ -495,14 +535,16 @@ nl:
|
||||||
cas_login: CAS Inloggen
|
cas_login: CAS Inloggen
|
||||||
cas_no_user_found: Hallo,%{username}! Je hebt nog geen account op Tracks.
|
cas_no_user_found: Hallo,%{username}! Je hebt nog geen account op Tracks.
|
||||||
cas_signup_link: Aanvragen account
|
cas_signup_link: Aanvragen account
|
||||||
cas_username_not_found: Sorry, geen gebruiker met die CAS gebruikersnaam bestaat (%{username})
|
cas_username_not_found: Sorry, geen gebruiker met die CAS gebruikersnaam bestaat
|
||||||
|
(%{username})
|
||||||
log_in_again: opnieuw in te loggen.
|
log_in_again: opnieuw in te loggen.
|
||||||
logged_out: Je bent afgemeld bij Tracks.
|
logged_out: Je bent afgemeld bij Tracks.
|
||||||
login_cas: Ga naar het CAS
|
login_cas: Ga naar het CAS
|
||||||
login_standard: Ga terug naar de standaard login
|
login_standard: Ga terug naar de standaard login
|
||||||
login_with_openid: inloggen met een OpenID
|
login_with_openid: inloggen met een OpenID
|
||||||
mobile_use_openid: "... if inloggen met een OpenID"
|
mobile_use_openid: "... if inloggen met een OpenID"
|
||||||
openid_identity_url_not_found: Sorry, geen gebruiker met die identiteit URL bestaat (%{identity_url})
|
openid_identity_url_not_found: Sorry, geen gebruiker met die identiteit URL bestaat
|
||||||
|
(%{identity_url})
|
||||||
option_separator: of,
|
option_separator: of,
|
||||||
please_login: Log in om Tracks te gebruiken
|
please_login: Log in om Tracks te gebruiken
|
||||||
session_time_out: Sessie is verlopen. Gelieve %{link}
|
session_time_out: Sessie is verlopen. Gelieve %{link}
|
||||||
|
@ -530,8 +572,10 @@ nl:
|
||||||
todo:
|
todo:
|
||||||
error_date_must_be_future: moet een datum in de toekomst zijn
|
error_date_must_be_future: moet een datum in de toekomst zijn
|
||||||
user:
|
user:
|
||||||
error_context_not_associated: Context %{context} niet geassocieerd met gebruikers %{user}.
|
error_context_not_associated: Context %{context} niet geassocieerd met gebruikers
|
||||||
error_project_not_associated: Project %{project} niet geassocieerd met gebruikers %{user}.
|
%{user}.
|
||||||
|
error_project_not_associated: Project %{project} niet geassocieerd met gebruikers
|
||||||
|
%{user}.
|
||||||
notes:
|
notes:
|
||||||
delete_confirmation: Weet u zeker dat u de notitie '%{id}' wilt verwijderen?
|
delete_confirmation: Weet u zeker dat u de notitie '%{id}' wilt verwijderen?
|
||||||
delete_item_title: Verwijder item
|
delete_item_title: Verwijder item
|
||||||
|
@ -540,7 +584,8 @@ nl:
|
||||||
deleted_note: Verwijder notitie '%{id}'
|
deleted_note: Verwijder notitie '%{id}'
|
||||||
edit_item_title: Item bewerken
|
edit_item_title: Item bewerken
|
||||||
in_project: 'In:'
|
in_project: 'In:'
|
||||||
no_notes_available: 'Momenteel zijn er geen notities: voeg notities toe aan projecten vanaf de individuele project pagina''s.'
|
no_notes_available: 'Momenteel zijn er geen notities: voeg notities toe aan projecten
|
||||||
|
vanaf de individuele project pagina''s.'
|
||||||
note_header: Notitie %{id}
|
note_header: Notitie %{id}
|
||||||
note_link_title: Toon notitie %{id}
|
note_link_title: Toon notitie %{id}
|
||||||
note_location_link: 'In:'
|
note_location_link: 'In:'
|
||||||
|
@ -551,17 +596,17 @@ nl:
|
||||||
format:
|
format:
|
||||||
delimiter: "."
|
delimiter: "."
|
||||||
format: "%u %n"
|
format: "%u %n"
|
||||||
precision: 2
|
precision: '2'
|
||||||
separator: ","
|
separator: ","
|
||||||
significant: false
|
significant: 'False'
|
||||||
strip_insignificant_zeros: false
|
strip_insignificant_zeros: 'False'
|
||||||
unit: "€"
|
unit: "€"
|
||||||
format:
|
format:
|
||||||
delimiter: "."
|
delimiter: "."
|
||||||
precision: 3
|
precision: '3'
|
||||||
separator: ","
|
separator: ","
|
||||||
significant: false
|
significant: 'False'
|
||||||
strip_insignificant_zeros: false
|
strip_insignificant_zeros: 'False'
|
||||||
human:
|
human:
|
||||||
decimal_units:
|
decimal_units:
|
||||||
format: "%n %u"
|
format: "%n %u"
|
||||||
|
@ -574,9 +619,9 @@ nl:
|
||||||
unit: "."
|
unit: "."
|
||||||
format:
|
format:
|
||||||
delimiter: "."
|
delimiter: "."
|
||||||
precision: 1
|
precision: '1'
|
||||||
significant: true
|
significant: 'True'
|
||||||
strip_insignificant_zeros: true
|
strip_insignificant_zeros: 'True'
|
||||||
storage_units:
|
storage_units:
|
||||||
format: "%n %u"
|
format: "%n %u"
|
||||||
units:
|
units:
|
||||||
|
@ -602,14 +647,18 @@ nl:
|
||||||
current_authentication_type: Uw authenticatietype is %{auth_type}
|
current_authentication_type: Uw authenticatietype is %{auth_type}
|
||||||
edit_preferences: Voorkeuren bewerken
|
edit_preferences: Voorkeuren bewerken
|
||||||
generate_new_token: Genereer een nieuwe token
|
generate_new_token: Genereer een nieuwe token
|
||||||
generate_new_token_confirm: Weet u dit zeker? Het genereren van een nieuw token zal de bestaande te vervangen en dit zal het extern gebruiken van de oude token laten mislukken.
|
generate_new_token_confirm: Weet u dit zeker? Het genereren van een nieuw token
|
||||||
|
zal de bestaande te vervangen en dit zal het extern gebruiken van de oude token
|
||||||
|
laten mislukken.
|
||||||
is_false: Nee
|
is_false: Nee
|
||||||
is_true: Ja
|
is_true: Ja
|
||||||
open_id_url: Uw OpenID URL is
|
open_id_url: Uw OpenID URL is
|
||||||
page_title: 'TRACKS:: Voorkeuren'
|
page_title: 'TRACKS:: Voorkeuren'
|
||||||
page_title_edit: 'TRACKS:: Voorkeuren bewerken'
|
page_title_edit: 'TRACKS:: Voorkeuren bewerken'
|
||||||
password_changed: Je wachtwoord is gewijzigd, meld je opnieuw aan.
|
password_changed: Je wachtwoord is gewijzigd, meld je opnieuw aan.
|
||||||
remove_introduction: You can remove your user account here. Note that this is irreversible and will remove all your data! After removal you will be logged out.
|
remove_introduction: You can remove your user account here. Note that this is
|
||||||
|
irreversible and will remove all your data! After removal you will be logged
|
||||||
|
out.
|
||||||
show_number_completed: Toon %{number} voltooide items
|
show_number_completed: Toon %{number} voltooide items
|
||||||
sms_context_none: Geen
|
sms_context_none: Geen
|
||||||
staleness_starts_after: Markeren openstaande acties begint na %{days} dagen
|
staleness_starts_after: Markeren openstaande acties begint na %{days} dagen
|
||||||
|
@ -629,7 +678,8 @@ nl:
|
||||||
add_note: Een notitie toevoegen
|
add_note: Een notitie toevoegen
|
||||||
add_note_submit: Notitie toevoegen
|
add_note_submit: Notitie toevoegen
|
||||||
add_project: Voeg project toe
|
add_project: Voeg project toe
|
||||||
all_completed_tasks_title: TRACKS::Overzicht van all afgeronde acties in project '%{project_name}'
|
all_completed_tasks_title: TRACKS::Overzicht van all afgeronde acties in project
|
||||||
|
'%{project_name}'
|
||||||
completed_actions: Completed actions
|
completed_actions: Completed actions
|
||||||
completed_actions_empty: Completed actions empty
|
completed_actions_empty: Completed actions empty
|
||||||
completed_projects: Voltooide projecten
|
completed_projects: Voltooide projecten
|
||||||
|
@ -641,7 +691,8 @@ nl:
|
||||||
deferred_actions: Deferred actions
|
deferred_actions: Deferred actions
|
||||||
deferred_actions_empty: Deferred actions empty
|
deferred_actions_empty: Deferred actions empty
|
||||||
delete_project: Project verwijderen
|
delete_project: Project verwijderen
|
||||||
delete_project_confirmation: Weet u zeker dat u wilt het project '%{name} wilt verwijderen?
|
delete_project_confirmation: Weet u zeker dat u wilt het project '%{name} wilt
|
||||||
|
verwijderen?
|
||||||
delete_project_title: Verwijder het project
|
delete_project_title: Verwijder het project
|
||||||
edit_project_settings: Bewerk project instellingen
|
edit_project_settings: Bewerk project instellingen
|
||||||
edit_project_title: Bewerk project
|
edit_project_title: Bewerk project
|
||||||
|
@ -749,11 +800,15 @@ nl:
|
||||||
action_selection_title: 'TRACKS:: Actie selectie'
|
action_selection_title: 'TRACKS:: Actie selectie'
|
||||||
actions: Acties
|
actions: Acties
|
||||||
actions_30days_title: Acties in de afgelopen 30 dagen
|
actions_30days_title: Acties in de afgelopen 30 dagen
|
||||||
actions_actions_avg_created_30days: In de afgelopen 30 dagen heeft u gemiddeld %{count} acties gemaakt
|
actions_actions_avg_created_30days: In de afgelopen 30 dagen heeft u gemiddeld
|
||||||
|
%{count} acties gemaakt
|
||||||
actions_avg_completed: en voltooide een gemiddelde van %{count} acties per maand.
|
actions_avg_completed: en voltooide een gemiddelde van %{count} acties per maand.
|
||||||
actions_avg_completed_30days: en voltooide een gemiddelde van %{count} acties per dag.
|
actions_avg_completed_30days: en voltooide een gemiddelde van %{count} acties
|
||||||
actions_avg_completion_time: Van al uw afgeronde acties, de gemiddelde tijd dat dit in beslag nam is %{count} dagen.
|
per dag.
|
||||||
actions_avg_created: In de afgelopen 12 maanden heeft u gemiddeld%{count} acties aangemaakt
|
actions_avg_completion_time: Van al uw afgeronde acties, de gemiddelde tijd dat
|
||||||
|
dit in beslag nam is %{count} dagen.
|
||||||
|
actions_avg_created: In de afgelopen 12 maanden heeft u gemiddeld%{count} acties
|
||||||
|
aangemaakt
|
||||||
actions_day_of_week_legend:
|
actions_day_of_week_legend:
|
||||||
day_of_week: Dag van de week
|
day_of_week: Dag van de week
|
||||||
number_of_actions: Aantal acties
|
number_of_actions: Aantal acties
|
||||||
|
@ -762,7 +817,7 @@ nl:
|
||||||
day_of_week: Dag van de week
|
day_of_week: Dag van de week
|
||||||
number_of_actions: Aantal acties
|
number_of_actions: Aantal acties
|
||||||
actions_dow_30days_title: Dag van de week (laatste 30 dagen)
|
actions_dow_30days_title: Dag van de week (laatste 30 dagen)
|
||||||
actions_further: en verder
|
actions_further: ' en verder'
|
||||||
actions_last_year: Acties in de afgelopen jaren
|
actions_last_year: Acties in de afgelopen jaren
|
||||||
actions_last_year_legend:
|
actions_last_year_legend:
|
||||||
months_ago: Maanden geleden
|
months_ago: Maanden geleden
|
||||||
|
@ -773,10 +828,13 @@ nl:
|
||||||
actions_selected_from_week: Gekozen acties van week
|
actions_selected_from_week: Gekozen acties van week
|
||||||
click_to_return: Klik %{link} om terug te keren naar de statistieken pagina.
|
click_to_return: Klik %{link} om terug te keren naar de statistieken pagina.
|
||||||
click_to_return_link: hier
|
click_to_return_link: hier
|
||||||
click_to_show_actions_from_week: Klik %{link} om de acties van week %{week} en verder te zien.
|
click_to_show_actions_from_week: Klik %{link} om de acties van week %{week} en
|
||||||
click_to_update_actions: Klik op een balk in de grafiek op de acties hieronder aan te passen.
|
verder te zien.
|
||||||
|
click_to_update_actions: Klik op een balk in de grafiek op de acties hieronder
|
||||||
|
aan te passen.
|
||||||
contexts: Contexten
|
contexts: Contexten
|
||||||
current_running_time_of_incomplete_visible_actions: Huidige looptijd van onvolledige zichtbare acties
|
current_running_time_of_incomplete_visible_actions: Huidige looptijd van onvolledige
|
||||||
|
zichtbare acties
|
||||||
index_title: TRACKS::Statistiek
|
index_title: TRACKS::Statistiek
|
||||||
labels:
|
labels:
|
||||||
avg_completed: Gem afgerond
|
avg_completed: Gem afgerond
|
||||||
|
@ -793,7 +851,8 @@ nl:
|
||||||
number_of_days: Aantal dagen geleden
|
number_of_days: Aantal dagen geleden
|
||||||
percentage: Percentage
|
percentage: Percentage
|
||||||
running_time: Looptijd van een actie (weken)
|
running_time: Looptijd van een actie (weken)
|
||||||
more_stats_will_appear: Meer statistieken zullen hier verschijnen zodra u acties hebt toegevoegd.
|
more_stats_will_appear: Meer statistieken zullen hier verschijnen zodra u acties
|
||||||
|
hebt toegevoegd.
|
||||||
no_actions_selected: Er zijn geen acties geselecteerd.
|
no_actions_selected: Er zijn geen acties geselecteerd.
|
||||||
no_tags_available: geen tags beschikbaar
|
no_tags_available: geen tags beschikbaar
|
||||||
open_per_week: Active (zichtbare en verborgen) volgende acties per week
|
open_per_week: Active (zichtbare en verborgen) volgende acties per week
|
||||||
|
@ -812,10 +871,13 @@ nl:
|
||||||
percentage: Percentage
|
percentage: Percentage
|
||||||
weeks: Looptijd van een actie (weken). Klik op een balk voor meer info
|
weeks: Looptijd van een actie (weken). Klik op een balk voor meer info
|
||||||
spread_of_actions_for_all_context: Verdeling van acties voor alle contexten
|
spread_of_actions_for_all_context: Verdeling van acties voor alle contexten
|
||||||
spread_of_running_actions_for_visible_contexts: Verdeling van actieve acties voor zichtbare contexten
|
spread_of_running_actions_for_visible_contexts: Verdeling van actieve acties voor
|
||||||
tag_cloud_90days_description: Deze tag cloud bevat tags van acties die zijn gemaakt of voltooid in de afgelopen 90 dagen.
|
zichtbare contexten
|
||||||
|
tag_cloud_90days_description: Deze tag cloud bevat tags van acties die zijn gemaakt
|
||||||
|
of voltooid in de afgelopen 90 dagen.
|
||||||
tag_cloud_90days_title: Tag cloud met acties in afgelopen 90 dagen
|
tag_cloud_90days_title: Tag cloud met acties in afgelopen 90 dagen
|
||||||
tag_cloud_description: Deze tag cloud bevat tags van alle acties (afgerond, niet voltooid, zichtbaar en / of verborgen)
|
tag_cloud_description: Deze tag cloud bevat tags van alle acties (afgerond, niet
|
||||||
|
voltooid, zichtbaar en / of verborgen)
|
||||||
tag_cloud_title: Tag Cloud voor alle acties
|
tag_cloud_title: Tag Cloud voor alle acties
|
||||||
tags: Tags
|
tags: Tags
|
||||||
time_of_day: Tijd van de dag (alle acties)
|
time_of_day: Tijd van de dag (alle acties)
|
||||||
|
@ -830,7 +892,8 @@ nl:
|
||||||
top10_projects: Top 10 projecten
|
top10_projects: Top 10 projecten
|
||||||
top10_projects_30days: Top 10 project in de laatste 30 dagen
|
top10_projects_30days: Top 10 project in de laatste 30 dagen
|
||||||
top5_contexts: Top 5 contexten
|
top5_contexts: Top 5 contexten
|
||||||
top5_visible_contexts_with_incomplete_actions: Top 5 zichtbare contexten met onvolledige acties
|
top5_visible_contexts_with_incomplete_actions: Top 5 zichtbare contexten met onvolledige
|
||||||
|
acties
|
||||||
totals: Totalen
|
totals: Totalen
|
||||||
totals_action_count: u heeft een totaal van %{count} acties
|
totals_action_count: u heeft een totaal van %{count} acties
|
||||||
totals_actions_completed: "%{count} van deze zijn voltooid."
|
totals_actions_completed: "%{count} van deze zijn voltooid."
|
||||||
|
@ -851,7 +914,7 @@ nl:
|
||||||
support:
|
support:
|
||||||
array:
|
array:
|
||||||
last_word_connector: ", en"
|
last_word_connector: ", en"
|
||||||
two_words_connector: en
|
two_words_connector: ' en '
|
||||||
words_connector: ","
|
words_connector: ","
|
||||||
select:
|
select:
|
||||||
prompt: Selecteer
|
prompt: Selecteer
|
||||||
|
@ -870,8 +933,10 @@ nl:
|
||||||
action_deleted_error: Verwijderen van de actie is mislukt
|
action_deleted_error: Verwijderen van de actie is mislukt
|
||||||
action_deleted_success: Actie succesvol verwijderd
|
action_deleted_success: Actie succesvol verwijderd
|
||||||
action_due_on: "(deadline actie op %{date})"
|
action_due_on: "(deadline actie op %{date})"
|
||||||
action_marked_complete: De actie <strong>'%{description}'</strong> werd gemarkeerd als <strong>%{completed}</strong>
|
action_marked_complete: De actie <strong>'%{description}'</strong> werd gemarkeerd
|
||||||
action_marked_complete_error: De actie <strong>'%{description}'</strong> is niet gemarkeerd als <strong>%{completed} vanwege een fout op de server.</strong>
|
als <strong>%{completed}</strong>
|
||||||
|
action_marked_complete_error: De actie <strong>'%{description}'</strong> is niet
|
||||||
|
gemarkeerd als <strong>%{completed} vanwege een fout op de server.</strong>
|
||||||
action_saved: Actie opgeslagen
|
action_saved: Actie opgeslagen
|
||||||
action_saved_to_tickler: Actie opgeslagen in tickler
|
action_saved_to_tickler: Actie opgeslagen in tickler
|
||||||
actions:
|
actions:
|
||||||
|
@ -909,7 +974,8 @@ nl:
|
||||||
due_today: Deadline vandaag
|
due_today: Deadline vandaag
|
||||||
get_in_ical_format: Ontvang deze agenda in iCal-formaat
|
get_in_ical_format: Ontvang deze agenda in iCal-formaat
|
||||||
calendar_page_title: TRACKS::Agenda
|
calendar_page_title: TRACKS::Agenda
|
||||||
cannot_add_dependency_to_completed_todo: Kan deze actie niet als een afhankelijkheid van een voltooide actie toevoegen!
|
cannot_add_dependency_to_completed_todo: Kan deze actie niet als een afhankelijkheid
|
||||||
|
van een voltooide actie toevoegen!
|
||||||
clear_due_date: Maak deadline leeg
|
clear_due_date: Maak deadline leeg
|
||||||
clear_show_from_date: Maak de datum Tonen Vanaf leeg
|
clear_show_from_date: Maak de datum Tonen Vanaf leeg
|
||||||
completed: Afgerond
|
completed: Afgerond
|
||||||
|
@ -920,7 +986,8 @@ nl:
|
||||||
other: Er zijn %{count} afgeronde acties in het archief.
|
other: Er zijn %{count} afgeronde acties in het archief.
|
||||||
completed_last_day: Voltooid in de laatste 24 uur
|
completed_last_day: Voltooid in de laatste 24 uur
|
||||||
completed_last_x_days: Voltooid in de laatste %{count} dagen
|
completed_last_x_days: Voltooid in de laatste %{count} dagen
|
||||||
completed_recurrence_completed: Er is geen actie na de terugkerende actie die u new verwijderd heeft. De herhaling is voltooid
|
completed_recurrence_completed: Er is geen actie na de terugkerende actie die
|
||||||
|
u new verwijderd heeft. De herhaling is voltooid
|
||||||
completed_recurring: Afgesloten terugkerende todos
|
completed_recurring: Afgesloten terugkerende todos
|
||||||
completed_recurring_actions_title: TRACKS::Completed recurring actions
|
completed_recurring_actions_title: TRACKS::Completed recurring actions
|
||||||
completed_rest_of_month: Afgerond in de rest van deze maand
|
completed_rest_of_month: Afgerond in de rest van deze maand
|
||||||
|
@ -932,22 +999,25 @@ nl:
|
||||||
confirm_delete: Weet u zeker dat u de actie '%{description}' wilt verwijderen?
|
confirm_delete: Weet u zeker dat u de actie '%{description}' wilt verwijderen?
|
||||||
context_changed: Context veranderd in '%{name}'
|
context_changed: Context veranderd in '%{name}'
|
||||||
convert_to_project: Maak project
|
convert_to_project: Maak project
|
||||||
defer_date_after_due_date: Uitsteldatum is na de vervaldag. Gelieve vervaldag bewerken alvorens uitsteldatum aan te passen.
|
defer_date_after_due_date: Uitsteldatum is na de vervaldag. Gelieve vervaldag
|
||||||
|
bewerken alvorens uitsteldatum aan te passen.
|
||||||
defer_x_days:
|
defer_x_days:
|
||||||
one: Een dag uitstellen
|
one: Een dag uitstellen
|
||||||
other: "%{count} dagen uitstellen"
|
other: '%{count} dagen uitstellen'
|
||||||
deferred_actions_with: Uitgestelde acties met de tag '%{tag_name}'
|
deferred_actions_with: Uitgestelde acties met de tag '%{tag_name}'
|
||||||
deferred_pending_actions: Uitgestelde/wachtende acties
|
deferred_pending_actions: Uitgestelde/wachtende acties
|
||||||
deferred_tasks_title: TRACKS::Tickler
|
deferred_tasks_title: TRACKS::Tickler
|
||||||
delete: Verwijder
|
delete: Verwijder
|
||||||
delete_action: Verwijder actie
|
delete_action: Verwijder actie
|
||||||
delete_recurring_action_confirm: Weet u zeker dat u wilt de terugkerende actie '%{description}' wilt verwijderen?
|
delete_recurring_action_confirm: Weet u zeker dat u wilt de terugkerende actie
|
||||||
|
'%{description}' wilt verwijderen?
|
||||||
delete_recurring_action_title: Verwijder de terugkerende actie
|
delete_recurring_action_title: Verwijder de terugkerende actie
|
||||||
deleted_success: De actie werd met succes verwijderd.
|
deleted_success: De actie werd met succes verwijderd.
|
||||||
depends_on: Hangt af van
|
depends_on: Hangt af van
|
||||||
depends_on_separate_with_commas: Afhankelijk van (gescheiden door komma's)
|
depends_on_separate_with_commas: Afhankelijk van (gescheiden door komma's)
|
||||||
done: Voltooid?
|
done: Voltooid?
|
||||||
drag_action_title: Sleep naar een andere actie om deze afhankelijk te maken van die actie
|
drag_action_title: Sleep naar een andere actie om deze afhankelijk te maken van
|
||||||
|
die actie
|
||||||
due: Deadline
|
due: Deadline
|
||||||
edit: Bewerken
|
edit: Bewerken
|
||||||
edit_action: Actie bewerken
|
edit_action: Actie bewerken
|
||||||
|
@ -956,13 +1026,19 @@ nl:
|
||||||
error:
|
error:
|
||||||
invalid_due_date: Ongeldige deadline datum
|
invalid_due_date: Ongeldige deadline datum
|
||||||
invalid_show_from_date: Ongeldige datum voor tonen vanaf
|
invalid_show_from_date: Ongeldige datum voor tonen vanaf
|
||||||
error_completing_todo: Er was een fout bij het voltooien / activeren van de terugkerende actie '%{description}'
|
error_completing_todo: Er was een fout bij het voltooien / activeren van de terugkerende
|
||||||
error_deleting_item: Er is een fout opgetreden bij het verwijderen van het item '%{description}'
|
actie '%{description}'
|
||||||
error_deleting_recurring: Er is een fout opgetreden bij het verwijderen van het item '%{description}'
|
error_deleting_item: Er is een fout opgetreden bij het verwijderen van het item
|
||||||
error_removing_dependency: Er is een fout opgetreden het verwijderen van de afhankelijke actie
|
'%{description}'
|
||||||
error_saving_recurring: Er is een fout opgetreden het opslaan van de terugkerende actie '%{description}'
|
error_deleting_recurring: Er is een fout opgetreden bij het verwijderen van het
|
||||||
|
item '%{description}'
|
||||||
|
error_removing_dependency: Er is een fout opgetreden het verwijderen van de afhankelijke
|
||||||
|
actie
|
||||||
|
error_saving_recurring: Er is een fout opgetreden het opslaan van de terugkerende
|
||||||
|
actie '%{description}'
|
||||||
error_starring: Kon niet de ster van deze actie niet omzetten '%{description}'
|
error_starring: Kon niet de ster van deze actie niet omzetten '%{description}'
|
||||||
error_starring_recurring: Kon niet de ster van deze terugkerende actie niet omzetten '%{description}'
|
error_starring_recurring: Kon niet de ster van deze terugkerende actie niet omzetten
|
||||||
|
'%{description}'
|
||||||
error_toggle_complete: Kon deze actie niet als afgerond markeren
|
error_toggle_complete: Kon deze actie niet als afgerond markeren
|
||||||
feed_title_in_context: in context '%{context}'
|
feed_title_in_context: in context '%{context}'
|
||||||
feed_title_in_project: In het project '%{project}'
|
feed_title_in_project: In het project '%{project}'
|
||||||
|
@ -976,10 +1052,12 @@ nl:
|
||||||
in_hidden_state: in verborgen toestand
|
in_hidden_state: in verborgen toestand
|
||||||
in_pending_state: in wachtende toestand
|
in_pending_state: in wachtende toestand
|
||||||
list_incomplete_next_actions: Toon onvoltooide acties
|
list_incomplete_next_actions: Toon onvoltooide acties
|
||||||
list_incomplete_next_actions_with_limit: Toont de laatste %{count} onvoltooide acties
|
list_incomplete_next_actions_with_limit: Toont de laatste %{count} onvoltooide
|
||||||
|
acties
|
||||||
mark_complete: Markeer gereed
|
mark_complete: Markeer gereed
|
||||||
mobile_todos_page_title: Alle acties
|
mobile_todos_page_title: Alle acties
|
||||||
new_related_todo_created: Een nieuwe actie is toegevoegd, die behoort bij deze terugkerende todo
|
new_related_todo_created: Een nieuwe actie is toegevoegd, die behoort bij deze
|
||||||
|
terugkerende todo
|
||||||
new_related_todo_created_short: een nieuwe actie gemaakt
|
new_related_todo_created_short: een nieuwe actie gemaakt
|
||||||
new_related_todo_not_created_short: een nieuwe actie is niet gemaakt
|
new_related_todo_not_created_short: een nieuwe actie is niet gemaakt
|
||||||
next_action_description: Actie beschrijving
|
next_action_description: Actie beschrijving
|
||||||
|
@ -1108,9 +1186,11 @@ nl:
|
||||||
yearly_every_x_day: Elke %{month} %{day}
|
yearly_every_x_day: Elke %{month} %{day}
|
||||||
yearly_every_xth_day: De %{day} %{day_of_week} van %{month}
|
yearly_every_xth_day: De %{day} %{day_of_week} van %{month}
|
||||||
yearly_options: Instellingen voor jaarlijks terugkerende acties
|
yearly_options: Instellingen voor jaarlijks terugkerende acties
|
||||||
recurrence_completed: Er is geen volgende actie na de terugkerende actie die u zojuist hebt voltooid. De herhaling is voltooid
|
recurrence_completed: Er is geen volgende actie na de terugkerende actie die u
|
||||||
|
zojuist hebt voltooid. De herhaling is voltooid
|
||||||
recurrence_period: Herhaling periode
|
recurrence_period: Herhaling periode
|
||||||
recurring_action_deleted: Actie werd verwijderd. Omdat deze actie herhalend is. werd een nieuwe actie toegevoegd
|
recurring_action_deleted: Actie werd verwijderd. Omdat deze actie herhalend is.
|
||||||
|
werd een nieuwe actie toegevoegd
|
||||||
recurring_action_saved: Terugkerende actie opgeslagen
|
recurring_action_saved: Terugkerende actie opgeslagen
|
||||||
recurring_actions_title: TRACKS::Terugkerende acties
|
recurring_actions_title: TRACKS::Terugkerende acties
|
||||||
recurring_deleted_success: De recurrente actie is succesvol verwijderd.
|
recurring_deleted_success: De recurrente actie is succesvol verwijderd.
|
||||||
|
@ -1134,27 +1214,35 @@ nl:
|
||||||
task_list_title: TRACKS::Toon acties
|
task_list_title: TRACKS::Toon acties
|
||||||
tickler_items_due:
|
tickler_items_due:
|
||||||
one: Een tickler item wordt nu zichtbaar - vernieuw de pagina om het te zien.
|
one: Een tickler item wordt nu zichtbaar - vernieuw de pagina om het te zien.
|
||||||
other: "%{count} tickerl items zijn nu zichtbaar - vernieuw de pagina om ze te zien."
|
other: '%{count} tickerl items zijn nu zichtbaar - vernieuw de pagina om ze
|
||||||
|
te zien.'
|
||||||
to_tickler: naar tickler
|
to_tickler: naar tickler
|
||||||
unable_to_add_dependency: Niet in staat om de afhankelijkheid toe te voegen
|
unable_to_add_dependency: Niet in staat om de afhankelijkheid toe te voegen
|
||||||
unresolved_dependency: De waarde die u ingevoerd heeft in het afhankelijkheden veld is niet herleidbaar naar een bestaande actie. Deze waarde wordt niet bewaard met de rest van de actie. Doorgaan?
|
unresolved_dependency: De waarde die u ingevoerd heeft in het afhankelijkheden
|
||||||
|
veld is niet herleidbaar naar een bestaande actie. Deze waarde wordt niet bewaard
|
||||||
|
met de rest van de actie. Doorgaan?
|
||||||
was_due_on_date: had deadline op %{date}
|
was_due_on_date: had deadline op %{date}
|
||||||
users:
|
users:
|
||||||
account_signup: Aanmelden voor een account
|
account_signup: Aanmelden voor een account
|
||||||
approve_tos: I approve the Terms of Service
|
approve_tos: I approve the Terms of Service
|
||||||
auth_change_submit: Wijzigen authenticatietype
|
auth_change_submit: Wijzigen authenticatietype
|
||||||
auth_type_update_error: 'Er was een probleem met het bijwerken van uw authenticatietype: %{error_messages}'
|
auth_type_update_error: 'Er was een probleem met het bijwerken van uw authenticatietype:
|
||||||
|
%{error_messages}'
|
||||||
auth_type_updated: Authenticatietype bijgewerkt.
|
auth_type_updated: Authenticatietype bijgewerkt.
|
||||||
change_auth_type_title: TRACKS::Wijzig authenticatietype
|
change_auth_type_title: TRACKS::Wijzig authenticatietype
|
||||||
change_authentication_type: Wijzigen authenticatietype
|
change_authentication_type: Wijzigen authenticatietype
|
||||||
change_password_prompt: Voer uw nieuwe wachtwoord in de onderstaande velden in en kies 'Wachtwoord wijzigen' om uw huidige wachtwoord met uw nieuwe te vervangen.
|
change_password_prompt: Voer uw nieuwe wachtwoord in de onderstaande velden in
|
||||||
|
en kies 'Wachtwoord wijzigen' om uw huidige wachtwoord met uw nieuwe te vervangen.
|
||||||
change_password_submit: Wachtwoord wijzigen
|
change_password_submit: Wachtwoord wijzigen
|
||||||
change_password_title: TRACKS::Wachtwoord wijzigen
|
change_password_title: TRACKS::Wachtwoord wijzigen
|
||||||
choose_password: Kies een wachtwoord
|
choose_password: Kies een wachtwoord
|
||||||
confirm_password: Bevestig wachtwoord
|
confirm_password: Bevestig wachtwoord
|
||||||
desired_login: Gewenste login
|
desired_login: Gewenste login
|
||||||
destroy_confirmation: 'Waarschuwing: dit zal de gebruiker ''%{login} verwijderen met al zijn acties, contexten, projecten en notities. Weet u zeker dat u wilt doorgaan?'
|
destroy_confirmation: 'Waarschuwing: dit zal de gebruiker ''%{login} verwijderen
|
||||||
destroy_error: Er is een fout opgetreden bij het verwijderen van de gebruiker '%{login}'
|
met al zijn acties, contexten, projecten en notities. Weet u zeker dat u wilt
|
||||||
|
doorgaan?'
|
||||||
|
destroy_error: Er is een fout opgetreden bij het verwijderen van de gebruiker
|
||||||
|
'%{login}'
|
||||||
destroy_successful: Gebruiker %{login} met succes verwijderd
|
destroy_successful: Gebruiker %{login} met succes verwijderd
|
||||||
destroy_user: Verwijder de gebruiker
|
destroy_user: Verwijder de gebruiker
|
||||||
email_address: Email address
|
email_address: Email address
|
||||||
|
@ -1169,12 +1257,15 @@ nl:
|
||||||
new_user_heading: 'Registreer een nieuwe gebruiker:'
|
new_user_heading: 'Registreer een nieuwe gebruiker:'
|
||||||
new_user_title: 'TRACKS:: Aanmelden als de admin gebruiker'
|
new_user_title: 'TRACKS:: Aanmelden als de admin gebruiker'
|
||||||
no_signups_title: 'TRACKS:: Geen nieuwe aanmeldingen'
|
no_signups_title: 'TRACKS:: Geen nieuwe aanmeldingen'
|
||||||
openid_ok_pref_failed: Je hebt succesvol de %{url} geverifieerd als je identiteit, maar er was een probleem met het opslaan van uw authenticatie voorkeuren.
|
openid_ok_pref_failed: Je hebt succesvol de %{url} geverifieerd als je identiteit,
|
||||||
openid_url_verified: Je hebt %{url} met succes geverifieerd als je identiteit en uw authenticatie type OpenID opgeslagen.
|
maar er was een probleem met het opslaan van uw authenticatie voorkeuren.
|
||||||
|
openid_url_verified: Je hebt %{url} met succes geverifieerd als je identiteit
|
||||||
|
en uw authenticatie type OpenID opgeslagen.
|
||||||
password_confirmation_label: Bevestig wachtwoord
|
password_confirmation_label: Bevestig wachtwoord
|
||||||
password_updated: Wachtwoord bijgewerkt.
|
password_updated: Wachtwoord bijgewerkt.
|
||||||
register_with_cas: Met uw CAS gebruikersnaam
|
register_with_cas: Met uw CAS gebruikersnaam
|
||||||
select_authentication_type: Selecteer uw nieuwe authenticatie type en klik op 'Wijzigen authenticatietype' om uw huidige instellingen te vervangen.
|
select_authentication_type: Selecteer uw nieuwe authenticatie type en klik op
|
||||||
|
'Wijzigen authenticatietype' om uw huidige instellingen te vervangen.
|
||||||
signup: Aanmelden
|
signup: Aanmelden
|
||||||
signup_new_user: Registreer nieuwe gebruiker
|
signup_new_user: Registreer nieuwe gebruiker
|
||||||
signup_successful: Aanmelding succesvol voor gebruiker %{username}.
|
signup_successful: Aanmelding succesvol voor gebruiker %{username}.
|
||||||
|
@ -1191,7 +1282,8 @@ nl:
|
||||||
next_label: Volgende »
|
next_label: Volgende »
|
||||||
page_entries_info:
|
page_entries_info:
|
||||||
multi_page: Toon %{model} %{from} - %{to} van %{count} in totaal
|
multi_page: Toon %{model} %{from} - %{to} van %{count} in totaal
|
||||||
multi_page_html: Toon %{model} <b>%{from} - %{to}</b> van <b>%{count}</b> in totaal
|
multi_page_html: Toon %{model} <b>%{from} - %{to}</b> van <b>%{count}</b>
|
||||||
|
in totaal
|
||||||
single_page:
|
single_page:
|
||||||
one: Toon 1 %{model}
|
one: Toon 1 %{model}
|
||||||
other: Toon alle %{count} %{model}
|
other: Toon alle %{count} %{model}
|
||||||
|
|
|
@ -221,6 +221,7 @@ ru:
|
||||||
нет доступа к каталогу загрузок? %{e}
|
нет доступа к каталогу загрузок? %{e}
|
||||||
invalid_csv: 'Недопустимый CSV: не удаётся прочитать заголовки: %{e}'
|
invalid_csv: 'Недопустимый CSV: не удаётся прочитать заголовки: %{e}'
|
||||||
invalid_destination: 'Неверное место назначения импорта: %{e}'
|
invalid_destination: 'Неверное место назначения импорта: %{e}'
|
||||||
|
no_context: Контекст по умолчанию не найден
|
||||||
yaml_disabled: Загрузка YAML отключена
|
yaml_disabled: Загрузка YAML отключена
|
||||||
todos_count: '%{count} задач импортировано'
|
todos_count: '%{count} задач импортировано'
|
||||||
projects_count: '%{count} проектов импортировано'
|
projects_count: '%{count} проектов импортировано'
|
||||||
|
@ -458,7 +459,7 @@ ru:
|
||||||
интернета. Тогда Mailgun сможет отправлять на него данные.
|
интернета. Тогда Mailgun сможет отправлять на него данные.
|
||||||
description: Если вы хотите отправлять письма в Tracks, но не можете запустить
|
description: Если вы хотите отправлять письма в Tracks, но не можете запустить
|
||||||
почтовый сервер на том же сервере, то можно использовать встроенную в Tracks
|
почтовый сервер на том же сервере, то можно использовать встроенную в Tracks
|
||||||
поддержку {mailgun_link}.
|
поддержку %{mailgun_link}.
|
||||||
example_names:
|
example_names:
|
||||||
tag:
|
tag:
|
||||||
'2': метка2
|
'2': метка2
|
||||||
|
@ -474,12 +475,15 @@ ru:
|
||||||
для месяца и дня или шестизначной для года, месяца и дня)
|
для месяца и дня или шестизначной для года, месяца и дня)
|
||||||
project: Проект для внесения в задачу
|
project: Проект для внесения в задачу
|
||||||
context: Контекст для внесения в задачу
|
context: Контекст для внесения в задачу
|
||||||
|
tickler_date: Дата напоминания для задачи (может быть 2 цифры для дня, 4 цифры
|
||||||
|
для месяца-дня или 6 цифр для года-месяца-дня)
|
||||||
fields_instruction: Все специальные символы являются необязательными, а текст
|
fields_instruction: Все специальные символы являются необязательными, а текст
|
||||||
до первого символа (или конца строки) используется в качестве описания задачи
|
до первого символа (или конца строки) используется в качестве описания задачи
|
||||||
meaning_title: Значение
|
meaning_title: Значение
|
||||||
symbol_title: Символ
|
symbol_title: Символ
|
||||||
fields_title: 'Поля:'
|
fields_title: 'Поля:'
|
||||||
description: 'Для обоих описанных методов используется следующий формат:'
|
description: 'Для обоих описанных методов в теме сообщения можно использовать
|
||||||
|
следующий формат для добавления метаданных:'
|
||||||
message_gateway:
|
message_gateway:
|
||||||
instructions:
|
instructions:
|
||||||
'3': На вашу свежеустановленную почту отправлено письмо!
|
'3': На вашу свежеустановленную почту отправлено письмо!
|
||||||
|
@ -1082,7 +1086,6 @@ ru:
|
||||||
one: Отложить на 1 день
|
one: Отложить на 1 день
|
||||||
few: Отложить на %{count} дня
|
few: Отложить на %{count} дня
|
||||||
many: Отложить на %{count} дней
|
many: Отложить на %{count} дней
|
||||||
other: Отложить на %{count} дней
|
|
||||||
deferred_actions_with: Отложенные действия с меткой '%{tag_name}'
|
deferred_actions_with: Отложенные действия с меткой '%{tag_name}'
|
||||||
deferred_pending_actions: Отложенные/ожидающие действия
|
deferred_pending_actions: Отложенные/ожидающие действия
|
||||||
deferred_tasks_title: TRACKS::Отложенные
|
deferred_tasks_title: TRACKS::Отложенные
|
||||||
|
@ -1378,8 +1381,27 @@ ru:
|
||||||
другими приложениями. На этой странице представлена документация по нашему
|
другими приложениями. На этой странице представлена документация по нашему
|
||||||
REST API.
|
REST API.
|
||||||
title: Вступление
|
title: Вступление
|
||||||
|
content_3: API — это служба %{restful_link}. Все данные доступны через API как
|
||||||
|
ресурс, на который можно сослаться по уникальному идентификатору. Он отвечает
|
||||||
|
на ряд методов HTTP, в частности GET, PUT, POST и UPDATE, а все ответы от
|
||||||
|
API представлены в простом XML формате, в кодировке UTF-8.
|
||||||
|
restful_link_text: RESTful
|
||||||
curl_link_text: cURL
|
curl_link_text: cURL
|
||||||
id: ID
|
id: ID
|
||||||
title: Документация REST API для разаработчиков
|
title: Документация REST API для разаработчиков
|
||||||
|
auth:
|
||||||
|
basic_auth_link_text: Базовая HTTP-аутентификация
|
||||||
|
title: Аутентификация
|
||||||
|
content: Аутентификация обрабатывается с помощью %{auth_link}. Ваше имя пользователя
|
||||||
|
и пароль Tracks используются в качестве учетных данных аутентификации через
|
||||||
|
API. Обратите внимание, что при обычной HTTP-аутентификации ваш пароль отправляется
|
||||||
|
в виде открытого текста. Если вам нужно более безопасное решение для аутентификации,
|
||||||
|
вам следует настроить веб-сервер для запуска Tracks по HTTPS.
|
||||||
|
retrieve:
|
||||||
|
title: Получение данных из API
|
||||||
|
content: 'Чтобы получить данные, вам нужно всего лишь выполнить HTTP GET запрос
|
||||||
|
для идентификатора ресурса. Например, если вы хотите получить все контексты
|
||||||
|
с %{curl_link}:'
|
||||||
|
single_context: 'Получение единого контекста:'
|
||||||
auth_type:
|
auth_type:
|
||||||
database: База данных
|
database: База данных
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
{}
|
sv:
|
||||||
|
{}
|
||||||
|
|
|
@ -1,428 +1,431 @@
|
||||||
data:
|
tr:
|
||||||
import:
|
data:
|
||||||
yaml_disabled: YAML yükleme kapalı
|
import:
|
||||||
todos_count: İçeri aktarılacak Todos sayısı %{count}
|
yaml_disabled: YAML yükleme kapalı
|
||||||
projects_count: İçe aktarılacak proje sayısı %{count}
|
todos_count: İçeri aktarılacak Todos sayısı %{count}
|
||||||
upload_csv: Lütfen CSV dosyanızı yükleyin
|
projects_count: İçe aktarılacak proje sayısı %{count}
|
||||||
upload: Karşıya yükle
|
upload_csv: Lütfen CSV dosyanızı yükleyin
|
||||||
target_field: 'Şuraya içe aktar:'
|
upload: Karşıya yükle
|
||||||
successful: İçe aktarma başarılı.
|
target_field: 'Şuraya içe aktar:'
|
||||||
map_title: Harita dosyaları içe aktarılabilir
|
successful: İçe aktarma başarılı.
|
||||||
header: Dosya içe aktarılıyor
|
map_title: Harita dosyaları içe aktarılabilir
|
||||||
submit: İçe aktar
|
header: Dosya içe aktarılıyor
|
||||||
errors:
|
submit: İçe aktar
|
||||||
invalid_destination: 'Geçersiz içe aktarma dizini: %{e}'
|
errors:
|
||||||
some: İçe aktarım esnasında hata meydana geldi
|
invalid_destination: 'Geçersiz içe aktarma dizini: %{e}'
|
||||||
save_error: Kayıt yüklenemedi CSV (%{path_and_file}). Tracks yükleme dizinine
|
some: İçe aktarım esnasında hata meydana geldi
|
||||||
yazsın mı? %{e}
|
save_error: Kayıt yüklenemedi CSV (%{path_and_file}). Tracks yükleme dizinine
|
||||||
invalid_csv: 'Geçersiz CSV: headerler okunamadı: %{e}'
|
yazsın mı? %{e}
|
||||||
file_blank: Dosya boş olamaz
|
invalid_csv: 'Geçersiz CSV: headerler okunamadı: %{e}'
|
||||||
paste_field: 'İçe aktarılan YAML dosyasının içeriğini aşağıdaki metin kutucuğuna
|
file_blank: Dosya boş olamaz
|
||||||
yapıştır:'
|
paste_field: 'İçe aktarılan YAML dosyasının içeriğini aşağıdaki metin kutucuğuna
|
||||||
warning: Dikkat
|
yapıştır:'
|
||||||
yaml_warning: '%{warning}: YAML dosyası dışa aktarılmadan önce mevcut bütün bilgileriniz
|
warning: Dikkat
|
||||||
kaybolacak. Herhangi bir sorun yaşama ihtimalinize karşılık, eğer veri tabanına
|
yaml_warning: '%{warning}: YAML dosyası dışa aktarılmadan önce mevcut bütün
|
||||||
şu anda erişiminiz var ise yedeklemenizi öneririz.'
|
bilgileriniz kaybolacak. Herhangi bir sorun yaşama ihtimalinize karşılık,
|
||||||
export:
|
eğer veri tabanına şu anda erişiminiz var ise yedeklemenizi öneririz.'
|
||||||
page_title: Tracks::Export
|
export:
|
||||||
title: Dışa aktarılıyor
|
page_title: Tracks::Export
|
||||||
format_header: 'Aşağıdaki biçimleri seçebilirsiniz:'
|
title: Dışa aktarılıyor
|
||||||
csv_actions_description: CSV dosyası bütün eylemlerinizi, isimlendirilmiş içeriklerinizi
|
format_header: 'Aşağıdaki biçimleri seçebilirsiniz:'
|
||||||
ve projelerinizi içerir
|
csv_actions_description: CSV dosyası bütün eylemlerinizi, isimlendirilmiş içeriklerinizi
|
||||||
csv_notes_description: CSV dosyası bütün notlarınızı içerir
|
ve projelerinizi içerir
|
||||||
yaml_link_description: YAML dosyası bütün eylemlerinizi, içeriklerinizi, projelerinizi,
|
csv_notes_description: CSV dosyası bütün notlarınızı içerir
|
||||||
etiketlerinizi ve notlarınızı içerir
|
yaml_link_description: YAML dosyası bütün eylemlerinizi, içeriklerinizi, projelerinizi,
|
||||||
csv_notes_title: CSV dosyası (sadece notlar)
|
etiketlerinizi ve notlarınızı içerir
|
||||||
xml_link_title: XML dosyası (sadece eylemler)
|
csv_notes_title: CSV dosyası (sadece notlar)
|
||||||
yaml_description: ':{yaml}: Dışarı aktarmak için en iyisidir.'
|
xml_link_title: XML dosyası (sadece eylemler)
|
||||||
download_link: İndirme bağlantısı
|
yaml_description: '%{yaml}: Dışarı aktarmak için en iyisidir.'
|
||||||
yaml_link_title: YAML dosyası
|
download_link: İndirme bağlantısı
|
||||||
xml_description: '%{xml}: Veri aktarımı ve düzenleme için en iyisidir'
|
yaml_link_title: YAML dosyası
|
||||||
yaml_experimental: Lütfen YAML dosyalarının deneysel olarak desteklendiğini göz
|
xml_description: '%{xml}: Veri aktarımı ve düzenleme için en iyisidir'
|
||||||
önünde bulundurunuz. Önemli verileri yedeklerken dikkatli olunuz.
|
yaml_experimental: Lütfen YAML dosyalarının deneysel olarak desteklendiğini
|
||||||
csv_description: '%{csv}: İş tablosuna veya veri analizi yazılımlarına aktarmak
|
göz önünde bulundurunuz. Önemli verileri yedeklerken dikkatli olunuz.
|
||||||
için en iyisidir'
|
csv_description: '%{csv}: İş tablosuna veya veri analizi yazılımlarına aktarmak
|
||||||
xml_link_description: XML dosyası bütün eylemlerinizi, içeriklerinizi, projelerinizi,
|
için en iyisidir'
|
||||||
etiketlerinizi ve notlarınızı içerir
|
xml_link_description: XML dosyası bütün eylemlerinizi, içeriklerinizi, projelerinizi,
|
||||||
csv_actions_title: CSV dosyası (eylemler, içerikler ve projeler)
|
etiketlerinizi ve notlarınızı içerir
|
||||||
yaml: YAML
|
csv_actions_title: CSV dosyası (eylemler, içerikler ve projeler)
|
||||||
csv: CSV
|
yaml: YAML
|
||||||
xml: XML
|
csv: CSV
|
||||||
contexts:
|
xml: XML
|
||||||
visible_contexts: Görünür içerikler
|
contexts:
|
||||||
view_link: '%{name} içeriğini görüntüle'
|
visible_contexts: Görünür içerikler
|
||||||
update_status_message: İçerik adı değiştirildi
|
view_link: '%{name} içeriğini görüntüle'
|
||||||
todos_append: bu içerikte
|
update_status_message: İçerik adı değiştirildi
|
||||||
status_hidden: İçerik gizli
|
todos_append: bu içerikte
|
||||||
status_active: İçerik etkin
|
status_hidden: İçerik gizli
|
||||||
show_form_title: Bir içerik ekle
|
status_active: İçerik etkin
|
||||||
show_form: Yeni bir içerik oluştur
|
show_form_title: Bir içerik ekle
|
||||||
save_status_message: İçerik kaydedildi
|
show_form: Yeni bir içerik oluştur
|
||||||
no_contexts_hidden: Şu anda gizli bir içerik bulunmuyor
|
save_status_message: İçerik kaydedildi
|
||||||
no_contexts_closed: Şu anda kapalı bir içerik bulunmuyor
|
no_contexts_hidden: Şu anda gizli bir içerik bulunmuyor
|
||||||
no_contexts_active: Şu anda etkin bir içerik bulunmuyor
|
no_contexts_closed: Şu anda kapalı bir içerik bulunmuyor
|
||||||
no_contexts_: 'İçerik yok '
|
no_contexts_active: Şu anda etkin bir içerik bulunmuyor
|
||||||
new_context_pre: Yeni içerik '
|
no_contexts_: 'İçerik yok '
|
||||||
new_context_post: "' de oluşturulacaktır. Emin misiniz?"
|
new_context_pre: Yeni içerik '
|
||||||
letter_abbreviation: C
|
new_context_post: "' de oluşturulacaktır. Emin misiniz?"
|
||||||
last_completed_in_context: (son%{number})
|
letter_abbreviation: C
|
||||||
hide_form_title: Yeni içerik biçimini gizle
|
last_completed_in_context: (son%{number})
|
||||||
hide_form: Biçimi gizle
|
hide_form_title: Yeni içerik biçimini gizle
|
||||||
hidden_contexts: Gizlenmiş içerikler
|
hide_form: Biçimi gizle
|
||||||
edit_context: İçeriği düzenle
|
hidden_contexts: Gizlenmiş içerikler
|
||||||
delete_context_title: İçeriği sil
|
edit_context: İçeriği düzenle
|
||||||
delete_context_confirmation: Şu içeriği silmek istediğinize emin misiniz? %{name}'
|
delete_context_title: İçeriği sil
|
||||||
İçerikteki bütün (tekrarlanan) eylemler de silinecektir!
|
delete_context_confirmation: Şu içeriği silmek istediğinize emin misiniz? %{name}'
|
||||||
delete_context: İçeriği sil
|
İçerikteki bütün (tekrarlanan) eylemler de silinecektir!
|
||||||
context_state: İçerik durumu
|
delete_context: İçeriği sil
|
||||||
context_name: İçerik adı
|
context_state: İçerik durumu
|
||||||
context_hide: Font sayfasında gizle?
|
context_name: İçerik adı
|
||||||
context_deleted: Silinen içerik '%{name}'
|
context_hide: Font sayfasında gizle?
|
||||||
completed_tasks_title: TRACKS::şuradan '%{context_name}' tamamlanan eylemler
|
context_deleted: Silinen içerik '%{name}'
|
||||||
all_completed_tasks_title: TRACKS::şuradan '%{context_name}' tamamlanan bütün eylemler
|
completed_tasks_title: TRACKS::şuradan '%{context_name}' tamamlanan eylemler
|
||||||
add_context: İçerik ekle
|
all_completed_tasks_title: TRACKS::şuradan '%{context_name}' tamamlanan bütün
|
||||||
common:
|
eylemler
|
||||||
wiki: Wiki
|
add_context: İçerik ekle
|
||||||
weeks: haftalar
|
common:
|
||||||
week: hafta
|
wiki: Wiki
|
||||||
website: İnternet sayfası
|
weeks: haftalar
|
||||||
update: Güncelle
|
week: hafta
|
||||||
todo: todo
|
website: İnternet sayfası
|
||||||
third: Üçüncü
|
update: Güncelle
|
||||||
sort:
|
todo: todo
|
||||||
sort: Sırala
|
third: Üçüncü
|
||||||
by_task_count_title_confirm: Bu projeleri görev sayısına göre sıralamak istediğinize
|
sort:
|
||||||
emin misiniz? Bu işlem mevcut sıralamayı iptal edecektir.
|
sort: Sırala
|
||||||
by_task_count_title: Görev sayısına göre sırala
|
by_task_count_title_confirm: Bu projeleri görev sayısına göre sıralamak istediğinize
|
||||||
by_task_count: Görev sayısına göre
|
emin misiniz? Bu işlem mevcut sıralamayı iptal edecektir.
|
||||||
alphabetically_title: Projeleri alfabetik olarak sırala
|
by_task_count_title: Görev sayısına göre sırala
|
||||||
alphabetically_confirm: Bu projeleri alfabetik olarak sıralamak istediğinize emin
|
by_task_count: Görev sayısına göre
|
||||||
misiniz? Bu işlem mevcut sıralamayı iptal edecektir.
|
alphabetically_title: Projeleri alfabetik olarak sırala
|
||||||
alphabetically: Alfabetik sırayla
|
alphabetically_confirm: Bu projeleri alfabetik olarak sıralamak istediğinize
|
||||||
show_all: Hepsini göster
|
emin misiniz? Bu işlem mevcut sıralamayı iptal edecektir.
|
||||||
server_error: Sunucuda bir hata meydana geldi.
|
alphabetically: Alfabetik sırayla
|
||||||
second: İkinci
|
show_all: Hepsini göster
|
||||||
search: Ara
|
server_error: Sunucuda bir hata meydana geldi.
|
||||||
review: Gözden geçir
|
second: İkinci
|
||||||
recurring_todos: Tekrarlanan eylemler
|
search: Ara
|
||||||
projects: Projeler
|
review: Gözden geçir
|
||||||
project: Proje
|
recurring_todos: Tekrarlanan eylemler
|
||||||
previous: Önceki
|
projects: Projeler
|
||||||
optional: opsiyonel
|
project: Proje
|
||||||
ok: Tamam
|
previous: Önceki
|
||||||
numbered_step: Adım %{number}
|
optional: opsiyonel
|
||||||
notes: Notlar
|
ok: Tamam
|
||||||
not_available_abbr: n/a
|
numbered_step: Adım %{number}
|
||||||
none: Hiçbiri
|
notes: Notlar
|
||||||
next: Sıradaki
|
not_available_abbr: n/a
|
||||||
months: aylar
|
none: Hiçbiri
|
||||||
month: ay
|
next: Sıradaki
|
||||||
mailing_list: E-posta listesi
|
months: aylar
|
||||||
logout: Çıkış
|
month: ay
|
||||||
last: Son
|
mailing_list: E-posta listesi
|
||||||
go_back: Geri git
|
logout: Çıkış
|
||||||
fourth: Dördüncü
|
last: Son
|
||||||
forth: İleri
|
go_back: Geri git
|
||||||
first: Birinci
|
fourth: Dördüncü
|
||||||
errors_with_fields: 'Şu alanlarda sorunlarla karşılaşıldı:'
|
forth: İleri
|
||||||
email: E-posta
|
first: Birinci
|
||||||
drag_handle: SÜRÜKLE
|
errors_with_fields: 'Şu alanlarda sorunlarla karşılaşıldı:'
|
||||||
description: Açıklama
|
email: E-posta
|
||||||
deferred: ertelenmiş
|
drag_handle: SÜRÜKLE
|
||||||
create: Oluştur
|
description: Açıklama
|
||||||
contribute: Katkıda bulun
|
deferred: ertelenmiş
|
||||||
contexts: İçerikler
|
create: Oluştur
|
||||||
context: İçerik
|
contribute: Katkıda bulun
|
||||||
collapse_expand: Daralt/genişlet
|
contexts: İçerikler
|
||||||
cancel: İptal
|
context: İçerik
|
||||||
bugs: Hatalar
|
collapse_expand: Daralt/genişlet
|
||||||
back: Geri
|
cancel: İptal
|
||||||
ajaxError: Sunucudan alınırken bir hatayla karşılaşıldı
|
bugs: Hatalar
|
||||||
add: Ekle
|
back: Geri
|
||||||
actions: Eylemler
|
ajaxError: Sunucudan alınırken bir hatayla karşılaşıldı
|
||||||
action: Eylem
|
add: Ekle
|
||||||
days_midsentence:
|
actions: Eylemler
|
||||||
one: Gün
|
action: Eylem
|
||||||
other: Günler
|
days_midsentence:
|
||||||
note:
|
one: Gün
|
||||||
one: Not yok
|
other: Günler
|
||||||
other: 1 not var
|
|
||||||
actions_midsentence:
|
|
||||||
one: Eylem
|
|
||||||
other: Eylemler
|
|
||||||
activerecord:
|
|
||||||
errors:
|
|
||||||
template:
|
|
||||||
header:
|
|
||||||
one: 1 hata şunun %{model} kaydını engelledi
|
|
||||||
other: '%{count} hataları şunların %{model} kayıtlarını engelledi'
|
|
||||||
body: 'Şu alanlarda sorunlar mevcuttur:'
|
|
||||||
models:
|
|
||||||
project:
|
|
||||||
attributes:
|
|
||||||
name:
|
|
||||||
too_long: proje adı 256 karakterden kısa olmalıdır
|
|
||||||
taken: zaten mevcut
|
|
||||||
blank: projenin bir adı olmalıdır
|
|
||||||
messages:
|
|
||||||
wrong_length: yanlış uzunlukta (should be %{count} characters)
|
|
||||||
too_short: çok kısa (minimum is %{count} characters)
|
|
||||||
too_long: çok uzun (maximum is %{count} characters)
|
|
||||||
taken: zaten alınmış
|
|
||||||
restrict_dependent_destroy:
|
|
||||||
has_many: Bu kayda bağlı bir dosya bulunduğu için kayıt silinemez %{record}
|
|
||||||
has_one: Bu kayda bağlı farklı bir dosya bulunduğu için kayıt silinemez %{record}
|
|
||||||
record_invalid: 'Doğrulama başarısız: %{errors}'
|
|
||||||
odd: tek sayı olmalıdır
|
|
||||||
not_a_number: rakam değildir
|
|
||||||
less_than_or_equal_to: şundan az veya denk olmalıdır %{count}
|
|
||||||
less_than: şundan az olmalıdır %{count}
|
|
||||||
invalid: geçersiz
|
|
||||||
inclusion: listeye dahil değildir
|
|
||||||
greater_than_or_equal_to: şuna denk veya büyük olmalıdır %{count}
|
|
||||||
greater_than: şundan büyük olmalıdır %{count}
|
|
||||||
exclusion: alınmıştır
|
|
||||||
even: eşit olmalıdır
|
|
||||||
equal_to: şuna eşdeğer olmalıdır %{count}
|
|
||||||
empty: boş bırakılamaz
|
|
||||||
confirmation: eşleşmiyor
|
|
||||||
blank: boş bırakılamaz
|
|
||||||
accepted: Kabul edilmelidir
|
|
||||||
full_messages:
|
|
||||||
format: '%{attribute} %{message}'
|
|
||||||
attributes:
|
|
||||||
user:
|
|
||||||
password: Şifre
|
|
||||||
open_id_url: OpenID URL
|
|
||||||
login: Giriş
|
|
||||||
last_name: Soyad
|
|
||||||
last_login_at: Son giriş tarihi
|
|
||||||
first_name: İlk ad
|
|
||||||
email: E-posta adresi
|
|
||||||
display_name: Görüntüleme adı
|
|
||||||
created_at: Oluşturulma
|
|
||||||
auth_type: Auth türü
|
|
||||||
todo:
|
|
||||||
tags: Etiketler
|
|
||||||
show_from: Şuradan göster
|
|
||||||
project: Proje
|
|
||||||
predecessors: Değişiklik gösterir
|
|
||||||
notes: Notlar
|
|
||||||
due: Bitiş tarihi
|
|
||||||
description: Açıklama
|
|
||||||
context: içerik
|
|
||||||
project:
|
|
||||||
name: Ad
|
|
||||||
description: Açıklama
|
|
||||||
default_tags: Varsayılan etiketler
|
|
||||||
default_context_name: Varsayılan ortam
|
|
||||||
preference:
|
|
||||||
week_starts: Hafta başlama tarihi
|
|
||||||
verbose_action_descriptors: Eylem anahtar sözcüklerini (bağlam, proje) verboz
|
|
||||||
biçiminde göster
|
|
||||||
title_date_format: Başlık zaman biçimi
|
|
||||||
time_zone: Zaman dilimi
|
|
||||||
theme: Tema
|
|
||||||
staleness_starts: Stagnasyonu başlat
|
|
||||||
sms_email: E-posta'dan
|
|
||||||
sms_context: Varsayılan e-posta içeriği
|
|
||||||
show_project_on_todo_done: Yapılacaklar bitiminde proje sayfasına git
|
|
||||||
show_number_completed: Bitmiş eylemlerin sayısını göster
|
|
||||||
show_hidden_projects_in_sidebar: Gizli projeleri kenar çubuğunda göster
|
|
||||||
show_hidden_contexts_in_sidebar: Bitmiş içerikleri kenar çubuğunda göster
|
|
||||||
show_completed_projects_in_sidebar: Bitmiş projeleri kenar çubuğunda göster
|
|
||||||
review_period: Proje yenilenme aralığı
|
|
||||||
refresh: Yenilenme aralığı (dakika)
|
|
||||||
mobile_todos_per_page: Sayfa başı eylem sayısı (Mobil Görünüm)
|
|
||||||
locale: Lokal
|
|
||||||
email: E-posta
|
|
||||||
last_name: Soyad
|
|
||||||
first_name: İlk ad
|
|
||||||
due_style: Bitiş şekli
|
|
||||||
date_format: Tarih formatı
|
|
||||||
note:
|
note:
|
||||||
updated_at: Güncellenme tarihi
|
one: Not yok
|
||||||
created_at: Oluşturulma tarihi
|
other: '%{count} not var'
|
||||||
date:
|
actions_midsentence:
|
||||||
abbr_day_names:
|
one: eylem
|
||||||
- Pa
|
other: eylemler
|
||||||
- Pt
|
activerecord:
|
||||||
- Pe
|
errors:
|
||||||
- Cu
|
template:
|
||||||
- Ct
|
header:
|
||||||
- Cum
|
one: 1 hata şunun %{model} kaydını engelledi
|
||||||
- Cmt
|
other: '%{count} hataları şunların %{model} kayıtlarını engelledi'
|
||||||
abbr_month_names:
|
body: 'Şu alanlarda sorunlar mevcuttur:'
|
||||||
- Kas
|
models:
|
||||||
- Oca
|
project:
|
||||||
- Şub
|
attributes:
|
||||||
- Mar
|
name:
|
||||||
- Nis
|
too_long: proje adı 256 karakterden kısa olmalıdır
|
||||||
- May
|
taken: zaten mevcut
|
||||||
- Haz
|
blank: projenin bir adı olmalıdır
|
||||||
- Tem
|
messages:
|
||||||
- Ağu
|
wrong_length: yanlış uzunlukta (should be %{count} characters)
|
||||||
- Eyl
|
too_short: çok kısa (minimum is %{count} characters)
|
||||||
- Eki
|
too_long: çok uzun (maximum is %{count} characters)
|
||||||
- Kas
|
taken: zaten alınmış
|
||||||
- Ara
|
restrict_dependent_destroy:
|
||||||
day_names:
|
has_many: Bu kayda bağlı bir dosya bulunduğu için kayıt silinemez %{record}
|
||||||
- Pazar
|
has_one: Bu kayda bağlı farklı bir dosya bulunduğu için kayıt silinemez
|
||||||
- Pazartesi
|
%{record}
|
||||||
- Salı
|
record_invalid: 'Doğrulama başarısız: %{errors}'
|
||||||
- Çarşamba
|
odd: tek sayı olmalıdır
|
||||||
- Perşembe
|
not_a_number: rakam değildir
|
||||||
- Cuma
|
less_than_or_equal_to: şundan az veya denk olmalıdır %{count}
|
||||||
- Cumartesi
|
less_than: şundan az olmalıdır %{count}
|
||||||
formats:
|
invalid: geçersiz
|
||||||
default: '%d/%m/%Y'
|
inclusion: listeye dahil değildir
|
||||||
short: '%d %b'
|
greater_than_or_equal_to: şuna denk veya büyük olmalıdır %{count}
|
||||||
long: '%d-%m-%Y'
|
greater_than: şundan büyük olmalıdır %{count}
|
||||||
longer: '%A %d %B, %Y'
|
exclusion: alınmıştır
|
||||||
month_names:
|
even: eşit olmalıdır
|
||||||
- Ocak
|
equal_to: şuna eşdeğer olmalıdır %{count}
|
||||||
- Şubat
|
empty: boş bırakılamaz
|
||||||
- Eylül
|
confirmation: eşleşmiyor
|
||||||
- Mart
|
blank: boş bırakılamaz
|
||||||
- Nisan
|
accepted: Kabul edilmelidir
|
||||||
- Mayıs
|
full_messages:
|
||||||
- Haziran
|
format: '%{attribute} %{message}'
|
||||||
- Temmuz
|
attributes:
|
||||||
- Ağustos
|
user:
|
||||||
- Ekim
|
password: Şifre
|
||||||
- Kasım
|
open_id_url: OpenID URL
|
||||||
- Aralık
|
login: Giriş
|
||||||
- Aralık
|
last_name: Soyad
|
||||||
order:
|
last_login_at: Son giriş tarihi
|
||||||
- :yıl
|
first_name: İlk ad
|
||||||
- :gün
|
email: E-posta adresi
|
||||||
- :day
|
display_name: Görüntüleme adı
|
||||||
datetime:
|
created_at: Oluşturulma
|
||||||
prompts:
|
auth_type: Auth türü
|
||||||
day: Gün
|
todo:
|
||||||
hour: Saat
|
tags: Etiketler
|
||||||
minute: Dakika
|
show_from: Şuradan göster
|
||||||
month: Ay
|
project: Proje
|
||||||
year: Yıl
|
predecessors: Değişiklik gösterir
|
||||||
second: Saniye
|
notes: Notlar
|
||||||
distance_in_words:
|
due: Bitiş tarihi
|
||||||
almost_x_years:
|
description: Açıklama
|
||||||
one: neredeyse 1 yıl
|
context: içerik
|
||||||
other: neredeyse %{count} yıl
|
project:
|
||||||
half_a_minute: yarım dakika
|
name: Ad
|
||||||
x_seconds:
|
description: Açıklama
|
||||||
one: 1 saniye
|
default_tags: Varsayılan etiketler
|
||||||
other: '%{count} saniye'
|
default_context_name: Varsayılan ortam
|
||||||
x_days:
|
preference:
|
||||||
one: 1 gün
|
week_starts: Hafta başlama tarihi
|
||||||
other: '%{count} gün'
|
verbose_action_descriptors: Eylem anahtar sözcüklerini (bağlam, proje) verboz
|
||||||
x_months:
|
biçiminde göster
|
||||||
one: 1 ay
|
title_date_format: Başlık zaman biçimi
|
||||||
other: '%{count} ay'
|
time_zone: Zaman dilimi
|
||||||
about_x_months:
|
theme: Tema
|
||||||
one: yaklaşık 1 ay
|
staleness_starts: Stagnasyonu başlat
|
||||||
other: yaklaşık %{count} ay
|
sms_email: E-posta'dan
|
||||||
about_x_hours:
|
sms_context: Varsayılan e-posta içeriği
|
||||||
one: yaklaşık 1 saat
|
show_project_on_todo_done: Yapılacaklar bitiminde proje sayfasına git
|
||||||
other: yaklaşık %{count} saat
|
show_number_completed: Bitmiş eylemlerin sayısını göster
|
||||||
about_x_years:
|
show_hidden_projects_in_sidebar: Gizli projeleri kenar çubuğunda göster
|
||||||
one: yaklaşık 1 yıl
|
show_hidden_contexts_in_sidebar: Bitmiş içerikleri kenar çubuğunda göster
|
||||||
other: yaklaşık %{count} yıl
|
show_completed_projects_in_sidebar: Bitmiş projeleri kenar çubuğunda göster
|
||||||
x_minutes:
|
review_period: Proje yenilenme aralığı
|
||||||
one: 1 dakika
|
refresh: Yenilenme aralığı (dakika)
|
||||||
other: '%{count} dakika'
|
mobile_todos_per_page: Sayfa başı eylem sayısı (Mobil Görünüm)
|
||||||
over_x_years:
|
locale: Lokal
|
||||||
one: 1 yıldan fazla
|
email: E-posta
|
||||||
other: '%{count} yıldan fazla'
|
last_name: Soyad
|
||||||
errors:
|
first_name: İlk ad
|
||||||
messages:
|
due_style: Bitiş şekli
|
||||||
blank: boş bırakılamaz
|
date_format: Tarih formatı
|
||||||
less_than: "%{count}'dan az olmalıdır"
|
note:
|
||||||
not_a_number: bir sayı değildir
|
updated_at: Güncellenme tarihi
|
||||||
other_than: "%{count}'dan farklı olmalıdır"
|
created_at: Oluşturulma tarihi
|
||||||
present: boş olmalıdır
|
date:
|
||||||
taken: daha önceden alınmış
|
abbr_day_names:
|
||||||
not_an_integer: integer olmalıdır
|
- Pa
|
||||||
odd: tek sayı olmalıdır
|
- Pt
|
||||||
too_long: çok uzun (en fazla %{count} karakter olabilir)
|
- Pe
|
||||||
too_short: çok kısa ( en az %{count} karakter olabilir)
|
- Cu
|
||||||
accepted: kabul edilmelidir
|
- Ct
|
||||||
confirmation: '%{attribute} ile eşleşmemektedir'
|
- Cum
|
||||||
empty: boş bırakılamaz
|
- Cmt
|
||||||
equal_to: '%{count} ile eşit olmalıdır'
|
abbr_month_names:
|
||||||
inclusion: listeye dahil değildir
|
- Kas
|
||||||
invalid: geçersiz
|
- Oca
|
||||||
less_than_or_equal_to: "%{count}'dan az veya eşit olmalıdır"
|
- Şub
|
||||||
wrong_length: yanlış uzunluk (karakter sayısı %{count} kadar olmalıdır)
|
- Mar
|
||||||
even: eşit olmalıdır
|
- Nis
|
||||||
greater_than_or_equal_to: "%{count}'dan büyük veya eşit olmalıdır"
|
- May
|
||||||
exclusion: daha önceden alınmış
|
- Haz
|
||||||
greater_than: "%{count}'dan büyük olmalıdır"
|
- Tem
|
||||||
format: '%{attribute} %{message}'
|
- Ağu
|
||||||
user_unauthorized: '401 Yetkisiz: sadece yetkili kullanıcılar bu özelliğe erişime
|
- Eyl
|
||||||
sahiptir.'
|
- Eki
|
||||||
feedlist:
|
- Kas
|
||||||
actions_completed_last_week: Son 7 günde tamamlanan eylemler
|
- Ara
|
||||||
actions_due_next_week: 7 gün veya daha önce bitecek eylemler
|
day_names:
|
||||||
actions_due_today: Bugün veya daha erken bitecek olan eylemler
|
- Pazar
|
||||||
active_projects_wo_next: Eylemi bulunmayan aktif projeler
|
- Pazartesi
|
||||||
all_projects: Bütün Projeler
|
- Salı
|
||||||
choose_context: Almak istediğiniz içeriği seçin
|
- Çarşamba
|
||||||
projects_and_actions: Aktif projeler ve eylemleri
|
- Perşembe
|
||||||
rss_feed: RSS Akışı
|
- Cuma
|
||||||
active_starred_actions: Yıldızlı, etkin eylemler
|
- Cumartesi
|
||||||
all_actions: Tüm eylemler
|
formats:
|
||||||
all_contexts: Bütün İçerikler
|
default: '%d/%m/%Y'
|
||||||
choose_project: Almak istediğiniz projeyi seçin
|
short: '%d %b'
|
||||||
context_centric_actions: Belirli bir içerikteki tamamlanmamış eylemler için akış
|
long: '%d-%m-%Y'
|
||||||
context_needed: Akış talep etmeden önce en az bir içerik olmalı
|
longer: '%A %d %B, %Y'
|
||||||
ical_feed: iCal akış
|
month_names:
|
||||||
last_fixed_number: Son %{number} eylem/ler
|
- Ocak
|
||||||
legend: 'Semboller:'
|
- Şubat
|
||||||
notice_incomplete_only: "Not: Akış, aksi işaretlenmedikçe sadece tamamlanmamış eylemleri\
|
- Eylül
|
||||||
\ gösterir. Bu iCal akışları todo listesine eklenebilir. Eğer bitimi yaklaşan\
|
- Mart
|
||||||
\ todo'ları takvimde görüntülemek istiyorsanız, takvim sayfasından iCal akışını\
|
- Nisan
|
||||||
\ kullanın"
|
- Mayıs
|
||||||
plain_text_feed: Düz Yazı Akışı
|
- Haziran
|
||||||
project_centric: Belirli bir projedeki tamamlanmamış eylemler akışı
|
- Temmuz
|
||||||
project_needed: Akış talep etmeden önce en az bir proje olmalı
|
- Ağustos
|
||||||
select_feed_for_context: Bu içerik için akış seçin
|
- Ekim
|
||||||
select_feed_for_project: Bu proje için akış seçin
|
- Kasım
|
||||||
integrations:
|
- Aralık
|
||||||
sections:
|
- Aralık
|
||||||
email_rich: Zengin Todo Mesaj e-posta formatı
|
order:
|
||||||
message_gateway: Tracks aracılığıyla e-posta gönderebilmek için Tracks'ı e-posta
|
- :year
|
||||||
serverine bağlayın
|
- :month
|
||||||
automatic_email: Yaklaşan eylemler için kendinize otomatik e-posta gönderin
|
- :day
|
||||||
mailgun: Mailgun aracılığıyla Tracks'a e-posta gönder
|
datetime:
|
||||||
opensearch_description: Tracks'ta ara
|
prompts:
|
||||||
title: Entegrasyonlar
|
day: Gün
|
||||||
add_your_own: Eklemek istediğiniz araç mı var? Tracks'ın gelecek sürümlerine ekleyebilmemiz
|
hour: Saat
|
||||||
için bize gönderin %{tell_us_link}.
|
minute: Dakika
|
||||||
intro: 'Tracks işinize yarayabilecek diğer araçlarla entegre edilebilir! Bu sayfa
|
month: Ay
|
||||||
bazılarını entegre etmeye yönelik bilgi içerir. Her platforma uygulanabilir olmayabilirler
|
year: Yıl
|
||||||
ve bazıları diğerlerine kıyasla daha fazla teknik bilgi gerektirebilir. Ek bilgi
|
second: Saniye
|
||||||
için: %{documentation_link}'
|
distance_in_words:
|
||||||
developer_documentation_link: Tracks için geliştirici dokümantasyonu
|
almost_x_years:
|
||||||
contents_header: 'İçerikler:'
|
one: neredeyse 1 yıl
|
||||||
tell_us_link_text: Bunun hakkında bize görüş bildirin
|
other: neredeyse %{count} yıl
|
||||||
cron_2: Başka bir metin kullanabilirsiniz %{feeds_link} Projede birlikte çalıştığınız
|
half_a_minute: yarım dakika
|
||||||
meslektaşlarınıza neden listeyi e-posta gönderemeyesiniz ki?
|
x_seconds:
|
||||||
cron_email_subject: Bitimi 7 gün içerisinde olan Tracks eylemleri
|
one: 1 saniye
|
||||||
feeds_link_text: akış Tracks tarafından sağlanmıştır
|
other: '%{count} saniye'
|
||||||
cron_1: Bu girdiyi crontab üzerinden girerseniz, her gün ÖÖ 5'te 7 gün içerisinde
|
x_days:
|
||||||
bitimi yaklaşan eylemlerle ilgili bir e-posta alacaksınız.
|
one: 1 gün
|
||||||
message_gateway:
|
other: '%{count} gün'
|
||||||
rich_api_tip: Mesaj içeriği tanım, içerik ve proje kısmına, not ise gövde metnine
|
x_months:
|
||||||
yazarak "çamaşırları yıka @ Ev" veya "Mehmet'i Ara > x projesi" ve benzeri türden
|
one: 1 ay
|
||||||
görevler oluşturmak için Rich Todo API kullanabilirsiniz.
|
other: '%{count} ay'
|
||||||
footer:
|
about_x_months:
|
||||||
send_feedback: Geri bildirim
|
one: yaklaşık 1 ay
|
||||||
version: 'Tracks %{version} (%{revision_with_date})'
|
other: yaklaşık %{count} ay
|
||||||
helpers:
|
about_x_hours:
|
||||||
select:
|
one: yaklaşık 1 saat
|
||||||
prompt: Seçiniz
|
other: yaklaşık %{count} saat
|
||||||
submit:
|
about_x_years:
|
||||||
create: Oluştur %{model}
|
one: yaklaşık 1 yıl
|
||||||
submit: Kaydet %{model}
|
other: yaklaşık %{count} yıl
|
||||||
update: Güncelle %{model}
|
x_minutes:
|
||||||
|
one: 1 dakika
|
||||||
|
other: '%{count} dakika'
|
||||||
|
over_x_years:
|
||||||
|
one: 1 yıldan fazla
|
||||||
|
other: '%{count} yıldan fazla'
|
||||||
|
errors:
|
||||||
|
messages:
|
||||||
|
blank: boş bırakılamaz
|
||||||
|
less_than: "%{count}'dan az olmalıdır"
|
||||||
|
not_a_number: bir sayı değildir
|
||||||
|
other_than: "%{count}'dan farklı olmalıdır"
|
||||||
|
present: boş olmalıdır
|
||||||
|
taken: daha önceden alınmış
|
||||||
|
not_an_integer: integer olmalıdır
|
||||||
|
odd: tek sayı olmalıdır
|
||||||
|
too_long: çok uzun (en fazla %{count} karakter olabilir)
|
||||||
|
too_short: çok kısa ( en az %{count} karakter olabilir)
|
||||||
|
accepted: kabul edilmelidir
|
||||||
|
confirmation: '%{attribute} ile eşleşmemektedir'
|
||||||
|
empty: boş bırakılamaz
|
||||||
|
equal_to: '%{count} ile eşit olmalıdır'
|
||||||
|
inclusion: listeye dahil değildir
|
||||||
|
invalid: geçersiz
|
||||||
|
less_than_or_equal_to: "%{count}'dan az veya eşit olmalıdır"
|
||||||
|
wrong_length: yanlış uzunluk (karakter sayısı %{count} kadar olmalıdır)
|
||||||
|
even: eşit olmalıdır
|
||||||
|
greater_than_or_equal_to: "%{count}'dan büyük veya eşit olmalıdır"
|
||||||
|
exclusion: daha önceden alınmış
|
||||||
|
greater_than: "%{count}'dan büyük olmalıdır"
|
||||||
|
format: '%{attribute} %{message}'
|
||||||
|
user_unauthorized: '401 Yetkisiz: sadece yetkili kullanıcılar bu özelliğe erişime
|
||||||
|
sahiptir.'
|
||||||
|
feedlist:
|
||||||
|
actions_completed_last_week: Son 7 günde tamamlanan eylemler
|
||||||
|
actions_due_next_week: 7 gün veya daha önce bitecek eylemler
|
||||||
|
actions_due_today: Bugün veya daha erken bitecek olan eylemler
|
||||||
|
active_projects_wo_next: Eylemi bulunmayan aktif projeler
|
||||||
|
all_projects: Bütün Projeler
|
||||||
|
choose_context: Almak istediğiniz içeriği seçin
|
||||||
|
projects_and_actions: Aktif projeler ve eylemleri
|
||||||
|
rss_feed: RSS Akışı
|
||||||
|
active_starred_actions: Yıldızlı, etkin eylemler
|
||||||
|
all_actions: Tüm eylemler
|
||||||
|
all_contexts: Bütün İçerikler
|
||||||
|
choose_project: Almak istediğiniz projeyi seçin
|
||||||
|
context_centric_actions: Belirli bir içerikteki tamamlanmamış eylemler için akış
|
||||||
|
context_needed: Akış talep etmeden önce en az bir içerik olmalı
|
||||||
|
ical_feed: iCal akış
|
||||||
|
last_fixed_number: Son %{number} eylem/ler
|
||||||
|
legend: 'Semboller:'
|
||||||
|
notice_incomplete_only: "Not: Akış, aksi işaretlenmedikçe sadece tamamlanmamış\
|
||||||
|
\ eylemleri gösterir. Bu iCal akışları todo listesine eklenebilir. Eğer bitimi\
|
||||||
|
\ yaklaşan todo'ları takvimde görüntülemek istiyorsanız, takvim sayfasından\
|
||||||
|
\ iCal akışını kullanın"
|
||||||
|
plain_text_feed: Düz Yazı Akışı
|
||||||
|
project_centric: Belirli bir projedeki tamamlanmamış eylemler akışı
|
||||||
|
project_needed: Akış talep etmeden önce en az bir proje olmalı
|
||||||
|
select_feed_for_context: Bu içerik için akış seçin
|
||||||
|
select_feed_for_project: Bu proje için akış seçin
|
||||||
|
integrations:
|
||||||
|
sections:
|
||||||
|
email_rich: Zengin Todo Mesaj e-posta formatı
|
||||||
|
message_gateway: Tracks aracılığıyla e-posta gönderebilmek için Tracks'ı e-posta
|
||||||
|
serverine bağlayın
|
||||||
|
automatic_email: Yaklaşan eylemler için kendinize otomatik e-posta gönderin
|
||||||
|
mailgun: Mailgun aracılığıyla Tracks'a e-posta gönder
|
||||||
|
opensearch_description: Tracks'ta ara
|
||||||
|
title: Entegrasyonlar
|
||||||
|
add_your_own: Eklemek istediğiniz araç mı var? Tracks'ın gelecek sürümlerine ekleyebilmemiz
|
||||||
|
için bize gönderin %{tell_us_link}.
|
||||||
|
intro: 'Tracks işinize yarayabilecek diğer araçlarla entegre edilebilir! Bu sayfa
|
||||||
|
bazılarını entegre etmeye yönelik bilgi içerir. Her platforma uygulanabilir
|
||||||
|
olmayabilirler ve bazıları diğerlerine kıyasla daha fazla teknik bilgi gerektirebilir.
|
||||||
|
Ek bilgi için: %{documentation_link}'
|
||||||
|
developer_documentation_link: Tracks için geliştirici dokümantasyonu
|
||||||
|
contents_header: 'İçerikler:'
|
||||||
|
tell_us_link_text: Bunun hakkında bize görüş bildirin
|
||||||
|
cron_2: Başka bir metin kullanabilirsiniz %{feeds_link} Projede birlikte çalıştığınız
|
||||||
|
meslektaşlarınıza neden listeyi e-posta gönderemeyesiniz ki?
|
||||||
|
cron_email_subject: Bitimi 7 gün içerisinde olan Tracks eylemleri
|
||||||
|
feeds_link_text: akış Tracks tarafından sağlanmıştır
|
||||||
|
cron_1: Bu girdiyi crontab üzerinden girerseniz, her gün ÖÖ 5'te 7 gün içerisinde
|
||||||
|
bitimi yaklaşan eylemlerle ilgili bir e-posta alacaksınız.
|
||||||
|
message_gateway:
|
||||||
|
rich_api_tip: Mesaj içeriği tanım, içerik ve proje kısmına, not ise gövde metnine
|
||||||
|
yazarak "çamaşırları yıka @ Ev" veya "Mehmet'i Ara > x projesi" ve benzeri
|
||||||
|
türden görevler oluşturmak için Rich Todo API kullanabilirsiniz.
|
||||||
|
footer:
|
||||||
|
send_feedback: Geri bildirim
|
||||||
|
version: 'Tracks %{version} (%{revision_with_date})'
|
||||||
|
helpers:
|
||||||
|
select:
|
||||||
|
prompt: Seçiniz
|
||||||
|
submit:
|
||||||
|
create: Oluştur %{model}
|
||||||
|
submit: Kaydet %{model}
|
||||||
|
update: Güncelle %{model}
|
||||||
|
|
352
config/locales/zh-TW.yml
Normal file
352
config/locales/zh-TW.yml
Normal file
|
@ -0,0 +1,352 @@
|
||||||
|
# Traditional Chinese (Taiwan) locale for Tracks
|
||||||
|
# 繁體中文 (台灣) 語言包
|
||||||
|
zh-TW:
|
||||||
|
activerecord:
|
||||||
|
attributes:
|
||||||
|
note:
|
||||||
|
created_at: 建立於
|
||||||
|
updated_at: 更新於
|
||||||
|
preference:
|
||||||
|
date_format: 日期格式
|
||||||
|
due_style: 到期樣式
|
||||||
|
first_name: 名字
|
||||||
|
last_name: 姓氏
|
||||||
|
email: 電子郵件
|
||||||
|
locale: 語言
|
||||||
|
mobile_todos_per_page: 每頁動作數 (行動版)
|
||||||
|
refresh: 重新整理間隔 (分鐘)
|
||||||
|
review_period: 專案檢視間隔
|
||||||
|
show_completed_projects_in_sidebar: 在側邊欄顯示已完成的專案
|
||||||
|
show_hidden_contexts_in_sidebar: 在側邊欄顯示隱藏的情境
|
||||||
|
show_hidden_projects_in_sidebar: 在側邊欄顯示隱藏的專案
|
||||||
|
show_number_completed: 顯示已完成的動作數量
|
||||||
|
show_project_on_todo_done: 完成待辦事項時進入專案頁面
|
||||||
|
sms_context: 預設電子郵件情境
|
||||||
|
sms_email: 寄件者電子郵件
|
||||||
|
staleness_starts: 過期開始時間
|
||||||
|
theme: 主題
|
||||||
|
time_zone: 時區
|
||||||
|
title_date_format: 標題日期格式
|
||||||
|
verbose_action_descriptors: 以詳細形式顯示動作的描述 (情境、專案)
|
||||||
|
week_starts: 每週開始於
|
||||||
|
project:
|
||||||
|
default_context_name: 預設情境
|
||||||
|
default_tags: 預設標籤
|
||||||
|
description: 描述
|
||||||
|
name: 名稱
|
||||||
|
todo:
|
||||||
|
context: 情境
|
||||||
|
description: 描述
|
||||||
|
due: 到期
|
||||||
|
notes: 備註
|
||||||
|
predecessors: 依賴於
|
||||||
|
project: 專案
|
||||||
|
show_from: 顯示開始時間
|
||||||
|
tags: 標籤
|
||||||
|
user:
|
||||||
|
auth_type: 驗證類型
|
||||||
|
created_at: 建立於
|
||||||
|
display_name: 顯示名稱
|
||||||
|
email: 電子郵件地址
|
||||||
|
first_name: 名字
|
||||||
|
last_login_at: 上次登入時間
|
||||||
|
last_name: 姓氏
|
||||||
|
login: 登入名稱
|
||||||
|
open_id_url: OpenID 網址
|
||||||
|
password: 密碼
|
||||||
|
errors:
|
||||||
|
full_messages:
|
||||||
|
format: "%{attribute} %{message}"
|
||||||
|
messages:
|
||||||
|
accepted: 必須被接受
|
||||||
|
blank: 不能為空
|
||||||
|
confirmation: 與確認不符
|
||||||
|
empty: 不能為空
|
||||||
|
equal_to: '必須等於 %{count}'
|
||||||
|
even: 必須為偶數
|
||||||
|
exclusion: 被保留使用
|
||||||
|
greater_than: '必須大於 %{count}'
|
||||||
|
greater_than_or_equal_to: '必須大於或等於 %{count}'
|
||||||
|
inclusion: 不在清單中
|
||||||
|
invalid: 無效
|
||||||
|
less_than: '必須小於 %{count}'
|
||||||
|
less_than_or_equal_to: '必須小於或等於 %{count}'
|
||||||
|
not_a_number: 不是數字
|
||||||
|
odd: 必須為奇數
|
||||||
|
record_invalid: '驗證失敗:%{errors}'
|
||||||
|
restrict_dependent_destroy:
|
||||||
|
has_one: '無法刪除記錄,因為存在相依的 %{record}'
|
||||||
|
has_many: '無法刪除記錄,因為存在相依的 %{record}'
|
||||||
|
taken: 已被使用
|
||||||
|
too_long: '太長了 (最多 %{count} 個字元)'
|
||||||
|
too_short: '太短了 (最少 %{count} 個字元)'
|
||||||
|
wrong_length: '長度錯誤 (應為 %{count} 個字元)'
|
||||||
|
models:
|
||||||
|
project:
|
||||||
|
attributes:
|
||||||
|
name:
|
||||||
|
blank: 專案必須有名稱
|
||||||
|
taken: 已存在
|
||||||
|
too_long: 專案名稱必須少於 256 個字元
|
||||||
|
template:
|
||||||
|
body: 下列欄位有問題:
|
||||||
|
header:
|
||||||
|
one: '1 個錯誤阻止了 %{model} 的儲存'
|
||||||
|
other: '%{count} 個錯誤阻止了 %{model} 的儲存'
|
||||||
|
common:
|
||||||
|
action: 動作
|
||||||
|
actions: 動作
|
||||||
|
actions_midsentence:
|
||||||
|
one: 動作
|
||||||
|
other: 動作
|
||||||
|
zero: 動作
|
||||||
|
add: 新增
|
||||||
|
ajaxError: 從伺服器取得資料時發生錯誤
|
||||||
|
back: 返回
|
||||||
|
bugs: 錯誤回報
|
||||||
|
cancel: 取消
|
||||||
|
collapse_expand: 摺疊/展開
|
||||||
|
context: 情境
|
||||||
|
contexts: 情境
|
||||||
|
contribute: 貢獻
|
||||||
|
create: 建立
|
||||||
|
days_midsentence:
|
||||||
|
one: 天
|
||||||
|
other: 天
|
||||||
|
zero: 天
|
||||||
|
deferred: 延期
|
||||||
|
description: 描述
|
||||||
|
drag_handle: 拖曳
|
||||||
|
email: 電子郵件
|
||||||
|
errors_with_fields: 下列欄位有問題:
|
||||||
|
first: 第一個
|
||||||
|
forth: 第四個
|
||||||
|
fourth: 第四個
|
||||||
|
go_back: 返回
|
||||||
|
last: 最後一個
|
||||||
|
logout: 登出
|
||||||
|
mailing_list: 郵寄清單
|
||||||
|
month: 月
|
||||||
|
months: 月
|
||||||
|
next: 下一個
|
||||||
|
none: 無
|
||||||
|
not_available_abbr: 無
|
||||||
|
note:
|
||||||
|
one: 1 個備註
|
||||||
|
other: "%{count} 個備註"
|
||||||
|
zero: 無備註
|
||||||
|
notes: 備註
|
||||||
|
numbered_step: '步驟 %{number}'
|
||||||
|
ok: 確定
|
||||||
|
optional: 選填
|
||||||
|
previous: 前一個
|
||||||
|
project: 專案
|
||||||
|
projects: 專案
|
||||||
|
recurring_todos: 重複動作
|
||||||
|
review: 檢視
|
||||||
|
search: 搜尋
|
||||||
|
second: 第二個
|
||||||
|
server_error: 伺服器發生錯誤。
|
||||||
|
show_all: 顯示全部
|
||||||
|
sort:
|
||||||
|
alphabetically: 依字母排序
|
||||||
|
alphabetically_confirm: 您確定要依字母順序排列這些專案嗎?這會取代現有的排序順序。
|
||||||
|
alphabetically_title: 依字母順序排列專案
|
||||||
|
by_task_count: 依任務數量排序
|
||||||
|
by_task_count_title: 依任務數量排序
|
||||||
|
by_task_count_title_confirm: 您確定要依任務數量排列這些專案嗎?這會取代現有的排序順序。
|
||||||
|
sort: 排序
|
||||||
|
third: 第三個
|
||||||
|
todo: 待辦事項
|
||||||
|
update: 更新
|
||||||
|
website: 網站
|
||||||
|
week: 週
|
||||||
|
weeks: 週
|
||||||
|
wiki: Wiki
|
||||||
|
login:
|
||||||
|
account_login: 帳戶登入
|
||||||
|
please_login: 請登入以使用 Tracks
|
||||||
|
sign_in: 登入
|
||||||
|
successful: 登入成功。歡迎回來!
|
||||||
|
unsuccessful: 登入失敗。
|
||||||
|
logout: 登出
|
||||||
|
logged_out: 您已從 Tracks 登出。
|
||||||
|
layouts:
|
||||||
|
navigation:
|
||||||
|
home: 首頁
|
||||||
|
contexts_title: 情境
|
||||||
|
projects_title: 專案
|
||||||
|
calendar: 日曆
|
||||||
|
calendar_title: 到期動作的日曆
|
||||||
|
completed_tasks: 已完成
|
||||||
|
completed_tasks_title: 已完成
|
||||||
|
starred: 已標星
|
||||||
|
starred_title: 查看您已標星的動作
|
||||||
|
preferences: 偏好設定
|
||||||
|
preferences_title: 顯示我的偏好設定
|
||||||
|
help: "?"
|
||||||
|
help_page: 說明
|
||||||
|
todos:
|
||||||
|
next_actions_title: Tracks - 下一步動作
|
||||||
|
action_saved: 動作已儲存
|
||||||
|
action_marked_complete: '動作 <strong>"%{description}"</strong> 已標記為 <strong>%{completed}</strong>'
|
||||||
|
confirm_delete: '您確定要刪除動作 "%{description}" 嗎?'
|
||||||
|
deleted_success: 動作已成功刪除。
|
||||||
|
edit_action: 編輯動作
|
||||||
|
delete_action: 刪除動作
|
||||||
|
mark_complete: 標記完成
|
||||||
|
due: 到期
|
||||||
|
context: 情境
|
||||||
|
project: 專案
|
||||||
|
tags: 標籤 (用逗號分隔)
|
||||||
|
notes: 備註
|
||||||
|
show_from: 顯示開始時間
|
||||||
|
completed: 已完成
|
||||||
|
no_actions:
|
||||||
|
not_done: 目前沒有未完成動作
|
||||||
|
completed: 目前沒有已完成動作
|
||||||
|
title: 找不到動作
|
||||||
|
contexts:
|
||||||
|
add_context: 新增情境
|
||||||
|
context_name: 情境名稱
|
||||||
|
save_status_message: 情境已儲存
|
||||||
|
delete_context: 刪除情境
|
||||||
|
delete_context_confirmation: '您確定要刪除情境 "%{name}" 嗎?請注意,這也會刪除此情境中的所有(重複)動作!'
|
||||||
|
context_deleted: '已刪除情境 "%{name}"'
|
||||||
|
edit_context: 編輯情境
|
||||||
|
show_form: 建立新情境
|
||||||
|
hide_form: 隱藏表單
|
||||||
|
projects:
|
||||||
|
add_project: 新增專案
|
||||||
|
project_saved_status: 專案已儲存
|
||||||
|
delete_project: 刪除專案
|
||||||
|
delete_project_confirmation: '您確定要刪除專案 "%{name}" 嗎?'
|
||||||
|
project_destroyed_status: '已刪除專案 "%{name}"'
|
||||||
|
edit_project_title: 編輯專案
|
||||||
|
show_form: 新增專案
|
||||||
|
hide_form: 隱藏表單
|
||||||
|
notes: 備註
|
||||||
|
add_note: 新增備註
|
||||||
|
add_note_submit: 新增備註
|
||||||
|
settings: 設定
|
||||||
|
preferences:
|
||||||
|
title: 您的偏好設定
|
||||||
|
edit_preferences: 編輯偏好設定
|
||||||
|
updated: 偏好設定已更新
|
||||||
|
tabs:
|
||||||
|
profile: 個人檔案
|
||||||
|
authentication: 驗證
|
||||||
|
date_and_time: 日期和時間
|
||||||
|
tracks_behavior: Tracks 行為
|
||||||
|
remove_account: 移除帳戶
|
||||||
|
help:
|
||||||
|
title: 說明
|
||||||
|
usage: '您可以在專案 GitHub wiki 的 %{manual_link} 中找到使用資訊。'
|
||||||
|
manual_link_text: 使用手冊
|
||||||
|
bugs: '如果您遇到錯誤或有功能請求,請在 %{issue_link} 中回報。'
|
||||||
|
issue_link_text: 問題佇列
|
||||||
|
date:
|
||||||
|
abbr_day_names:
|
||||||
|
- 日
|
||||||
|
- 一
|
||||||
|
- 二
|
||||||
|
- 三
|
||||||
|
- 四
|
||||||
|
- 五
|
||||||
|
- 六
|
||||||
|
day_names:
|
||||||
|
- 星期日
|
||||||
|
- 星期一
|
||||||
|
- 星期二
|
||||||
|
- 星期三
|
||||||
|
- 星期四
|
||||||
|
- 星期五
|
||||||
|
- 星期六
|
||||||
|
abbr_month_names:
|
||||||
|
-
|
||||||
|
- 1月
|
||||||
|
- 2月
|
||||||
|
- 3月
|
||||||
|
- 4月
|
||||||
|
- 5月
|
||||||
|
- 6月
|
||||||
|
- 7月
|
||||||
|
- 8月
|
||||||
|
- 9月
|
||||||
|
- 10月
|
||||||
|
- 11月
|
||||||
|
- 12月
|
||||||
|
month_names:
|
||||||
|
-
|
||||||
|
- 一月
|
||||||
|
- 二月
|
||||||
|
- 三月
|
||||||
|
- 四月
|
||||||
|
- 五月
|
||||||
|
- 六月
|
||||||
|
- 七月
|
||||||
|
- 八月
|
||||||
|
- 九月
|
||||||
|
- 十月
|
||||||
|
- 十一月
|
||||||
|
- 十二月
|
||||||
|
formats:
|
||||||
|
default: "%Y-%m-%d"
|
||||||
|
long: "%Y年%m月%d日"
|
||||||
|
short: "%m月%d日"
|
||||||
|
order:
|
||||||
|
- :year
|
||||||
|
- :month
|
||||||
|
- :day
|
||||||
|
time:
|
||||||
|
am: 上午
|
||||||
|
pm: 下午
|
||||||
|
formats:
|
||||||
|
default: "%a, %d %b %Y %H:%M:%S %z"
|
||||||
|
long: "%Y年%m月%d日 %H:%M"
|
||||||
|
short: "%m月%d日 %H:%M"
|
||||||
|
number:
|
||||||
|
format:
|
||||||
|
delimiter: ","
|
||||||
|
separator: "."
|
||||||
|
currency:
|
||||||
|
format:
|
||||||
|
unit: "$"
|
||||||
|
delimiter: ","
|
||||||
|
separator: "."
|
||||||
|
format: "%u%n"
|
||||||
|
errors:
|
||||||
|
format: "%{attribute} %{message}"
|
||||||
|
messages:
|
||||||
|
accepted: 必須被接受
|
||||||
|
blank: 不能為空
|
||||||
|
confirmation: '與 %{attribute} 不符'
|
||||||
|
empty: 不能為空
|
||||||
|
equal_to: '必須等於 %{count}'
|
||||||
|
even: 必須為偶數
|
||||||
|
exclusion: 被保留使用
|
||||||
|
greater_than: '必須大於 %{count}'
|
||||||
|
greater_than_or_equal_to: '必須大於或等於 %{count}'
|
||||||
|
inclusion: 不在清單中
|
||||||
|
invalid: 無效
|
||||||
|
less_than: '必須小於 %{count}'
|
||||||
|
less_than_or_equal_to: '必須小於或等於 %{count}'
|
||||||
|
not_a_number: 不是數字
|
||||||
|
not_an_integer: 必須是整數
|
||||||
|
odd: 必須為奇數
|
||||||
|
other_than: '必須不同於 %{count}'
|
||||||
|
present: 必須為空白
|
||||||
|
taken: 已被使用
|
||||||
|
too_long: '太長了 (最多 %{count} 個字元)'
|
||||||
|
too_short: '太短了 (最少 %{count} 個字元)'
|
||||||
|
wrong_length: '長度錯誤 (應為 %{count} 個字元)'
|
||||||
|
users:
|
||||||
|
signup: 註冊
|
||||||
|
signup_successful: '用戶 %{username} 註冊成功。'
|
||||||
|
create_error: 用戶建立失敗,也許您在這裡已經有帳戶?
|
||||||
|
user_created: 用戶已建立。
|
||||||
|
choose_password: 選擇密碼
|
||||||
|
confirm_password: 確認密碼
|
||||||
|
email_address: 電子郵件地址
|
||||||
|
change_password: 變更您的密碼
|
||||||
|
password_updated: 密碼已更新。
|
|
@ -39,6 +39,13 @@ force_ssl: false
|
||||||
# the relative URL. Mongrel, for example, has a --prefix option.
|
# the relative URL. Mongrel, for example, has a --prefix option.
|
||||||
# subdir: "/tracks"
|
# subdir: "/tracks"
|
||||||
|
|
||||||
|
# Set this to respective values if you're instance is running behind a proxy
|
||||||
|
# (e.g. localhost:3000 is not the client visible host).
|
||||||
|
# default_url_options:
|
||||||
|
# :host: 'example.org'
|
||||||
|
# :protocol: 'https://'
|
||||||
|
# :port: 443
|
||||||
|
|
||||||
# Set to true to allow anyone to sign up for a username.
|
# Set to true to allow anyone to sign up for a username.
|
||||||
open_signups: false
|
open_signups: false
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
class ProjectsContextsRemoveNotNullFromPosition < ActiveRecord::Migration[5.2]
|
class ProjectsContextsRemoveNotNullFromPosition < ActiveRecord::Migration[5.2]
|
||||||
def self.up
|
def self.up
|
||||||
change_column :projects, :position, :integer, {:null => true, :default => nil}
|
change_column :projects, :position, :integer, :null => true, :default => nil
|
||||||
change_column :contexts, :position, :integer, {:null => true, :default => nil}
|
change_column :contexts, :position, :integer, :null => true, :default => nil
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.down
|
def self.down
|
||||||
|
@ -10,13 +10,13 @@ class ProjectsContextsRemoveNotNullFromPosition < ActiveRecord::Migration[5.2]
|
||||||
project.position = 0 if !project.position?
|
project.position = 0 if !project.position?
|
||||||
project.save
|
project.save
|
||||||
end
|
end
|
||||||
change_column :projects, :position, :integer, {:null => false, :default => nil}
|
change_column :projects, :position, :integer, :null => false, :default => nil
|
||||||
|
|
||||||
@contexts = Context.find(:all)
|
@contexts = Context.find(:all)
|
||||||
@contexts.each do |context|
|
@contexts.each do |context|
|
||||||
context.position = 0 if !context.position?
|
context.position = 0 if !context.position?
|
||||||
context.save
|
context.save
|
||||||
end
|
end
|
||||||
change_column :contexts, :position, :integer, {:null => false, :default => nil}
|
change_column :contexts, :position, :integer, :null => false, :default => nil
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
78
db/schema.rb
78
db/schema.rb
|
@ -2,30 +2,33 @@
|
||||||
# of editing this file, please use the migrations feature of Active Record to
|
# of editing this file, please use the migrations feature of Active Record to
|
||||||
# incrementally modify your database, and then regenerate this schema definition.
|
# incrementally modify your database, and then regenerate this schema definition.
|
||||||
#
|
#
|
||||||
# Note that this schema.rb definition is the authoritative source for your
|
# This file is the source Rails uses to define your schema when running `bin/rails
|
||||||
# database schema. If you need to create the application database on another
|
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
|
||||||
# system, you should be using db:schema:load, not running all the migrations
|
# be faster and is potentially less error prone than running all of your
|
||||||
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
# migrations from scratch. Old migrations may fail to apply correctly if those
|
||||||
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
# migrations use external dependencies or application code.
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
|
|
||||||
create_table "attachments", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
# These are extensions that must be enabled in order to support this database
|
||||||
t.integer "todo_id"
|
enable_extension "plpgsql"
|
||||||
|
|
||||||
|
create_table "attachments", force: :cascade do |t|
|
||||||
|
t.bigint "todo_id"
|
||||||
t.string "file_file_name"
|
t.string "file_file_name"
|
||||||
t.string "file_content_type"
|
t.string "file_content_type"
|
||||||
t.integer "file_file_size"
|
t.bigint "file_file_size"
|
||||||
t.datetime "file_updated_at"
|
t.datetime "file_updated_at"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", null: false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", null: false
|
||||||
t.index ["todo_id"], name: "index_attachments_on_todo_id"
|
t.index ["todo_id"], name: "index_attachments_on_todo_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "contexts", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "contexts", force: :cascade do |t|
|
||||||
t.string "name", null: false
|
t.string "name", null: false
|
||||||
t.integer "position", default: 0
|
t.integer "position"
|
||||||
t.integer "user_id", default: 1
|
t.integer "user_id", default: 1
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
|
@ -34,7 +37,7 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.index ["user_id"], name: "index_contexts_on_user_id"
|
t.index ["user_id"], name: "index_contexts_on_user_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "dependencies", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "dependencies", force: :cascade do |t|
|
||||||
t.integer "successor_id", null: false
|
t.integer "successor_id", null: false
|
||||||
t.integer "predecessor_id", null: false
|
t.integer "predecessor_id", null: false
|
||||||
t.string "relationship_type"
|
t.string "relationship_type"
|
||||||
|
@ -42,7 +45,7 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.index ["successor_id"], name: "index_dependencies_on_successor_id"
|
t.index ["successor_id"], name: "index_dependencies_on_successor_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "notes", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "notes", force: :cascade do |t|
|
||||||
t.integer "user_id", null: false
|
t.integer "user_id", null: false
|
||||||
t.integer "project_id", null: false
|
t.integer "project_id", null: false
|
||||||
t.text "body"
|
t.text "body"
|
||||||
|
@ -52,7 +55,7 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.index ["user_id"], name: "index_notes_on_user_id"
|
t.index ["user_id"], name: "index_notes_on_user_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "open_id_authentication_associations", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "open_id_authentication_associations", force: :cascade do |t|
|
||||||
t.integer "issued"
|
t.integer "issued"
|
||||||
t.integer "lifetime"
|
t.integer "lifetime"
|
||||||
t.string "handle"
|
t.string "handle"
|
||||||
|
@ -61,13 +64,13 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.binary "secret"
|
t.binary "secret"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "open_id_authentication_nonces", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "open_id_authentication_nonces", force: :cascade do |t|
|
||||||
t.integer "timestamp", null: false
|
t.integer "timestamp", null: false
|
||||||
t.string "server_url"
|
t.string "server_url"
|
||||||
t.string "salt", null: false
|
t.string "salt", null: false
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "preferences", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "preferences", force: :cascade do |t|
|
||||||
t.integer "user_id", null: false
|
t.integer "user_id", null: false
|
||||||
t.string "date_format", limit: 40, default: "%d/%m/%Y", null: false
|
t.string "date_format", limit: 40, default: "%d/%m/%Y", null: false
|
||||||
t.integer "week_starts", default: 0, null: false
|
t.integer "week_starts", default: 0, null: false
|
||||||
|
@ -79,9 +82,9 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.integer "refresh", default: 0, null: false
|
t.integer "refresh", default: 0, null: false
|
||||||
t.boolean "verbose_action_descriptors", default: false, null: false
|
t.boolean "verbose_action_descriptors", default: false, null: false
|
||||||
t.boolean "show_hidden_projects_in_sidebar", default: true, null: false
|
t.boolean "show_hidden_projects_in_sidebar", default: true, null: false
|
||||||
t.string "time_zone", default: "London", null: false
|
t.string "time_zone", limit: 255, default: "London", null: false
|
||||||
t.boolean "show_project_on_todo_done", default: false, null: false
|
t.boolean "show_project_on_todo_done", default: false, null: false
|
||||||
t.string "title_date_format", default: "%A, %d %B %Y", null: false
|
t.string "title_date_format", limit: 255, default: "%A, %d %B %Y", null: false
|
||||||
t.integer "mobile_todos_per_page", default: 6, null: false
|
t.integer "mobile_todos_per_page", default: 6, null: false
|
||||||
t.string "sms_email"
|
t.string "sms_email"
|
||||||
t.integer "sms_context_id"
|
t.integer "sms_context_id"
|
||||||
|
@ -91,11 +94,11 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.index ["user_id"], name: "index_preferences_on_user_id"
|
t.index ["user_id"], name: "index_preferences_on_user_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "projects", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "projects", force: :cascade do |t|
|
||||||
t.string "name", null: false
|
t.string "name", null: false
|
||||||
t.integer "position", default: 0
|
t.integer "position"
|
||||||
t.integer "user_id", default: 1
|
t.integer "user_id", default: 1
|
||||||
t.text "description", limit: 16777215
|
t.text "description"
|
||||||
t.string "state", limit: 20, null: false
|
t.string "state", limit: 20, null: false
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
|
@ -109,12 +112,12 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.index ["user_id"], name: "index_projects_on_user_id"
|
t.index ["user_id"], name: "index_projects_on_user_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "recurring_todos", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "recurring_todos", force: :cascade do |t|
|
||||||
t.integer "user_id", default: 1
|
t.integer "user_id", default: 1
|
||||||
t.integer "context_id", null: false
|
t.integer "context_id", null: false
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.string "description", null: false
|
t.string "description", null: false
|
||||||
t.text "notes", limit: 16777215
|
t.text "notes"
|
||||||
t.string "state", limit: 20, null: false
|
t.string "state", limit: 20, null: false
|
||||||
t.datetime "start_from"
|
t.datetime "start_from"
|
||||||
t.string "ends_on"
|
t.string "ends_on"
|
||||||
|
@ -133,21 +136,21 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.integer "every_count"
|
t.integer "every_count"
|
||||||
t.integer "weekday"
|
t.integer "weekday"
|
||||||
t.datetime "completed_at"
|
t.datetime "completed_at"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at", null: false
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at", null: false
|
||||||
t.boolean "show_always"
|
t.boolean "show_always"
|
||||||
t.index ["state"], name: "index_recurring_todos_on_state"
|
t.index ["state"], name: "index_recurring_todos_on_state"
|
||||||
t.index ["user_id"], name: "index_recurring_todos_on_user_id"
|
t.index ["user_id"], name: "index_recurring_todos_on_user_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "sessions", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "sessions", force: :cascade do |t|
|
||||||
t.string "session_id"
|
t.string "session_id"
|
||||||
t.text "data"
|
t.text "data"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.index ["session_id"], name: "sessions_session_id_index"
|
t.index ["session_id"], name: "index_sessions_on_session_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "taggings", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "taggings", force: :cascade do |t|
|
||||||
t.integer "taggable_id"
|
t.integer "taggable_id"
|
||||||
t.integer "tag_id"
|
t.integer "tag_id"
|
||||||
t.string "taggable_type"
|
t.string "taggable_type"
|
||||||
|
@ -156,7 +159,7 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.index ["taggable_id", "taggable_type"], name: "index_taggings_on_taggable_id_and_taggable_type"
|
t.index ["taggable_id", "taggable_type"], name: "index_taggings_on_taggable_id_and_taggable_type"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "tags", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "tags", force: :cascade do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
|
@ -164,11 +167,11 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.index ["name"], name: "index_tags_on_name"
|
t.index ["name"], name: "index_tags_on_name"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "todos", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "todos", force: :cascade do |t|
|
||||||
t.integer "context_id", null: false
|
t.integer "context_id", null: false
|
||||||
t.integer "project_id"
|
t.integer "project_id"
|
||||||
t.text "description", null: false
|
t.text "description", null: false
|
||||||
t.text "notes", limit: 16777215
|
t.text "notes"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "due"
|
t.datetime "due"
|
||||||
t.datetime "completed_at"
|
t.datetime "completed_at"
|
||||||
|
@ -177,7 +180,6 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.string "state", limit: 20, null: false
|
t.string "state", limit: 20, null: false
|
||||||
t.integer "recurring_todo_id"
|
t.integer "recurring_todo_id"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.text "rendered_notes", limit: 16777215
|
|
||||||
t.index ["context_id"], name: "index_todos_on_context_id"
|
t.index ["context_id"], name: "index_todos_on_context_id"
|
||||||
t.index ["project_id"], name: "index_todos_on_project_id"
|
t.index ["project_id"], name: "index_todos_on_project_id"
|
||||||
t.index ["state"], name: "index_todos_on_state"
|
t.index ["state"], name: "index_todos_on_state"
|
||||||
|
@ -186,20 +188,20 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.index ["user_id", "state"], name: "index_todos_on_user_id_and_state"
|
t.index ["user_id", "state"], name: "index_todos_on_user_id_and_state"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "tolk_locales", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "tolk_locales", force: :cascade do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.index ["name"], name: "index_tolk_locales_on_name", unique: true
|
t.index ["name"], name: "index_tolk_locales_on_name", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "tolk_phrases", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "tolk_phrases", force: :cascade do |t|
|
||||||
t.text "key"
|
t.text "key"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "tolk_translations", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "tolk_translations", force: :cascade do |t|
|
||||||
t.integer "phrase_id"
|
t.integer "phrase_id"
|
||||||
t.integer "locale_id"
|
t.integer "locale_id"
|
||||||
t.text "text"
|
t.text "text"
|
||||||
|
@ -210,9 +212,9 @@ ActiveRecord::Schema.define(version: 2020_08_20_000743) do
|
||||||
t.index ["phrase_id", "locale_id"], name: "index_tolk_translations_on_phrase_id_and_locale_id", unique: true
|
t.index ["phrase_id", "locale_id"], name: "index_tolk_translations_on_phrase_id_and_locale_id", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t|
|
create_table "users", force: :cascade do |t|
|
||||||
t.string "login", limit: 80, null: false
|
t.string "login", limit: 80, null: false
|
||||||
t.string "crypted_password", limit: 60
|
t.string "crypted_password", limit: 60, null: false
|
||||||
t.string "token"
|
t.string "token"
|
||||||
t.boolean "is_admin", default: false, null: false
|
t.boolean "is_admin", default: false, null: false
|
||||||
t.string "first_name"
|
t.string "first_name"
|
||||||
|
|
|
@ -1,13 +1,92 @@
|
||||||
See doc/upgrading.md for the upgrade documentation!
|
See doc/upgrading.md for the upgrade documentation!
|
||||||
|
|
||||||
|
## Version 2.7.1
|
||||||
|
|
||||||
|
### Security advisory CVE-2024-41805 (severity 6.1 / moderate)
|
||||||
|
|
||||||
|
This release fixes a few reflected XSS vulnerabilities which enabled execution
|
||||||
|
of malicious JavaScript in the context of a user’s browser if that user clicks
|
||||||
|
on a malicious link, possibly allowing retrieval or modification of the current
|
||||||
|
user's data. The issue is of moderate severity (score 6.1/10) with the CVSS
|
||||||
|
rating CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N.
|
||||||
|
|
||||||
|
I want to thank Alec Romano for reporting the issues.
|
||||||
|
|
||||||
|
### New features
|
||||||
|
|
||||||
|
* The test suite now uses always the same Dockerfile as the main build.
|
||||||
|
* The Dockerfile now supports environment-specific builds via stages.
|
||||||
|
Note: This requires slight changes to docker build commands, see documentation!
|
||||||
|
|
||||||
|
### Deprecations
|
||||||
|
|
||||||
|
* This will be the last release to support Ruby 3.0, which is already end-of-life.
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
* Lots of dependencies have been updated (including security updates).
|
||||||
|
* Fixed Docker build not working on an archive version (ie. one not cloned with Git)
|
||||||
|
* An error is shown if the user being created already exists.
|
||||||
|
* The TOS error in user creation is now in template.
|
||||||
|
* Schema.rb has been updated for Postgres support.
|
||||||
|
|
||||||
|
### Updated translations
|
||||||
|
|
||||||
|
* Spanish (thanks Gallegonovato!)
|
||||||
|
* Finnish (by maintainer Jyri-Petteri ”ZeiP” Paloposki)
|
||||||
|
|
||||||
|
## Version 2.7
|
||||||
|
|
||||||
|
### Removed features
|
||||||
|
|
||||||
|
* Support for Ruby 2.6 and 2.7 were dropped.
|
||||||
|
* Support for inbound message handling was dropped due to API changes caused by required Ruby on Rails upgrade. If you need this, comment in the issue https://github.com/TracksApp/tracks/issues/2463
|
||||||
|
* Rubocop is no longer used in the CI due to missing support for Ruby > 2.5.
|
||||||
|
|
||||||
|
### Deprecations
|
||||||
|
|
||||||
|
* This will be the last release to support Ruby 3.0, which is already end-of-life.
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
* The base version for the Docker image was updated from Ruby 2.7 to Ruby 3.3.
|
||||||
|
* Lots of dependencies have been updated (including security updates).
|
||||||
|
|
||||||
|
### Updated translations
|
||||||
|
|
||||||
|
* Spanish (thanks Gallegonovato!)
|
||||||
|
* Dutch (thanks Ranforingus!)
|
||||||
|
* Russian (thanks Alexey Svistunov!)
|
||||||
|
* Turkish (thanks Burak Hüseyin Ekseli!)
|
||||||
|
|
||||||
|
## Version 2.6.1
|
||||||
|
|
||||||
|
### Deprecations
|
||||||
|
|
||||||
|
* This will be the last release to support Ruby 2.6, which is already end-of-life.
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
* Lots of dependencies have been updated (including security updates).
|
||||||
|
* Fixed some documentation.
|
||||||
|
* Updated and added missing Datepicker localisations which caused some locales to fail.
|
||||||
|
* Added PostgreSQL documentation (thanks Sean Pappalardo!)
|
||||||
|
* URL options can be specified to make autocompletion work behind a proxy (thanks Michal Koutný!)
|
||||||
|
|
||||||
|
### Updated translations
|
||||||
|
|
||||||
|
* Finnish (by maintainer Jyri-Petteri ”ZeiP” Paloposki)
|
||||||
|
* Spanish (thanks Francisco Serrador!)
|
||||||
|
* Norwegian Bokmål (thanks Allan Nordhøy!)
|
||||||
|
|
||||||
## Version 2.6.0
|
## Version 2.6.0
|
||||||
|
|
||||||
## New features
|
### New features
|
||||||
|
|
||||||
* Ruby 3.0 is now supported.
|
* Ruby 3.0 is now supported.
|
||||||
* Support obsidian links in notes.
|
* Support obsidian links in notes.
|
||||||
|
|
||||||
## Removed features
|
### Removed features
|
||||||
|
|
||||||
* No longer supporting EOL Ruby 2.5
|
* No longer supporting EOL Ruby 2.5
|
||||||
|
|
||||||
|
@ -19,7 +98,7 @@ See doc/upgrading.md for the upgrade documentation!
|
||||||
* Fixed import in the Docker image.
|
* Fixed import in the Docker image.
|
||||||
* Footer shows the Git version hash and date in the Docker image
|
* Footer shows the Git version hash and date in the Docker image
|
||||||
|
|
||||||
## Updated translations
|
### Updated translations
|
||||||
|
|
||||||
* Finnish (by maintainer Jyri-Petteri ”ZeiP” Paloposki)
|
* Finnish (by maintainer Jyri-Petteri ”ZeiP” Paloposki)
|
||||||
* Turkish (thanks Burak Ekseli!)
|
* Turkish (thanks Burak Ekseli!)
|
||||||
|
|
|
@ -44,7 +44,7 @@ Tracks container. In future there should be an official image in Docker Hub. You
|
||||||
1. Get the Tracks code base by either downloading the archive file for the latest releast or cloning it from GitHub.
|
1. Get the Tracks code base by either downloading the archive file for the latest releast or cloning it from GitHub.
|
||||||
2. Run the following command in the Tracks directory to build the image:
|
2. Run the following command in the Tracks directory to build the image:
|
||||||
```
|
```
|
||||||
$ docker build -t="tracks" .
|
$ docker build -t="tracks" --target=production .
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Make sure you have Docker properly installed.
|
1. Make sure you have Docker properly installed.
|
||||||
|
@ -58,7 +58,7 @@ Tracks container. In future there should be an official image in Docker Hub. You
|
||||||
# MySQL
|
# MySQL
|
||||||
$ mysql -u root -p
|
$ mysql -u root -p
|
||||||
mysql> CREATE DATABASE tracks;
|
mysql> CREATE DATABASE tracks;
|
||||||
mysql> GRANT ALL PRIVILEGES ON tracks.* TO yourmysqluser@localhost IDENTIFIED BY 'password-goes-here' WITH GRANT OPTION;
|
mysql> GRANT ALL PRIVILEGES ON tracks.* TO yourmysqluser@'%' IDENTIFIED BY 'password-goes-here' WITH GRANT OPTION;
|
||||||
|
|
||||||
# PostgreSQL
|
# PostgreSQL
|
||||||
$ sudo -u postgres psql
|
$ sudo -u postgres psql
|
||||||
|
@ -142,7 +142,7 @@ You need to create a database and database-user to use with Tracks. For this, yo
|
||||||
#### PostgreSQL
|
#### PostgreSQL
|
||||||
|
|
||||||
$ sudo -u postgres psql
|
$ sudo -u postgres psql
|
||||||
postgres=# CREATE USER tracks WITH ENCRYPTED PASSWORD 'password-goes-here';
|
postgres=# CREATE ROLE tracks WITH LOGIN NOSUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION PASSWORD 'password-goes-here';
|
||||||
postgres=# CREATE DATABASE tracks OWNER=tracks;
|
postgres=# CREATE DATABASE tracks OWNER=tracks;
|
||||||
|
|
||||||
### Install dependencies
|
### Install dependencies
|
||||||
|
@ -153,13 +153,22 @@ Tracks is built upon a number of Ruby libraries (known as ‘gems’). The Bundl
|
||||||
* If you are using SQLite:
|
* If you are using SQLite:
|
||||||
|
|
||||||
```
|
```
|
||||||
bundle install --without "development test mysql"
|
bundle config set without mysql postgresql
|
||||||
|
bundle install
|
||||||
```
|
```
|
||||||
|
|
||||||
* If you are using MySQL:
|
* If you are using MySQL:
|
||||||
|
|
||||||
```
|
```
|
||||||
bundle install --without "development test sqlite"
|
bundle config set without sqlite postgresql
|
||||||
|
bundle install
|
||||||
|
```
|
||||||
|
|
||||||
|
* If you are using PostgreSQL:
|
||||||
|
|
||||||
|
```
|
||||||
|
bundle config set without sqlite mysql
|
||||||
|
bundle install
|
||||||
```
|
```
|
||||||
|
|
||||||
* If you are installing Tracks on Windows or Mac OS X, or if you have another JavaScript runtime such as Node.js installed, you may also append `therubyracer` as an additional "without" parameter.
|
* If you are installing Tracks on Windows or Mac OS X, or if you have another JavaScript runtime such as Node.js installed, you may also append `therubyracer` as an additional "without" parameter.
|
||||||
|
@ -168,10 +177,13 @@ Tracks is built upon a number of Ruby libraries (known as ‘gems’). The Bundl
|
||||||
## Configure variables
|
## Configure variables
|
||||||
|
|
||||||
1. In the `config` folder, copy the files `database.yml.tmpl` and `site.yml.tmpl` to `database.yml` and `site.yml`, respectively.
|
1. In the `config` folder, copy the files `database.yml.tmpl` and `site.yml.tmpl` to `database.yml` and `site.yml`, respectively.
|
||||||
2. Open the file `config/database.yml` and edit the `production:` section with the details of your database. If you are using MySQL the `adapter:` line should read `adapter: mysql2`, `host: localhost` (in the majority of cases), and your username and password should match those you assigned when you created the database. If you are using SQLite3, you should have only two lines under the production section: `adapter: sqlite3` and `database: db/tracks.db`.
|
2. Open the file `config/database.yml` and edit the `production:` section with the details of your database.
|
||||||
3. Open the file `config/site.yml`, and read through the settings to make sure that they suit your setup. In most cases, all you need to change are the `secret_token`, the administrator email address (`admin_email`), and the time zone setting. For the time zone setting you can use the command `bundle exec rake time:zones:local` to see all available timezones on your machine
|
* If you are using MySQL the `adapter:` line should read `adapter: mysql2`, `host: localhost` (in the majority of cases), and your username and password should match those you assigned when you created the database.
|
||||||
4. If you are using Windows, you may need to check the ‘shebang’ lines (`#!/usr/bin/env ruby`) of the `/public/dispatch.*` files and all the files in the `/script` directory. They are set to `#!/usr/bin/env ruby` by default. This should work for all Unix based setups (Linux or Mac OS X), but Windows users will probably have to change it to something like `#c:/ruby/bin/ruby` to point to the Ruby binary on your system.
|
* If you are using PostgreSQL, set the line to `adapter: postgresql` and adjust host, username and password as appropriate.
|
||||||
5. If you intend to use Tracks behind a web server or reverse proxy with https enabled, ensure to set `force_ssl` option to `true`.
|
* If you are using SQLite3, you should have only two lines under the production section: `adapter: sqlite3` and `database: db/tracks.db`.
|
||||||
|
5. Open the file `config/site.yml`, and read through the settings to make sure that they suit your setup. In most cases, all you need to change are the `secret_token`, the administrator email address (`admin_email`), and the time zone setting. For the time zone setting you can use the command `bundle exec rake time:zones:local` to see all available timezones on your machine
|
||||||
|
6. If you are using Windows, you may need to check the ‘shebang’ lines (`#!/usr/bin/env ruby`) of the `/public/dispatch.*` files and all the files in the `/script` directory. They are set to `#!/usr/bin/env ruby` by default. This should work for all Unix based setups (Linux or Mac OS X), but Windows users will probably have to change it to something like `#c:/ruby/bin/ruby` to point to the Ruby binary on your system.
|
||||||
|
7. If you intend to use Tracks behind a web server or reverse proxy with https enabled, ensure to set `force_ssl` option to `true`.
|
||||||
|
|
||||||
### Populate your database with the Tracks schema
|
### Populate your database with the Tracks schema
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
version: '3'
|
version: '3'
|
||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
image: mysql:5.7
|
image: mariadb:lts
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: 1
|
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: 1
|
||||||
MYSQL_DATABASE: ${TRACKS_DB:-tracks}
|
MARIADB_DATABASE: ${TRACKS_DB:-tracks}
|
||||||
volumes:
|
volumes:
|
||||||
- db-data:/var/lib/mysql
|
- db-data:/var/lib/mysql
|
||||||
web:
|
web:
|
||||||
build: .
|
build:
|
||||||
|
context: .
|
||||||
|
target: production # can also be development or test
|
||||||
environment:
|
environment:
|
||||||
# These are set in script/ci-build, so we need to pass-thru them.
|
# These are set in script/ci-build, so we need to pass-thru them.
|
||||||
RAILS_ENV: $RAILS_ENV
|
RAILS_ENV: $RAILS_ENV
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
docker_compose="docker-compose --file test-envs/docker-compose-$1-$2.yml"
|
export RUBY_VERSION=$1
|
||||||
|
|
||||||
|
docker_compose="docker compose --file test-envs/docker-compose-$2.yml"
|
||||||
|
|
||||||
function cleanup() {
|
function cleanup() {
|
||||||
$docker_compose down
|
$docker_compose down
|
||||||
|
@ -20,7 +22,7 @@ export DATABASE_NAME=tracks_test
|
||||||
|
|
||||||
$docker_compose build
|
$docker_compose build
|
||||||
$docker_compose up -d
|
$docker_compose up -d
|
||||||
script/poll-for-db
|
script/poll-for-db $2
|
||||||
|
|
||||||
# Leaving this in since it will be needed for Rails 5
|
# Leaving this in since it will be needed for Rails 5
|
||||||
$docker_compose run web bin/rails db:environment:set RAILS_ENV=test || true
|
$docker_compose run web bin/rails db:environment:set RAILS_ENV=test || true
|
||||||
|
@ -32,5 +34,5 @@ else
|
||||||
$docker_compose run web bin/rake db:migrate
|
$docker_compose run web bin/rake db:migrate
|
||||||
$docker_compose run web bin/rake db:seed
|
$docker_compose run web bin/rake db:seed
|
||||||
fi
|
fi
|
||||||
$docker_compose run web bin/rake test
|
echo "==> Running the tests…"
|
||||||
|
$docker_compose run web bin/rails test
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
docker_compose="docker-compose --file docker-compose.yml"
|
docker_compose="docker compose --file docker-compose.yml"
|
||||||
|
|
||||||
# Find our app dir
|
# Find our app dir
|
||||||
appdir=$(cd $(dirname "$0")/.. && pwd)
|
appdir=$(cd $(dirname "$0")/.. && pwd)
|
||||||
|
|
|
@ -2,13 +2,16 @@
|
||||||
|
|
||||||
echo "==> Polling DB…"
|
echo "==> Polling DB…"
|
||||||
|
|
||||||
appdir=$(cd $(dirname "$0")/.. && pwd)
|
if [ -z "$1" ] || [ "$1" == "mysql" ]; then
|
||||||
[ -f /etc/app-env ] || exec "$appdir/script/docker-environment" $0 $@
|
appdir=$(cd $(dirname "$0")/.. && pwd)
|
||||||
|
[ -f /etc/app-env ] || exec "$appdir/script/docker-environment" $0 $@
|
||||||
|
|
||||||
for i in {1..60}; do
|
for i in {1..60}; do
|
||||||
nc -z -w5 db 3306 && exit
|
echo "... Checking for connection"
|
||||||
sleep 1
|
nc -z -w5 db 3306 && exit
|
||||||
done
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
echo "Unable to reach database!"
|
echo "Unable to reach database!"
|
||||||
exit 1
|
exit 1
|
||||||
|
fi
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
version: '3'
|
|
||||||
services:
|
|
||||||
db:
|
|
||||||
image: mysql:5.7
|
|
||||||
environment:
|
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: 1
|
|
||||||
MYSQL_DATABASE: ${TRACKS_DB:-tracks}
|
|
||||||
volumes:
|
|
||||||
- db-data:/var/lib/mysql
|
|
||||||
web:
|
|
||||||
build:
|
|
||||||
context: ..
|
|
||||||
dockerfile: Dockerfile-2.6
|
|
||||||
environment:
|
|
||||||
# These are set in script/ci-build, so we need to pass-thru them.
|
|
||||||
RAILS_ENV: $RAILS_ENV
|
|
||||||
DATABASE_NAME: $DATABASE_NAME
|
|
||||||
DATABASE_USERNAME: root
|
|
||||||
DATABASE_PASSWORD_EMPTY: 1
|
|
||||||
volumes:
|
|
||||||
- ${VOLUME:-..}:/app:Z
|
|
||||||
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
|
||||||
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
|
||||||
ports:
|
|
||||||
- 3000:3000
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
volumes:
|
|
||||||
db-data:
|
|
|
@ -1,17 +0,0 @@
|
||||||
version: '3'
|
|
||||||
services:
|
|
||||||
web:
|
|
||||||
build:
|
|
||||||
context: ..
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
environment:
|
|
||||||
# These are set in script/ci-build, so we need to pass-thru them.
|
|
||||||
RAILS_ENV: $RAILS_ENV
|
|
||||||
DATABASE_NAME: "/app/db.sqlite"
|
|
||||||
DATABASE_TYPE: sqlite3
|
|
||||||
volumes:
|
|
||||||
- ${VOLUME:-..}:/app:Z
|
|
||||||
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
|
||||||
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
|
||||||
ports:
|
|
||||||
- 3000:3000
|
|
|
@ -1,29 +0,0 @@
|
||||||
version: '3'
|
|
||||||
services:
|
|
||||||
db:
|
|
||||||
image: mysql:5.7
|
|
||||||
environment:
|
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: 1
|
|
||||||
MYSQL_DATABASE: ${TRACKS_DB:-tracks}
|
|
||||||
volumes:
|
|
||||||
- db-data:/var/lib/mysql
|
|
||||||
web:
|
|
||||||
build:
|
|
||||||
context: ..
|
|
||||||
dockerfile: Dockerfile-3.0
|
|
||||||
environment:
|
|
||||||
# These are set in script/ci-build, so we need to pass-thru them.
|
|
||||||
RAILS_ENV: $RAILS_ENV
|
|
||||||
DATABASE_NAME: $DATABASE_NAME
|
|
||||||
DATABASE_USERNAME: root
|
|
||||||
DATABASE_PASSWORD_EMPTY: 1
|
|
||||||
volumes:
|
|
||||||
- ${VOLUME:-..}:/app:Z
|
|
||||||
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
|
||||||
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
|
||||||
ports:
|
|
||||||
- 3000:3000
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
volumes:
|
|
||||||
db-data:
|
|
|
@ -1,32 +0,0 @@
|
||||||
version: '3'
|
|
||||||
services:
|
|
||||||
db:
|
|
||||||
image: postgres:13
|
|
||||||
environment:
|
|
||||||
POSTGRES_DB: ${DATABASE_NAME:-tracks}
|
|
||||||
POSTGRES_PASSWORD: password
|
|
||||||
volumes:
|
|
||||||
- db-data:/var/lib/postgresql/data
|
|
||||||
web:
|
|
||||||
build:
|
|
||||||
context: ..
|
|
||||||
dockerfile: Dockerfile-3.0
|
|
||||||
environment:
|
|
||||||
# These are set in script/ci-build, so we need to pass-thru them.
|
|
||||||
RAILS_ENV: $RAILS_ENV
|
|
||||||
DATABASE_NAME: $DATABASE_NAME
|
|
||||||
DATABASE_USERNAME: postgres
|
|
||||||
DATABASE_PASSWORD: password
|
|
||||||
DATABASE_TYPE: postgresql
|
|
||||||
DATABASE_ENCODING: unicode
|
|
||||||
DATABASE_PORT: 5432
|
|
||||||
volumes:
|
|
||||||
- ${VOLUME:-..}:/app:Z
|
|
||||||
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
|
||||||
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
|
||||||
ports:
|
|
||||||
- 3000:3000
|
|
||||||
depends_on:
|
|
||||||
- db
|
|
||||||
volumes:
|
|
||||||
db-data:
|
|
|
@ -1,29 +1,25 @@
|
||||||
version: '3'
|
|
||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
image: mysql:5.7
|
image: mariadb:lts
|
||||||
environment:
|
environment:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: 1
|
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: 1
|
||||||
MYSQL_DATABASE: ${TRACKS_DB:-tracks}
|
MARIADB_DATABASE: ${TRACKS_DB:-tracks}
|
||||||
volumes:
|
|
||||||
- db-data:/var/lib/mysql
|
|
||||||
web:
|
web:
|
||||||
build:
|
build:
|
||||||
context: ..
|
context: ..
|
||||||
dockerfile: Dockerfile
|
target: test
|
||||||
|
args:
|
||||||
|
RUBY_VERSION: ${RUBY_VERSION}
|
||||||
environment:
|
environment:
|
||||||
# These are set in script/ci-build, so we need to pass-thru them.
|
# These are set in script/cibuild, so we need to pass-thru them.
|
||||||
RAILS_ENV: $RAILS_ENV
|
RAILS_ENV: $RAILS_ENV
|
||||||
DATABASE_NAME: $DATABASE_NAME
|
DATABASE_NAME: $DATABASE_NAME
|
||||||
DATABASE_USERNAME: root
|
DATABASE_USERNAME: root
|
||||||
DATABASE_PASSWORD_EMPTY: 1
|
DATABASE_PASSWORD_EMPTY: 1
|
||||||
volumes:
|
volumes:
|
||||||
- ${VOLUME:-..}:/app:Z
|
|
||||||
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
||||||
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
volumes:
|
|
||||||
db-data:
|
|
|
@ -1,18 +1,17 @@
|
||||||
version: '3'
|
|
||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
image: postgres:13
|
image: postgres:13
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_DB: ${DATABASE_NAME:-tracks}
|
POSTGRES_DB: ${DATABASE_NAME:-tracks}
|
||||||
POSTGRES_PASSWORD: password
|
POSTGRES_PASSWORD: password
|
||||||
volumes:
|
|
||||||
- db-data:/var/lib/postgresql/data
|
|
||||||
web:
|
web:
|
||||||
build:
|
build:
|
||||||
context: ..
|
context: ..
|
||||||
dockerfile: Dockerfile
|
target: test
|
||||||
|
args:
|
||||||
|
RUBY_VERSION: ${RUBY_VERSION}
|
||||||
environment:
|
environment:
|
||||||
# These are set in script/ci-build, so we need to pass-thru them.
|
# These are set in script/cibuild, so we need to pass-thru them.
|
||||||
RAILS_ENV: $RAILS_ENV
|
RAILS_ENV: $RAILS_ENV
|
||||||
DATABASE_NAME: $DATABASE_NAME
|
DATABASE_NAME: $DATABASE_NAME
|
||||||
DATABASE_USERNAME: postgres
|
DATABASE_USERNAME: postgres
|
||||||
|
@ -21,12 +20,9 @@ services:
|
||||||
DATABASE_ENCODING: unicode
|
DATABASE_ENCODING: unicode
|
||||||
DATABASE_PORT: 5432
|
DATABASE_PORT: 5432
|
||||||
volumes:
|
volumes:
|
||||||
- ${VOLUME:-..}:/app:Z
|
|
||||||
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
||||||
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
volumes:
|
|
||||||
db-data:
|
|
|
@ -1,17 +1,20 @@
|
||||||
version: '3'
|
|
||||||
services:
|
services:
|
||||||
web:
|
web:
|
||||||
build:
|
build:
|
||||||
context: ..
|
context: ..
|
||||||
dockerfile: Dockerfile-3.0
|
target: test
|
||||||
|
args:
|
||||||
|
RUBY_VERSION: ${RUBY_VERSION}
|
||||||
environment:
|
environment:
|
||||||
# These are set in script/ci-build, so we need to pass-thru them.
|
# These are set in script/cibuild, so we need to pass-thru them.
|
||||||
RAILS_ENV: $RAILS_ENV
|
RAILS_ENV: $RAILS_ENV
|
||||||
DATABASE_NAME: "/app/db.sqlite"
|
DATABASE_NAME: "/app/db/db.sqlite"
|
||||||
DATABASE_TYPE: sqlite3
|
DATABASE_TYPE: sqlite3
|
||||||
volumes:
|
volumes:
|
||||||
- ${VOLUME:-..}:/app:Z
|
- sqlite:/app/db:Z
|
||||||
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
- ${VOLUME:-..}/config/database.docker.yml:/app/config/database.yml:Z
|
||||||
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
- ${VOLUME:-..}/config/site.docker.yml:/app/config/site.yml:Z
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
|
volumes:
|
||||||
|
sqlite: {}
|
|
@ -124,7 +124,7 @@ class ContextsControllerTest < ActionController::TestCase
|
||||||
%w(guid link).each do |node|
|
%w(guid link).each do |node|
|
||||||
assert_select node, /http:\/\/test.host\/contexts\/.+/
|
assert_select node, /http:\/\/test.host\/contexts\/.+/
|
||||||
end
|
end
|
||||||
assert_select 'pubDate', contexts(:agenda).created_at.to_s(:rfc822)
|
assert_select 'pubDate', contexts(:agenda).created_at.to_formatted_s(:rfc822)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,65 +13,4 @@ class IntegrationsControllerTest < ActionController::TestCase
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_cloudmailin_integration_success
|
|
||||||
stub_site_config do
|
|
||||||
SITE_CONFIG['cloudmailin'] = "123456789"
|
|
||||||
SITE_CONFIG['email_dispatch'] = 'from'
|
|
||||||
post :cloudmailin, params: {
|
|
||||||
"html"=>"",
|
|
||||||
"plain"=>"asdasd",
|
|
||||||
"x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]",
|
|
||||||
"disposable"=>"",
|
|
||||||
"from"=>"5555555555@tmomail.net",
|
|
||||||
"signature"=>"e85e908fb893394762047c21e54ce248",
|
|
||||||
"to"=>"<123123@cloudmailin.net>",
|
|
||||||
"subject"=>"asd",
|
|
||||||
"x_cc_header"=>"",
|
|
||||||
"message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <5555555555@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_response :success
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_cloudmailin_integration_invalid_signature
|
|
||||||
stub_site_config do
|
|
||||||
SITE_CONFIG['cloudmailin'] = "12345678901234567890"
|
|
||||||
post :cloudmailin, params: {
|
|
||||||
"html"=>"",
|
|
||||||
"plain"=>"asdasd",
|
|
||||||
"x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]",
|
|
||||||
"disposable"=>"",
|
|
||||||
"from"=>"5555555555@tmomail.net",
|
|
||||||
"signature"=>"e85e908fb893394762047c21e54ce248",
|
|
||||||
"to"=>"<123123@cloudmailin.net>",
|
|
||||||
"subject"=>"asd",
|
|
||||||
"x_cc_header"=>"",
|
|
||||||
"message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <5555555555@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_response 403
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_cloudmailin_integration_unknown_address
|
|
||||||
stub_site_config do
|
|
||||||
SITE_CONFIG['cloudmailin'] = "123456789"
|
|
||||||
post :cloudmailin, params: {
|
|
||||||
"html"=>"",
|
|
||||||
"plain"=>"asdasd",
|
|
||||||
"x_to_header"=>"[\"81496ecea21032d35a7a@cloudmailin.net\"]",
|
|
||||||
"disposable"=>"",
|
|
||||||
"from"=>"444444444444@tmomail.net",
|
|
||||||
"signature"=>"6d2df0e807bfa9b77d24c31dce6d4515",
|
|
||||||
"to"=>"<123123@cloudmailin.net>",
|
|
||||||
"subject"=>"asd",
|
|
||||||
"x_cc_header"=>"",
|
|
||||||
"message"=>"Received: from VMBX103.ihostexchange.net ([192.168.3.3]) by\r\n HUB103.ihostexchange.net ([66.46.182.53]) with mapi; Wed, 5 Oct 2011 17:12:44\r\n -0400\r\nFrom: SMS User <444444444444@tmomail.net>\r\nTo: Tracks <123123@cloudmailin.net>\r\nDate: Wed, 5 Oct 2011 17:12:43 -0400\r\nSubject: asd\r\nThread-Topic: asd\r\nThread-Index: AcyDo4aig2wghvcsTAOkleWqi4t/FQ==\r\nMessage-ID: <7D7CB176-7559-4997-A301-8DF9726264C7@tmomail.net>\r\nAccept-Language: de-DE, en-US\r\nContent-Language: en-US\r\nX-MS-Has-Attach:\r\nX-MS-TNEF-Correlator:\r\nacceptlanguage: de-DE, en-US\r\nContent-Type: text/plain; charset=\"us-ascii\"\r\nContent-Transfer-Encoding: quoted-printable\r\nMIME-Version: 1.0\r\n\r\nasdasd\r\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_response 404
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,74 +0,0 @@
|
||||||
require 'test_helper'
|
|
||||||
require 'support/stub_site_config_helper'
|
|
||||||
|
|
||||||
class MailgunControllerTest < ActionController::TestCase
|
|
||||||
include StubSiteConfigHelper
|
|
||||||
|
|
||||||
def setup
|
|
||||||
@user = users(:sms_user)
|
|
||||||
@inbox = contexts(:inbox)
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_message(filename)
|
|
||||||
File.read(File.join(Rails.root, 'test', 'fixtures', filename))
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_mailgun_signature_verifies
|
|
||||||
stub_site_config do
|
|
||||||
SITE_CONFIG['mailgun_api_key'] = "123456789"
|
|
||||||
SITE_CONFIG['email_dispatch'] = 'from'
|
|
||||||
|
|
||||||
post :mailgun, params: {
|
|
||||||
"timestamp" => "1379539674",
|
|
||||||
"token" => "5km6cwo0e3bfvg78hw4s69znro09xhk1h8u6-s633yasc8hcr5",
|
|
||||||
"signature" => "da92708b8f2c9dcd7ecdc91d52946c01802833e6683e46fc00b3f081920dd5b1",
|
|
||||||
"body-mime" => load_message('mailgun_message1.txt')
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_response :success
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_mailgun_creates_todo_with_mailmap
|
|
||||||
stub_site_config do
|
|
||||||
SITE_CONFIG['mailgun_api_key'] = "123456789"
|
|
||||||
SITE_CONFIG['email_dispatch'] = 'to'
|
|
||||||
SITE_CONFIG['mailmap'] = {
|
|
||||||
'5555555555@tmomail.net' => ['incoming@othermail.com', 'notused@foo.org']
|
|
||||||
}
|
|
||||||
|
|
||||||
todo_count = Todo.count
|
|
||||||
post :mailgun, params: {
|
|
||||||
"timestamp" => "1379539674",
|
|
||||||
"token" => "5km6cwo0e3bfvg78hw4s69znro09xhk1h8u6-s633yasc8hcr5",
|
|
||||||
"signature" => "da92708b8f2c9dcd7ecdc91d52946c01802833e6683e46fc00b3f081920dd5b1",
|
|
||||||
"body-mime" => load_message('mailgun_message2.txt')
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_response :success
|
|
||||||
|
|
||||||
assert_equal(todo_count+1, Todo.count)
|
|
||||||
message_todo = Todo.where(:description => "test").first
|
|
||||||
assert_not_nil(message_todo)
|
|
||||||
assert_equal(@inbox, message_todo.context)
|
|
||||||
assert_equal(@user, message_todo.user)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_mailgun_signature_fails
|
|
||||||
stub_site_config do
|
|
||||||
SITE_CONFIG['mailgun_api_key'] = "invalidkey"
|
|
||||||
SITE_CONFIG['email_dispatch'] = 'from'
|
|
||||||
|
|
||||||
post :mailgun, params: {
|
|
||||||
"timestamp" => "1379539674",
|
|
||||||
"token" => "5km6cwo0e3bfvg78hw4s69znro09xhk1h8u6-s633yasc8hcr5",
|
|
||||||
"signature" => "da92708b8f2c9dcd7ecdc91d52946c01802833e6683e46fc00b3f081920dd5b1",
|
|
||||||
"body-mime" => load_message('mailgun_message1.txt')
|
|
||||||
}
|
|
||||||
|
|
||||||
assert_response 406
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
|
@ -1,103 +0,0 @@
|
||||||
require 'test_helper'
|
|
||||||
|
|
||||||
class MessageGatewayTest < ActiveSupport::TestCase
|
|
||||||
|
|
||||||
def setup
|
|
||||||
@user = users(:sms_user)
|
|
||||||
@inbox = contexts(:inbox)
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_message(filename)
|
|
||||||
MessageGateway.receive(File.read(File.join(Rails.root, 'test', 'fixtures', filename)))
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_sms_with_no_subject
|
|
||||||
todo_count = Todo.count
|
|
||||||
|
|
||||||
load_message('sample_sms.txt')
|
|
||||||
# assert some stuff about it being created
|
|
||||||
assert_equal(todo_count+1, Todo.count)
|
|
||||||
|
|
||||||
message_todo = Todo.where(:description => "message_content").first
|
|
||||||
assert_not_nil(message_todo)
|
|
||||||
|
|
||||||
assert_equal(@inbox, message_todo.context)
|
|
||||||
assert_equal(@user, message_todo.user)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_mms_with_subject
|
|
||||||
todo_count = Todo.count
|
|
||||||
|
|
||||||
load_message('sample_mms.txt')
|
|
||||||
|
|
||||||
# assert some stuff about it being created
|
|
||||||
assert_equal(todo_count+1, Todo.count)
|
|
||||||
|
|
||||||
message_todo = Todo.where(:description => "This is the subject").first
|
|
||||||
assert_not_nil(message_todo)
|
|
||||||
|
|
||||||
assert_equal(@inbox, message_todo.context)
|
|
||||||
assert_equal(@user, message_todo.user)
|
|
||||||
assert_equal("This is the message body", message_todo.notes)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_email_with_winmail_dat
|
|
||||||
todo_count = Todo.count
|
|
||||||
|
|
||||||
load_message('email_with_winmail.txt')
|
|
||||||
|
|
||||||
# assert some stuff about it being created
|
|
||||||
assert_equal(todo_count+1, Todo.count)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_email_with_multipart_attachments
|
|
||||||
todo_count = Todo.count
|
|
||||||
|
|
||||||
load_message('email_with_multipart.txt')
|
|
||||||
|
|
||||||
# assert some stuff about it being created
|
|
||||||
assert_equal(todo_count+1, Todo.count)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_no_user
|
|
||||||
todo_count = Todo.count
|
|
||||||
badmessage = File.read(File.join(Rails.root, 'test', 'fixtures', 'sample_sms.txt'))
|
|
||||||
badmessage.gsub!("5555555555", "notauser")
|
|
||||||
MessageGateway.receive(badmessage)
|
|
||||||
assert_equal(todo_count, Todo.count)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_direct_to_context
|
|
||||||
message = File.read(File.join(Rails.root, 'test', 'fixtures', 'sample_sms.txt'))
|
|
||||||
|
|
||||||
valid_context_msg = message.gsub('message_content', 'this is a task @ anothercontext')
|
|
||||||
invalid_context_msg = message.gsub('message_content', 'this is also a task @ notacontext')
|
|
||||||
|
|
||||||
MessageGateway.receive(valid_context_msg)
|
|
||||||
valid_context_todo = Todo.where(:description => "this is a task").first
|
|
||||||
assert_not_nil(valid_context_todo)
|
|
||||||
assert_equal(contexts(:anothercontext), valid_context_todo.context)
|
|
||||||
|
|
||||||
MessageGateway.receive(invalid_context_msg)
|
|
||||||
invalid_context_todo = Todo.where(:description => 'this is also a task').first
|
|
||||||
assert_not_nil(invalid_context_todo)
|
|
||||||
assert_equal(@inbox, invalid_context_todo.context)
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_receiving_email_adds_attachment
|
|
||||||
attachment_count = Attachment.count
|
|
||||||
|
|
||||||
load_message('sample_mms.txt')
|
|
||||||
|
|
||||||
message_todo = Todo.where(:description => "This is the subject").first
|
|
||||||
assert_not_nil(message_todo)
|
|
||||||
|
|
||||||
assert_equal attachment_count+1, Attachment.count
|
|
||||||
assert_equal 1,message_todo.attachments.count
|
|
||||||
|
|
||||||
orig = File.read(File.join(Rails.root, 'test', 'fixtures', 'sample_mms.txt'))
|
|
||||||
attachment = File.read(message_todo.attachments.first.file.path)
|
|
||||||
|
|
||||||
assert_equal orig, attachment
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -102,7 +102,7 @@ class ProjectsControllerTest < ActionController::TestCase
|
||||||
%w(guid link).each do |node|
|
%w(guid link).each do |node|
|
||||||
assert_select node, /http:\/\/test.host\/projects\/.+/
|
assert_select node, /http:\/\/test.host\/projects\/.+/
|
||||||
end
|
end
|
||||||
assert_select 'pubDate', projects(:timemachine).updated_at.to_s(:rfc822)
|
assert_select 'pubDate', projects(:timemachine).updated_at.to_formatted_s(:rfc822)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -403,7 +403,7 @@ class TodosControllerTest < ActionController::TestCase
|
||||||
assert_equal "bar, foo", t.tag_list
|
assert_equal "bar, foo", t.tag_list
|
||||||
expected = Date.new(2006,11,30)
|
expected = Date.new(2006,11,30)
|
||||||
actual = t.due.to_date
|
actual = t.due.to_date
|
||||||
assert_equal expected, actual, "Expected #{expected.to_s(:db)}, was #{actual.to_s(:db)}"
|
assert_equal expected, actual, "Expected #{expected.to_formatted_s(:db)}, was #{actual.to_formatted_s(:db)}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_update_todos_with_blank_project_name
|
def test_update_todos_with_blank_project_name
|
||||||
|
@ -551,7 +551,7 @@ class TodosControllerTest < ActionController::TestCase
|
||||||
assert_select 'description', /.*/
|
assert_select 'description', /.*/
|
||||||
assert_select 'link', %r{http://test.host/contexts/.+}
|
assert_select 'link', %r{http://test.host/contexts/.+}
|
||||||
assert_select 'guid', %r{http://test.host/todos/.+}
|
assert_select 'guid', %r{http://test.host/todos/.+}
|
||||||
assert_select 'pubDate', todos(:call_bill_gates_every_day).created_at.to_s(:rfc822)
|
assert_select 'pubDate', todos(:call_bill_gates_every_day).created_at.to_formatted_s(:rfc822)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
2
test/fixtures/contexts.yml
vendored
2
test/fixtures/contexts.yml
vendored
|
@ -5,7 +5,7 @@
|
||||||
<%
|
<%
|
||||||
|
|
||||||
def today
|
def today
|
||||||
Time.zone.now.utc.to_s(:db)
|
Time.zone.now.utc.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
%>
|
%>
|
||||||
|
|
6
test/fixtures/notes.yml
vendored
6
test/fixtures/notes.yml
vendored
|
@ -4,15 +4,15 @@
|
||||||
# rails does automatically in models or controllers! Convert to utc manually!
|
# rails does automatically in models or controllers! Convert to utc manually!
|
||||||
<%
|
<%
|
||||||
def today
|
def today
|
||||||
Time.zone.now.utc.to_s(:db)
|
Time.zone.now.utc.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def next_week
|
def next_week
|
||||||
1.week.from_now.utc.to_s(:db)
|
1.week.from_now.utc.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def last_week
|
def last_week
|
||||||
1.week.ago.utc.to_s(:db)
|
1.week.ago.utc.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
%>
|
%>
|
||||||
|
|
||||||
|
|
6
test/fixtures/projects.yml
vendored
6
test/fixtures/projects.yml
vendored
|
@ -4,13 +4,13 @@
|
||||||
# rails does automatically in models or controllers! Convert to utc manually!
|
# rails does automatically in models or controllers! Convert to utc manually!
|
||||||
<%
|
<%
|
||||||
def today
|
def today
|
||||||
Time.zone.now.utc.beginning_of_day.to_s(:db)
|
Time.zone.now.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
def yesterday
|
def yesterday
|
||||||
1.day.ago.utc.beginning_of_day.to_s(:db)
|
1.day.ago.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
def last_week
|
def last_week
|
||||||
1.week.ago.utc.beginning_of_day.to_s(:db)
|
1.week.ago.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
%>
|
%>
|
||||||
|
|
||||||
|
|
12
test/fixtures/recurring_todos.yml
vendored
12
test/fixtures/recurring_todos.yml
vendored
|
@ -3,27 +3,27 @@
|
||||||
|
|
||||||
<%
|
<%
|
||||||
def today
|
def today
|
||||||
Time.zone.now.utc.beginning_of_day.to_s(:db)
|
Time.zone.now.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def next_week
|
def next_week
|
||||||
1.week.from_now.utc.beginning_of_day.to_s(:db)
|
1.week.from_now.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def last_week
|
def last_week
|
||||||
1.week.ago.utc.beginning_of_day.to_s(:db)
|
1.week.ago.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def two_weeks_ago
|
def two_weeks_ago
|
||||||
2.weeks.ago.utc.beginning_of_day.to_s(:db)
|
2.weeks.ago.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def two_weeks_hence
|
def two_weeks_hence
|
||||||
2.weeks.from_now.utc.beginning_of_day.to_s(:db)
|
2.weeks.from_now.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def way_back
|
def way_back
|
||||||
Time.zone.local(2008,1,1).utc.to_s(:db)
|
Time.zone.local(2008,1,1).utc.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
%>
|
%>
|
||||||
|
|
2
test/fixtures/tags.yml
vendored
2
test/fixtures/tags.yml
vendored
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
<%
|
<%
|
||||||
def today
|
def today
|
||||||
Time.zone.now.utc.beginning_of_day.to_s(:db)
|
Time.zone.now.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
%>
|
%>
|
||||||
|
|
||||||
|
|
12
test/fixtures/todos.yml
vendored
12
test/fixtures/todos.yml
vendored
|
@ -8,27 +8,27 @@ def yesterday
|
||||||
Time.zone.now.utc.beginning_of_day - 1.day
|
Time.zone.now.utc.beginning_of_day - 1.day
|
||||||
end
|
end
|
||||||
def today
|
def today
|
||||||
Time.zone.now.utc.beginning_of_day.to_s(:db)
|
Time.zone.now.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def tomorrow
|
def tomorrow
|
||||||
(Time.zone.now.utc.beginning_of_day + 1.day).to_s(:db)
|
(Time.zone.now.utc.beginning_of_day + 1.day).to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def next_week
|
def next_week
|
||||||
1.week.from_now.utc.beginning_of_day.to_s(:db)
|
1.week.from_now.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def last_week
|
def last_week
|
||||||
1.week.ago.utc.beginning_of_day.to_s(:db)
|
1.week.ago.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def two_weeks_ago
|
def two_weeks_ago
|
||||||
2.weeks.ago.utc.beginning_of_day.to_s(:db)
|
2.weeks.ago.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
def two_weeks_hence
|
def two_weeks_hence
|
||||||
2.weeks.from_now.utc.beginning_of_day.to_s(:db)
|
2.weeks.from_now.utc.beginning_of_day.to_formatted_s(:db)
|
||||||
end
|
end
|
||||||
|
|
||||||
%>
|
%>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue