forked from Ivasoft/mattermost-mobile
Compare commits
43 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b5ee7c8908 | ||
|
|
aab0814b7f | ||
|
|
bf840785fb | ||
|
|
514e9cfd08 | ||
|
|
b5c3e95a4b | ||
|
|
e6547d7dc1 | ||
|
|
2b8bba7c24 | ||
|
|
9b9373e27b | ||
|
|
bc25a29c42 | ||
|
|
4c4dd8297d | ||
|
|
c3fc53a071 | ||
|
|
34af598a6d | ||
|
|
ff89f3530e | ||
|
|
8a95000bd0 | ||
|
|
21e1466068 | ||
|
|
4ebcba6069 | ||
|
|
b34ce42016 | ||
|
|
97d393a2ba | ||
|
|
fb03a88304 | ||
|
|
6e239d5566 | ||
|
|
72b95fa265 | ||
|
|
d19fc71ad4 | ||
|
|
526290bbdf | ||
|
|
962b38d024 | ||
|
|
51109c74d3 | ||
|
|
098230e79e | ||
|
|
8fa67bd5b4 | ||
|
|
6d7749a098 | ||
|
|
37479587cc | ||
|
|
3708b86b30 | ||
|
|
cabce2a808 | ||
|
|
4abb483f2c | ||
|
|
7a0bf1dc77 | ||
|
|
6cf1140a0f | ||
|
|
9506875683 | ||
|
|
679a897848 | ||
|
|
b5fd0284e8 | ||
|
|
67eea1750d | ||
|
|
d4e405485b | ||
|
|
1389e4f7f7 | ||
|
|
7cf4084fe5 | ||
|
|
6b7cffd6af | ||
|
|
dba3278c9f |
503
NOTICE.txt
503
NOTICE.txt
@@ -113,6 +113,52 @@ SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## @react-native-community/cookies
|
||||
|
||||
This product contains '@react-native-community/cookies' by React Native Community.
|
||||
|
||||
Cookie Manager for React Native
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/react-native-community/cookies
|
||||
|
||||
* LICENSE: MIT License
|
||||
|
||||
Copyright (c) 2020 React Native Community
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## @react-native-community/masked-view
|
||||
|
||||
This product contains '@react-native-community/masked-view' by React Native Community.
|
||||
|
||||
React Native Masked View Library
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/react-native-community/react-native-masked-view
|
||||
|
||||
* LICENSE: MIT
|
||||
|
||||
---
|
||||
|
||||
## @react-native-community/netinfo
|
||||
|
||||
This product contains 'netinfo' by Matt Oakes.
|
||||
@@ -148,38 +194,66 @@ SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## @sentry/react-native
|
||||
## @react-navigation/native
|
||||
|
||||
This product contains 'react-native-sentry' by Sentry.
|
||||
This product contains 'react-navigation' by Adam Miskiewicz.
|
||||
|
||||
Official Sentry SDK for react-native
|
||||
Routing and navigation for your React Native apps
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/getsentry/react-native-sentry
|
||||
* https://github.com/react-navigation/react-navigation#readme
|
||||
|
||||
* LICENSE: BSD-2-Clause
|
||||
|
||||
BSD License
|
||||
|
||||
For React Navigation software
|
||||
|
||||
Copyright (c) 2016-present, React Navigation Contributors. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
---
|
||||
|
||||
## @react-navigation/stack
|
||||
|
||||
This product contains 'react-navigation-stack' by react-navigation.
|
||||
|
||||
Stack navigator for React Navigation
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/react-navigation/stack
|
||||
|
||||
* LICENSE: MIT
|
||||
|
||||
The MIT License (MIT)
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 Sentry
|
||||
Copyright (c) 2017 React Native Community
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
@@ -398,6 +472,62 @@ limitations under the License.
|
||||
|
||||
---
|
||||
|
||||
## @sentry/react-native
|
||||
|
||||
This product contains 'react-native-sentry' by Sentry.
|
||||
|
||||
Official Sentry SDK for react-native
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/getsentry/react-native-sentry
|
||||
|
||||
* LICENSE: MIT
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2017 Sentry
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## analytics-react-native
|
||||
|
||||
This product contains a modified version of 'analytics-react-native' by Segment.
|
||||
|
||||
The hassle-free way to add analytics to your React-Native app.
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/segmentio/analytics-react-native
|
||||
|
||||
* LICENSE: The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2018 Segment.io, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## commonmark
|
||||
|
||||
This product contains a modified version of 'commonmark' by John MacFarlane.
|
||||
@@ -1430,41 +1560,6 @@ THE SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## @react-native-community/cookies
|
||||
|
||||
This product contains '@react-native-community/cookies' by @joeferraro.
|
||||
|
||||
Cookie manager for react native
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/react-native-community/cookies
|
||||
|
||||
* LICENSE: MIT
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 React Native Community
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-device-info
|
||||
|
||||
This product contains a modified version of 'react-native-device-info' by Rebecca Hughes.
|
||||
@@ -1570,6 +1665,39 @@ SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-elements
|
||||
|
||||
This product contains 'react-native-elements' by React Native Elements.
|
||||
|
||||
Cross Platform React Native UI Toolkit
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/react-native-elements/react-native-elements
|
||||
|
||||
* LICENSE: The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Nader Dabit
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-fast-image
|
||||
|
||||
This product contains 'react-native-fast-image' by Dylan Vann.
|
||||
@@ -1605,6 +1733,39 @@ SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-file-viewer
|
||||
|
||||
This product contains 'react-native-file-viewer' by Vincenzo Scamporlino.
|
||||
|
||||
Native file viewer for React Native. Preview any type of file supported by the mobile device.
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/vinzscam/react-native-file-viewer
|
||||
|
||||
* LICENSE: MIT License
|
||||
|
||||
Copyright (c) 2017 Vincenzo Scamporlino
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-gesture-handler
|
||||
|
||||
This product contains 'react-native-gesture-handler' by Krzysztof Magiera.
|
||||
@@ -1916,6 +2077,39 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH RE
|
||||
|
||||
---
|
||||
|
||||
## react-native-localize
|
||||
|
||||
This product contains 'react-native-localize' by React Native Community.
|
||||
|
||||
A toolbox for your React Native app localization (formerly react-native-languages)
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/react-native-community/react-native-localize
|
||||
|
||||
* LICENSE: MIT License
|
||||
|
||||
Copyright (c) 2017-present, Mathieu Acthernoene
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-mmkv-storage
|
||||
|
||||
This product contains 'react-native-mmkv-storage' by Ammar Ahmed.
|
||||
@@ -2090,6 +2284,39 @@ SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-reanimated
|
||||
|
||||
This product contains 'react-native-reanimated' by Software Mansion.
|
||||
|
||||
React Native's Animated library reimplemented
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/software-mansion/react-native-reanimated
|
||||
|
||||
* LICENSE: The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Krzysztof Magiera
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-safe-area
|
||||
|
||||
This product contains 'react-native-safe-area' by Masayuki Iwai.
|
||||
@@ -2125,6 +2352,72 @@ SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-safe-area-context
|
||||
|
||||
This product contains 'react-native-safe-area-context' by Th3rdwave.
|
||||
|
||||
A flexible way to handle safe area insets in JS. Also works on Android and Web
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/th3rdwave/react-native-safe-area-context
|
||||
|
||||
* LICENSE: MIT License
|
||||
|
||||
Copyright (c) 2019 Th3rd Wave
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-screens
|
||||
|
||||
This product contains 'react-native-screens' by Software Mansion.
|
||||
|
||||
Native navigation primitives for your React Native app.
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/software-mansion/react-native-screens
|
||||
|
||||
* LICENSE: The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2018 Krzysztof Magiera
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-native-section-list-get-item-layout
|
||||
|
||||
This product contains 'react-native-section-list-get-item-layout' by Jan Soendermann.
|
||||
@@ -2420,69 +2713,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## react-navigation
|
||||
|
||||
This product contains 'react-navigation' by Adam Miskiewicz.
|
||||
|
||||
Routing and navigation for your React Native apps
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/react-navigation/react-navigation#readme
|
||||
|
||||
* LICENSE: BSD-2-Clause
|
||||
|
||||
BSD License
|
||||
|
||||
For React Navigation software
|
||||
|
||||
Copyright (c) 2016-present, React Navigation Contributors. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
---
|
||||
|
||||
## react-navigation-stack
|
||||
|
||||
This product contains 'react-navigation-stack' by react-navigation.
|
||||
|
||||
Stack navigator for React Navigation
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/react-navigation/stack
|
||||
|
||||
* LICENSE: MIT
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2017 React Native Community
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
----
|
||||
|
||||
## react-redux
|
||||
@@ -2695,41 +2925,6 @@ SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## redux-reset
|
||||
|
||||
This product contains 'redux-reset' by Wang Zixiao.
|
||||
|
||||
Gives redux the ability to reset the state
|
||||
|
||||
* HOMEPAGE:
|
||||
* https://github.com/wwayne/redux-reset
|
||||
|
||||
* LICENSE: MIT
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Wang Zixiao
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## redux-thunk
|
||||
|
||||
This product contains 'redux-thunk' by Dan Abramov.
|
||||
|
||||
@@ -133,8 +133,8 @@ android {
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
missingDimensionStrategy "RNNotifications.reactNativeVersion", "reactNative60"
|
||||
versionCode 293
|
||||
versionName "1.31.0"
|
||||
versionCode 302
|
||||
versionName "1.32.0"
|
||||
multiDexEnabled = true
|
||||
ndk {
|
||||
abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
|
||||
|
||||
@@ -105,7 +105,7 @@ public class ReceiptDelivery {
|
||||
try {
|
||||
Response response = client.newCall(request).execute();
|
||||
String responseBody = response.body().string();
|
||||
if (response.code() != 200 || !isIdLoaded) {
|
||||
if (response.code() != 200) {
|
||||
throw new Exception(responseBody);
|
||||
}
|
||||
JSONObject jsonResponse = new JSONObject(responseBody);
|
||||
@@ -120,14 +120,16 @@ public class ReceiptDelivery {
|
||||
promise.resolve(bundle);
|
||||
} catch (Exception e) {
|
||||
Log.e("ReactNative", "Receipt delivery failed to send");
|
||||
try {
|
||||
reRequestCount++;
|
||||
if (reRequestCount < FIBONACCI_BACKOFFS.length) {
|
||||
Log.i("ReactNative", "Retry attempt " + reRequestCount + " with backoff delay: " + FIBONACCI_BACKOFFS[reRequestCount] + " seconds");
|
||||
Thread.sleep(FIBONACCI_BACKOFFS[reRequestCount] * 1000);
|
||||
makeServerRequest(client, request, isIdLoaded, reRequestCount, promise);
|
||||
}
|
||||
} catch(InterruptedException ie) {}
|
||||
if (isIdLoaded) {
|
||||
try {
|
||||
reRequestCount++;
|
||||
if (reRequestCount < FIBONACCI_BACKOFFS.length) {
|
||||
Log.i("ReactNative", "Retry attempt " + reRequestCount + " with backoff delay: " + FIBONACCI_BACKOFFS[reRequestCount] + " seconds");
|
||||
Thread.sleep(FIBONACCI_BACKOFFS[reRequestCount] * 1000);
|
||||
makeServerRequest(client, request, isIdLoaded, reRequestCount, promise);
|
||||
}
|
||||
} catch(InterruptedException ie) {}
|
||||
}
|
||||
|
||||
promise.reject("Receipt delivery failure", e.toString());
|
||||
}
|
||||
|
||||
186
app/actions/helpers/channels.test.js
Normal file
186
app/actions/helpers/channels.test.js
Normal file
@@ -0,0 +1,186 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
/* eslint-disable no-import-assign */
|
||||
|
||||
import {Client4} from '@mm-redux/client';
|
||||
|
||||
import {Preferences} from '@mm-redux/constants';
|
||||
import {PreferenceTypes} from '@mm-redux/action_types';
|
||||
|
||||
import * as CommonSelectors from '@mm-redux/selectors/entities/common';
|
||||
import * as PreferenceSelectors from '@mm-redux/selectors/entities/preferences';
|
||||
import * as PreferenceUtils from '@mm-redux/utils/preference_utils';
|
||||
|
||||
import {
|
||||
makeDirectChannelVisibleIfNecessary,
|
||||
makeGroupMessageVisibleIfNecessary,
|
||||
} from './channels';
|
||||
|
||||
describe('Actions.Helpers.Channels', () => {
|
||||
describe('makeDirectChannelVisibleIfNecessary', () => {
|
||||
const state = {};
|
||||
const currentUserId = 'current-user-id';
|
||||
const otherUserId = 'other-user-id';
|
||||
|
||||
CommonSelectors.getCurrentUserId = jest.fn().mockReturnValue(currentUserId);
|
||||
PreferenceSelectors.getMyPreferences = jest.fn();
|
||||
PreferenceUtils.getPreferenceKey = jest.fn();
|
||||
Client4.savePreferences = jest.fn();
|
||||
|
||||
beforeEach(() => {
|
||||
PreferenceSelectors.getMyPreferences.mockClear();
|
||||
PreferenceUtils.getPreferenceKey.mockClear();
|
||||
Client4.savePreferences.mockClear();
|
||||
});
|
||||
|
||||
it('makes direct channel visible when visibility preference does not exist', () => {
|
||||
PreferenceSelectors.getMyPreferences.mockReturnValueOnce({});
|
||||
|
||||
const expectedResult = {
|
||||
type: PreferenceTypes.RECEIVED_PREFERENCES,
|
||||
data: [{
|
||||
user_id: currentUserId,
|
||||
category: Preferences.CATEGORY_DIRECT_CHANNEL_SHOW,
|
||||
name: otherUserId,
|
||||
value: 'true',
|
||||
}],
|
||||
};
|
||||
|
||||
const result = makeDirectChannelVisibleIfNecessary(state, otherUserId);
|
||||
expect(result).toStrictEqual(expectedResult);
|
||||
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledTimes(1);
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledWith(Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, otherUserId);
|
||||
expect(Client4.savePreferences).toHaveBeenCalledTimes(1);
|
||||
expect(Client4.savePreferences).toHaveBeenCalledWith(currentUserId, expectedResult.data);
|
||||
});
|
||||
|
||||
it('makes direct channel visible when visibilty preference is false', () => {
|
||||
const preference = {value: 'false'};
|
||||
const preferenceKey = 'preference-key';
|
||||
PreferenceSelectors.getMyPreferences.mockReturnValueOnce({
|
||||
[preferenceKey]: preference,
|
||||
});
|
||||
PreferenceUtils.getPreferenceKey.mockReturnValueOnce(preferenceKey);
|
||||
|
||||
const expectedResult = {
|
||||
type: PreferenceTypes.RECEIVED_PREFERENCES,
|
||||
data: [{
|
||||
user_id: currentUserId,
|
||||
category: Preferences.CATEGORY_DIRECT_CHANNEL_SHOW,
|
||||
name: otherUserId,
|
||||
value: 'true',
|
||||
}],
|
||||
};
|
||||
|
||||
const result = makeDirectChannelVisibleIfNecessary(state, otherUserId);
|
||||
expect(result).toStrictEqual(expectedResult);
|
||||
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledTimes(1);
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledWith(Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, otherUserId);
|
||||
expect(Client4.savePreferences).toHaveBeenCalledTimes(1);
|
||||
expect(Client4.savePreferences).toHaveBeenCalledWith(currentUserId, expectedResult.data);
|
||||
});
|
||||
|
||||
it('does nothing if direct channel visibility preference is true', () => {
|
||||
const preference = {value: 'true'};
|
||||
const preferenceKey = 'preference-key';
|
||||
PreferenceSelectors.getMyPreferences.mockReturnValueOnce({
|
||||
[preferenceKey]: preference,
|
||||
});
|
||||
PreferenceUtils.getPreferenceKey.mockReturnValueOnce(preferenceKey);
|
||||
|
||||
const result = makeDirectChannelVisibleIfNecessary(state, otherUserId);
|
||||
expect(result).toEqual(null);
|
||||
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledTimes(1);
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledWith(Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, otherUserId);
|
||||
expect(Client4.savePreferences).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('makeGroupMessageVisibleIfNecessary', () => {
|
||||
const state = {};
|
||||
const currentUserId = 'current-user-id';
|
||||
const channelId = 'channel-id';
|
||||
|
||||
CommonSelectors.getCurrentUserId = jest.fn().mockReturnValue(currentUserId);
|
||||
PreferenceSelectors.getMyPreferences = jest.fn();
|
||||
PreferenceUtils.getPreferenceKey = jest.fn();
|
||||
Client4.savePreferences = jest.fn();
|
||||
|
||||
beforeEach(() => {
|
||||
PreferenceSelectors.getMyPreferences.mockClear();
|
||||
PreferenceUtils.getPreferenceKey.mockClear();
|
||||
Client4.savePreferences.mockClear();
|
||||
});
|
||||
|
||||
it('makes group channel visible when visibility preference does not exist', async () => {
|
||||
PreferenceSelectors.getMyPreferences.mockReturnValueOnce({});
|
||||
|
||||
const expectedPreferenceResult = {
|
||||
type: PreferenceTypes.RECEIVED_PREFERENCES,
|
||||
data: [{
|
||||
user_id: currentUserId,
|
||||
category: Preferences.CATEGORY_GROUP_CHANNEL_SHOW,
|
||||
name: channelId,
|
||||
value: 'true',
|
||||
}],
|
||||
};
|
||||
|
||||
const result = await makeGroupMessageVisibleIfNecessary(state, channelId);
|
||||
expect(result.length).toEqual(2);
|
||||
expect(result[1]).toStrictEqual(expectedPreferenceResult);
|
||||
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledTimes(1);
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledWith(Preferences.CATEGORY_GROUP_CHANNEL_SHOW, channelId);
|
||||
expect(Client4.savePreferences).toHaveBeenCalledTimes(1);
|
||||
expect(Client4.savePreferences).toHaveBeenCalledWith(currentUserId, expectedPreferenceResult.data);
|
||||
});
|
||||
|
||||
it('makes group channel visible when visibilty preference is false', async () => {
|
||||
const preference = {value: 'false'};
|
||||
const preferenceKey = 'preference-key';
|
||||
PreferenceSelectors.getMyPreferences.mockReturnValueOnce({
|
||||
[preferenceKey]: preference,
|
||||
});
|
||||
PreferenceUtils.getPreferenceKey.mockReturnValueOnce(preferenceKey);
|
||||
|
||||
const expectedPreferenceResult = {
|
||||
type: PreferenceTypes.RECEIVED_PREFERENCES,
|
||||
data: [{
|
||||
user_id: currentUserId,
|
||||
category: Preferences.CATEGORY_GROUP_CHANNEL_SHOW,
|
||||
name: channelId,
|
||||
value: 'true',
|
||||
}],
|
||||
};
|
||||
|
||||
const result = await makeGroupMessageVisibleIfNecessary(state, channelId);
|
||||
expect(result.length).toEqual(2);
|
||||
expect(result[1]).toStrictEqual(expectedPreferenceResult);
|
||||
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledTimes(1);
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledWith(Preferences.CATEGORY_GROUP_CHANNEL_SHOW, channelId);
|
||||
expect(Client4.savePreferences).toHaveBeenCalledTimes(1);
|
||||
expect(Client4.savePreferences).toHaveBeenCalledWith(currentUserId, expectedPreferenceResult.data);
|
||||
});
|
||||
|
||||
it('does nothing if group channel visibility preference is true', async () => {
|
||||
const preference = {value: 'true'};
|
||||
const preferenceKey = 'preference-key';
|
||||
PreferenceSelectors.getMyPreferences.mockReturnValueOnce({
|
||||
[preferenceKey]: preference,
|
||||
});
|
||||
PreferenceUtils.getPreferenceKey.mockReturnValueOnce(preferenceKey);
|
||||
|
||||
const result = await makeGroupMessageVisibleIfNecessary(state, channelId);
|
||||
expect(result).toEqual(null);
|
||||
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledTimes(1);
|
||||
expect(PreferenceUtils.getPreferenceKey).toHaveBeenCalledWith(Preferences.CATEGORY_GROUP_CHANNEL_SHOW, channelId);
|
||||
expect(Client4.savePreferences).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -169,6 +169,7 @@ export function makeDirectChannelVisibleIfNecessary(state: GlobalState, otherUse
|
||||
value: 'true',
|
||||
};
|
||||
|
||||
Client4.savePreferences(currentUserId, [preference]);
|
||||
return {
|
||||
type: PreferenceTypes.RECEIVED_PREFERENCES,
|
||||
data: [preference],
|
||||
@@ -193,6 +194,8 @@ export async function makeGroupMessageVisibleIfNecessary(state: GlobalState, cha
|
||||
value: 'true',
|
||||
};
|
||||
|
||||
Client4.savePreferences(currentUserId, [preference]);
|
||||
|
||||
const profilesInChannel = await fetchUsersInChannel(state, channelId);
|
||||
|
||||
return [{
|
||||
@@ -368,11 +371,15 @@ async function getProfilesFromPromises(promises: Array<Promise<ActionResult>>):
|
||||
return null;
|
||||
}
|
||||
|
||||
const result = await Promise.all(promises);
|
||||
const data = result.filter((p: any) => !p.error);
|
||||
try {
|
||||
const result = await Promise.all(promises);
|
||||
const data = result.filter((p: any) => !p.error);
|
||||
|
||||
return {
|
||||
type: UserTypes.RECEIVED_BATCHED_PROFILES_IN_CHANNEL,
|
||||
data,
|
||||
};
|
||||
return {
|
||||
type: UserTypes.RECEIVED_BATCHED_PROFILES_IN_CHANNEL,
|
||||
data,
|
||||
};
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import {Keyboard, Platform} from 'react-native';
|
||||
import {Navigation} from 'react-native-navigation';
|
||||
import merge from 'deepmerge';
|
||||
|
||||
import {Preferences} from '@mm-redux/constants';
|
||||
import {getTheme} from '@mm-redux/selectors/entities/preferences';
|
||||
|
||||
import EphemeralStore from '@store/ephemeral_store';
|
||||
@@ -83,7 +84,7 @@ export function resetToChannel(passProps = {}) {
|
||||
}
|
||||
|
||||
export function resetToSelectServer(allowOtherServers) {
|
||||
const theme = getThemeFromState();
|
||||
const theme = Preferences.THEMES.default;
|
||||
|
||||
Navigation.setRoot({
|
||||
root: {
|
||||
|
||||
@@ -26,7 +26,7 @@ import {
|
||||
import {getCurrentUserId} from '@mm-redux/selectors/entities/users';
|
||||
import {getTeamByName} from '@mm-redux/selectors/entities/teams';
|
||||
|
||||
import {getChannelByName as selectChannelByName} from '@mm-redux/utils/channel_utils';
|
||||
import {getChannelByName as selectChannelByName, getChannelsIdForTeam} from '@mm-redux/utils/channel_utils';
|
||||
import EventEmitter from '@mm-redux/utils/event_emitter';
|
||||
|
||||
import {loadSidebarDirectMessagesProfiles} from '@actions/helpers/channels';
|
||||
@@ -224,10 +224,15 @@ export function handleSelectChannel(channelId) {
|
||||
const channel = channels[channelId];
|
||||
const member = myMembers[channelId];
|
||||
|
||||
dispatch(loadPostsIfNecessaryWithRetry(channelId));
|
||||
if (channel) {
|
||||
dispatch(loadPostsIfNecessaryWithRetry(channelId));
|
||||
|
||||
if (channel && currentChannelId !== channelId) {
|
||||
const actions = markAsViewedAndReadBatch(state, channelId, currentChannelId);
|
||||
let previousChannelId = null;
|
||||
if (currentChannelId !== channelId) {
|
||||
previousChannelId = currentChannelId;
|
||||
}
|
||||
|
||||
const actions = markAsViewedAndReadBatch(state, channelId, previousChannelId);
|
||||
actions.push({
|
||||
type: ChannelTypes.SELECT_CHANNEL,
|
||||
data: channelId,
|
||||
@@ -237,10 +242,11 @@ export function handleSelectChannel(channelId) {
|
||||
teamId: channel.team_id || currentTeamId,
|
||||
},
|
||||
});
|
||||
dispatch(batchActions(actions, 'BATCH_SWITCH_CHANNEL'));
|
||||
}
|
||||
|
||||
console.log('channel switch to', channel?.display_name, channelId, (Date.now() - dt), 'ms'); //eslint-disable-line
|
||||
dispatch(batchActions(actions, 'BATCH_SWITCH_CHANNEL'));
|
||||
|
||||
console.log('channel switch to', channel?.display_name, channelId, (Date.now() - dt), 'ms'); //eslint-disable-line
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -321,7 +327,9 @@ export function markAsViewedAndReadBatch(state, channelId, prevChannelId = '', m
|
||||
const prevChannel = (!prevChanManuallyUnread && prevChannelId) ? channels[prevChannelId] : null; // May be null since prevChannelId is optional
|
||||
|
||||
if (markOnServer) {
|
||||
Client4.viewMyChannel(channelId, prevChanManuallyUnread ? '' : prevChannelId);
|
||||
Client4.viewMyChannel(channelId, prevChanManuallyUnread ? '' : prevChannelId).catch(() => {
|
||||
// do nothing just adding the handler to avoid the warning
|
||||
});
|
||||
}
|
||||
|
||||
if (member) {
|
||||
@@ -600,7 +608,12 @@ export function loadChannelsForTeam(teamId, skipDispatch = false) {
|
||||
return async (dispatch, getState) => {
|
||||
const state = getState();
|
||||
const currentUserId = getCurrentUserId(state);
|
||||
const data = {sync: true, teamId};
|
||||
const data = {
|
||||
sync: true,
|
||||
teamId,
|
||||
teamChannels: getChannelsIdForTeam(state, teamId),
|
||||
};
|
||||
|
||||
const actions = [];
|
||||
|
||||
if (currentUserId) {
|
||||
@@ -639,12 +652,17 @@ export function loadChannelsForTeam(teamId, skipDispatch = false) {
|
||||
}
|
||||
|
||||
if (rolesToLoad.size > 0) {
|
||||
data.roles = await Client4.getRolesByNames(Array.from(rolesToLoad));
|
||||
if (data.roles.length) {
|
||||
actions.push({
|
||||
type: RoleTypes.RECEIVED_ROLES,
|
||||
data: data.roles,
|
||||
});
|
||||
try {
|
||||
data.roles = await Client4.getRolesByNames(Array.from(rolesToLoad));
|
||||
if (data.roles.length) {
|
||||
actions.push({
|
||||
type: RoleTypes.RECEIVED_ROLES,
|
||||
data: data.roles,
|
||||
});
|
||||
}
|
||||
} catch {
|
||||
//eslint-disable-next-line no-console
|
||||
console.log('Could not retrieve channel members roles for the user');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -320,7 +320,7 @@ describe('Actions.Views.Channel', () => {
|
||||
teamId: currentTeamId,
|
||||
},
|
||||
};
|
||||
if (channelId.includes('not') || channelId === currentChannelId) {
|
||||
if (channelId.includes('not')) {
|
||||
expect(selectChannelWithMember).toBe(undefined);
|
||||
} else {
|
||||
expect(selectChannelWithMember).toStrictEqual(expectedSelectChannelWithMember);
|
||||
|
||||
@@ -87,7 +87,10 @@ export function getPosts(channelId, page = 0, perPage = Posts.POST_CHUNK_SIZE) {
|
||||
const postForChannel = postsInChannel[channelId];
|
||||
const data = await Client4.getPosts(channelId, page, perPage);
|
||||
const posts = Object.values(data.posts);
|
||||
const actions = [];
|
||||
const actions = [{
|
||||
type: ViewTypes.SET_CHANNEL_RETRY_FAILED,
|
||||
failed: false,
|
||||
}];
|
||||
|
||||
if (posts?.length) {
|
||||
actions.push(receivedPosts(data));
|
||||
|
||||
@@ -145,7 +145,7 @@ export function purgeOfflineStore() {
|
||||
|
||||
dispatch({
|
||||
type: General.OFFLINE_STORE_PURGE,
|
||||
state: getStateForReset(initialState, currentState),
|
||||
data: getStateForReset(initialState, currentState),
|
||||
});
|
||||
|
||||
EventEmitter.emit(NavigationTypes.RESTART_APP);
|
||||
|
||||
@@ -32,10 +32,16 @@ export function selectDefaultTeam() {
|
||||
const state = getState();
|
||||
|
||||
const {ExperimentalPrimaryTeam} = getConfig(state);
|
||||
const {teams: allTeams, myMembers} = state.entities.teams;
|
||||
const teams = Object.keys(myMembers).map((key) => allTeams[key]);
|
||||
const {teams, myMembers} = state.entities.teams;
|
||||
const myTeams = Object.keys(teams).reduce((result, id) => {
|
||||
if (myMembers[id]) {
|
||||
result.push(teams[id]);
|
||||
}
|
||||
|
||||
let defaultTeam = selectFirstAvailableTeam(teams, ExperimentalPrimaryTeam);
|
||||
return result;
|
||||
}, []);
|
||||
|
||||
let defaultTeam = selectFirstAvailableTeam(myTeams, ExperimentalPrimaryTeam);
|
||||
|
||||
if (defaultTeam) {
|
||||
dispatch(handleTeamChange(defaultTeam.id));
|
||||
|
||||
@@ -183,13 +183,17 @@ export function login(loginId, password, mfaToken, ldapOnly = false) {
|
||||
}
|
||||
|
||||
export function ssoLogin(token) {
|
||||
return async (dispatch) => {
|
||||
return async (dispatch, getState) => {
|
||||
const state = getState();
|
||||
const deviceToken = state.entities?.general?.deviceToken;
|
||||
|
||||
Client4.setToken(token);
|
||||
await setCSRFFromCookie(Client4.getUrl());
|
||||
|
||||
const result = await dispatch(loadMe());
|
||||
|
||||
if (!result.error) {
|
||||
dispatch(completeLogin(result.data.user));
|
||||
dispatch(completeLogin(result.data.user, deviceToken));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,6 @@ import {
|
||||
Text,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import Fuse from 'fuse.js';
|
||||
|
||||
import AutocompleteDivider from '@components/autocomplete/autocomplete_divider';
|
||||
import Emoji from '@components/emoji';
|
||||
@@ -21,15 +20,6 @@ import {makeStyleSheetFromTheme} from '@utils/theme';
|
||||
const EMOJI_REGEX = /(^|\s|^\+|^-)(:([^:\s]*))$/i;
|
||||
const EMOJI_REGEX_WITHOUT_PREFIX = /\B(:([^:\s]*))$/i;
|
||||
|
||||
const options = {
|
||||
shouldSort: true,
|
||||
threshold: 0.3,
|
||||
location: 0,
|
||||
distance: 100,
|
||||
minMatchCharLength: 2,
|
||||
maxPatternLength: 32,
|
||||
};
|
||||
|
||||
export default class EmojiSuggestion extends PureComponent {
|
||||
static propTypes = {
|
||||
actions: PropTypes.shape({
|
||||
@@ -39,6 +29,7 @@ export default class EmojiSuggestion extends PureComponent {
|
||||
cursorPosition: PropTypes.number,
|
||||
customEmojisEnabled: PropTypes.bool,
|
||||
emojis: PropTypes.array.isRequired,
|
||||
fuse: PropTypes.object.isRequired,
|
||||
isSearch: PropTypes.bool,
|
||||
maxListHeight: PropTypes.number,
|
||||
theme: PropTypes.object.isRequired,
|
||||
@@ -63,23 +54,16 @@ export default class EmojiSuggestion extends PureComponent {
|
||||
super(props);
|
||||
|
||||
this.matchTerm = '';
|
||||
const list = props.emojis || [];
|
||||
this.fuse = new Fuse(list, options);
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps) {
|
||||
componentDidUpdate() {
|
||||
if (this.props.isSearch) {
|
||||
return;
|
||||
}
|
||||
|
||||
const {cursorPosition, emojis, value} = this.props;
|
||||
const {cursorPosition, value} = this.props;
|
||||
const match = value.substring(0, cursorPosition).match(EMOJI_REGEX);
|
||||
|
||||
if (prevProps.emojis !== emojis) {
|
||||
const list = emojis || [];
|
||||
this.fuse = new Fuse(list, options);
|
||||
}
|
||||
|
||||
if (!match || this.state.emojiComplete) {
|
||||
this.resetAutocomplete();
|
||||
return;
|
||||
@@ -91,7 +75,7 @@ export default class EmojiSuggestion extends PureComponent {
|
||||
if (this.props.customEmojisEnabled) {
|
||||
this.props.actions.autocompleteCustomEmojis(this.matchTerm);
|
||||
}
|
||||
this.searchEmoji(this.matchTerm);
|
||||
this.searchEmojis(this.matchTerm);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -145,17 +129,6 @@ export default class EmojiSuggestion extends PureComponent {
|
||||
|
||||
getItemLayout = ({index}) => ({length: 40, offset: 40 * index, index})
|
||||
|
||||
handleFuzzySearch = (matchTerm) => {
|
||||
const {emojis} = this.props;
|
||||
|
||||
clearTimeout(this.searchTermTimeout);
|
||||
this.searchTermTimeout = setTimeout(() => {
|
||||
const results = this.fuse.search(matchTerm.toLowerCase()).map((r) => r.refIndex);
|
||||
const data = results.map((index) => emojis[index]);
|
||||
this.setEmojiData(data, matchTerm);
|
||||
}, 100);
|
||||
};
|
||||
|
||||
keyExtractor = (item) => item;
|
||||
|
||||
renderItem = ({item}) => {
|
||||
@@ -188,26 +161,38 @@ export default class EmojiSuggestion extends PureComponent {
|
||||
this.props.onResultCountChange(0);
|
||||
}
|
||||
|
||||
searchEmoji = (matchTerm) => {
|
||||
if (matchTerm.length) {
|
||||
this.handleFuzzySearch(matchTerm);
|
||||
} else {
|
||||
this.setEmojiData(this.props.emojis);
|
||||
}
|
||||
}
|
||||
searchEmojis = (searchTerm) => {
|
||||
const {emojis, fuse} = this.props;
|
||||
|
||||
setEmojiData = (data, matchTerm = null) => {
|
||||
let sorter = compareEmojis;
|
||||
if (matchTerm) {
|
||||
sorter = (a, b) => compareEmojis(a, b, matchTerm);
|
||||
if (searchTerm.trim().length) {
|
||||
const searchTermLowerCase = searchTerm.toLowerCase();
|
||||
|
||||
sorter = (a, b) => compareEmojis(a, b, searchTermLowerCase);
|
||||
clearTimeout(this.searchTermTimeout);
|
||||
|
||||
this.searchTermTimeout = setTimeout(() => {
|
||||
const fuzz = fuse.search(searchTerm);
|
||||
const results = fuzz.reduce((values, r) => {
|
||||
const v = r.matches[0]?.value;
|
||||
if (v) {
|
||||
values.push(v);
|
||||
}
|
||||
|
||||
return values;
|
||||
}, []);
|
||||
const data = results.sort(sorter);
|
||||
this.setState({
|
||||
active: data.length > 0,
|
||||
dataSource: data,
|
||||
});
|
||||
}, 100);
|
||||
} else {
|
||||
this.setState({
|
||||
active: emojis.length > 0,
|
||||
dataSource: emojis.sort(sorter),
|
||||
});
|
||||
}
|
||||
|
||||
this.setState({
|
||||
active: data.length > 0,
|
||||
dataSource: data.sort(sorter),
|
||||
});
|
||||
|
||||
this.props.onResultCountChange(data.length);
|
||||
};
|
||||
|
||||
render() {
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import React from 'react';
|
||||
import Fuse from 'fuse.js';
|
||||
|
||||
import Preferences from '@mm-redux/constants/preferences';
|
||||
import {selectEmojisByName} from '@selectors/emojis';
|
||||
import initialState from '@store/initial_state';
|
||||
import {shallowWithIntl} from 'test/intl-test-helper';
|
||||
|
||||
import EmojiSuggestion from './emoji_suggestion';
|
||||
|
||||
jest.useFakeTimers();
|
||||
|
||||
describe('components/autocomplete/emoji_suggestion', () => {
|
||||
const state = {
|
||||
...initialState,
|
||||
views: {
|
||||
recentEmojis: [],
|
||||
},
|
||||
};
|
||||
const emojis = selectEmojisByName(state);
|
||||
const options = {
|
||||
shouldSort: false,
|
||||
threshold: 0.3,
|
||||
location: 0,
|
||||
distance: 10,
|
||||
includeMatches: true,
|
||||
findAllMatches: true,
|
||||
};
|
||||
const fuse = new Fuse(emojis, options);
|
||||
const baseProps = {
|
||||
actions: {
|
||||
addReactionToLatestPost: jest.fn(),
|
||||
autocompleteCustomEmojis: jest.fn(),
|
||||
},
|
||||
cursorPosition: 0,
|
||||
customEmojisEnabled: false,
|
||||
emojis,
|
||||
fuse,
|
||||
isSearch: false,
|
||||
theme: Preferences.THEMES.default,
|
||||
onChangeText: jest.fn(),
|
||||
onResultCountChange: jest.fn(),
|
||||
rootId: '',
|
||||
value: '',
|
||||
nestedScrollEnabled: false,
|
||||
};
|
||||
|
||||
test('should match snapshot', () => {
|
||||
const wrapper = shallowWithIntl(<EmojiSuggestion {...baseProps}/>);
|
||||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
|
||||
wrapper.setProps({cursorPosition: 1, value: ':1'});
|
||||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('searchEmojis should return the right values on fuse', () => {
|
||||
const output1 = ['100', '1234', '1st_place_medal', '+1', '-1', 'u7121'];
|
||||
const output2 = ['+1'];
|
||||
const output3 = ['-1'];
|
||||
|
||||
const wrapper = shallowWithIntl(<EmojiSuggestion {...baseProps}/>);
|
||||
wrapper.instance().searchEmojis('');
|
||||
expect(wrapper.state('dataSource')).toEqual(baseProps.emojis);
|
||||
|
||||
wrapper.instance().searchEmojis('1');
|
||||
jest.runAllTimers();
|
||||
setTimeout(() => {
|
||||
expect(wrapper.state('dataSource')).toEqual(output1);
|
||||
}, 100);
|
||||
|
||||
wrapper.instance().searchEmojis('+');
|
||||
jest.runAllTimers();
|
||||
setTimeout(() => {
|
||||
expect(wrapper.state('dataSource')).toEqual(output2);
|
||||
}, 100);
|
||||
|
||||
wrapper.instance().searchEmojis('-');
|
||||
jest.runAllTimers();
|
||||
setTimeout(() => {
|
||||
expect(wrapper.state('dataSource')).toEqual(output3);
|
||||
}, 100);
|
||||
});
|
||||
});
|
||||
@@ -3,34 +3,32 @@
|
||||
|
||||
import {connect} from 'react-redux';
|
||||
import {bindActionCreators} from 'redux';
|
||||
import Fuse from 'fuse.js';
|
||||
|
||||
import {getCustomEmojisByName} from '@mm-redux/selectors/entities/emojis';
|
||||
import {getConfig} from '@mm-redux/selectors/entities/general';
|
||||
import {addReactionToLatestPost} from '@actions/views/emoji';
|
||||
import {autocompleteCustomEmojis} from '@mm-redux/actions/emojis';
|
||||
import {createIdsSelector} from '@mm-redux/utils/helpers';
|
||||
|
||||
import {addReactionToLatestPost} from 'app/actions/views/emoji';
|
||||
import {getConfig} from '@mm-redux/selectors/entities/general';
|
||||
import {getTheme} from '@mm-redux/selectors/entities/preferences';
|
||||
import {EmojiIndicesByAlias} from 'app/utils/emojis';
|
||||
import {selectEmojisByName} from '@selectors/emojis';
|
||||
|
||||
import EmojiSuggestion from './emoji_suggestion';
|
||||
|
||||
const getEmojisByName = createIdsSelector(
|
||||
getCustomEmojisByName,
|
||||
(customEmojis) => {
|
||||
const emoticons = new Set();
|
||||
for (const [key] of [...EmojiIndicesByAlias.entries(), ...customEmojis.entries()]) {
|
||||
emoticons.add(key);
|
||||
}
|
||||
|
||||
return Array.from(emoticons);
|
||||
},
|
||||
);
|
||||
|
||||
function mapStateToProps(state) {
|
||||
const emojis = getEmojisByName(state);
|
||||
const emojis = selectEmojisByName(state);
|
||||
const options = {
|
||||
shouldSort: false,
|
||||
threshold: 0.3,
|
||||
location: 0,
|
||||
distance: 10,
|
||||
includeMatches: true,
|
||||
findAllMatches: true,
|
||||
};
|
||||
|
||||
const list = emojis.length ? emojis : [];
|
||||
const fuse = new Fuse(list, options);
|
||||
|
||||
return {
|
||||
fuse,
|
||||
emojis,
|
||||
customEmojisEnabled: getConfig(state).EnableCustomEmoji === 'true',
|
||||
theme: getTheme(state),
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -47,25 +47,27 @@ export default class EmojiPicker extends EmojiPickerBase {
|
||||
keyboardVerticalOffset={keyboardOffset}
|
||||
style={styles.flex}
|
||||
>
|
||||
<View style={[styles.searchBar, padding(isLandscape)]}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.8)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.changeSearchTerm}
|
||||
onCancelButtonPress={this.cancelSearch}
|
||||
autoCapitalize='none'
|
||||
value={searchTerm}
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
onAnimationComplete={this.setRebuiltEmojis}
|
||||
/>
|
||||
<View style={styles.searchBar}>
|
||||
<View style={padding(isLandscape)}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.8)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.changeSearchTerm}
|
||||
onCancelButtonPress={this.cancelSearch}
|
||||
autoCapitalize='none'
|
||||
value={searchTerm}
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
onAnimationComplete={this.setRebuiltEmojis}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<View style={[styles.container]}>
|
||||
{this.renderListComponent(shorten)}
|
||||
|
||||
@@ -2,14 +2,35 @@
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import React from 'react';
|
||||
import Fuse from 'fuse.js';
|
||||
|
||||
import Preferences from '@mm-redux/constants/preferences';
|
||||
|
||||
import {selectEmojisByName, selectEmojisBySection} from '@selectors/emojis';
|
||||
import initialState from '@store/initial_state';
|
||||
import {shallowWithIntl} from 'test/intl-test-helper';
|
||||
|
||||
import {filterEmojiSearchInput} from './emoji_picker_base';
|
||||
import EmojiPicker from './emoji_picker.ios';
|
||||
|
||||
describe('components/emoji_picker/EmojiPicker', () => {
|
||||
describe('components/emoji_picker/emoji_picker.ios', () => {
|
||||
const state = {
|
||||
...initialState,
|
||||
views: {
|
||||
recentEmojis: [],
|
||||
},
|
||||
};
|
||||
const emojis = selectEmojisByName(state);
|
||||
const emojisBySection = selectEmojisBySection(state);
|
||||
const options = {
|
||||
shouldSort: false,
|
||||
threshold: 0.3,
|
||||
location: 0,
|
||||
distance: 10,
|
||||
includeMatches: true,
|
||||
findAllMatches: true,
|
||||
};
|
||||
const fuse = new Fuse(emojis, options);
|
||||
|
||||
const baseProps = {
|
||||
actions: {
|
||||
getCustomEmojis: jest.fn(),
|
||||
@@ -19,9 +40,9 @@ describe('components/emoji_picker/EmojiPicker', () => {
|
||||
customEmojisEnabled: false,
|
||||
customEmojiPage: 200,
|
||||
deviceWidth: 400,
|
||||
emojis: [],
|
||||
emojisBySection: [],
|
||||
fuse: {},
|
||||
emojis,
|
||||
emojisBySection,
|
||||
fuse,
|
||||
isLandscape: false,
|
||||
theme: Preferences.THEMES.default,
|
||||
};
|
||||
@@ -48,6 +69,15 @@ describe('components/emoji_picker/EmojiPicker', () => {
|
||||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
test('searchEmojis should return the right values on fuse', () => {
|
||||
const input = '1';
|
||||
const output = ['100', '1234', '1st_place_medal', '+1', '-1', 'u7121'];
|
||||
|
||||
const wrapper = shallowWithIntl(<EmojiPicker {...baseProps}/>);
|
||||
const result = wrapper.instance().searchEmojis(input);
|
||||
expect(result).toEqual(output);
|
||||
});
|
||||
|
||||
test('should set rebuildEmojis to true when deviceWidth changes', () => {
|
||||
const wrapper = shallowWithIntl(<EmojiPicker {...baseProps}/>);
|
||||
const instance = wrapper.instance();
|
||||
@@ -84,7 +114,7 @@ describe('components/emoji_picker/EmojiPicker', () => {
|
||||
const setRebuiltEmojis = jest.spyOn(instance, 'setRebuiltEmojis');
|
||||
setRebuiltEmojis(searchBarAnimationComplete);
|
||||
|
||||
expect(instance.setState).toHaveBeenCalledWith({emojis: []});
|
||||
expect(instance.setState).toHaveBeenCalledTimes(1);
|
||||
expect(instance.rebuildEmojis).toBe(false);
|
||||
});
|
||||
|
||||
|
||||
@@ -203,16 +203,24 @@ export default class EmojiPicker extends PureComponent {
|
||||
};
|
||||
|
||||
searchEmojis = (searchTerm) => {
|
||||
const {emojis, fuse} = this.props;
|
||||
const {fuse} = this.props;
|
||||
const searchTermLowerCase = searchTerm.toLowerCase();
|
||||
|
||||
if (!searchTerm) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const results = fuse.search(searchTermLowerCase).map((r) => r.refIndex);
|
||||
const sorter = (a, b) => compareEmojis(a, b, searchTerm);
|
||||
const data = results.map((index) => emojis[index]).sort(sorter);
|
||||
const sorter = (a, b) => compareEmojis(a, b, searchTermLowerCase);
|
||||
const fuzz = fuse.search(searchTermLowerCase);
|
||||
const results = fuzz.reduce((values, r) => {
|
||||
const v = r.matches[0]?.value;
|
||||
if (v) {
|
||||
values.push(v);
|
||||
}
|
||||
|
||||
return values;
|
||||
}, []);
|
||||
const data = results.sort(sorter);
|
||||
|
||||
return data;
|
||||
};
|
||||
@@ -295,6 +303,7 @@ export default class EmojiPicker extends PureComponent {
|
||||
<View style={[style.flatListEmoji, padding(this.props.isLandscape)]}>
|
||||
<Emoji
|
||||
emojiName={item}
|
||||
textStyle={style.emojiText}
|
||||
size={20}
|
||||
/>
|
||||
</View>
|
||||
@@ -476,6 +485,10 @@ export const getStyleSheetFromTheme = makeStyleSheetFromTheme((theme) => {
|
||||
backgroundColor: theme.centerChannelBg,
|
||||
flex: 1,
|
||||
},
|
||||
emojiText: {
|
||||
color: '#000',
|
||||
fontWeight: 'bold',
|
||||
},
|
||||
flatList: {
|
||||
flex: 1,
|
||||
backgroundColor: theme.centerChannelBg,
|
||||
|
||||
@@ -3,154 +3,28 @@
|
||||
|
||||
import {connect} from 'react-redux';
|
||||
import {bindActionCreators} from 'redux';
|
||||
import {createSelector} from 'reselect';
|
||||
import Fuse from 'fuse.js';
|
||||
|
||||
import {incrementEmojiPickerPage} from '@actions/views/emoji';
|
||||
import {getCustomEmojis} from '@mm-redux/actions/emojis';
|
||||
import {getTheme} from '@mm-redux/selectors/entities/preferences';
|
||||
import {getCustomEmojisByName} from '@mm-redux/selectors/entities/emojis';
|
||||
import {getConfig} from '@mm-redux/selectors/entities/general';
|
||||
import {createIdsSelector} from '@mm-redux/utils/helpers';
|
||||
import {getDimensions, isLandscape} from '@selectors/device';
|
||||
import {BuiltInEmojis, CategoryNames, Emojis, EmojiIndicesByAlias, EmojiIndicesByCategory} from '@utils/emojis';
|
||||
import {t} from '@utils/i18n';
|
||||
import {selectEmojisByName, selectEmojisBySection} from '@selectors/emojis';
|
||||
|
||||
import EmojiPicker from './emoji_picker';
|
||||
|
||||
const categoryToI18n = {
|
||||
activity: {
|
||||
id: t('mobile.emoji_picker.activity'),
|
||||
defaultMessage: 'ACTIVITY',
|
||||
icon: 'futbol-o',
|
||||
},
|
||||
custom: {
|
||||
id: t('mobile.emoji_picker.custom'),
|
||||
defaultMessage: 'CUSTOM',
|
||||
icon: 'at',
|
||||
},
|
||||
flags: {
|
||||
id: t('mobile.emoji_picker.flags'),
|
||||
defaultMessage: 'FLAGS',
|
||||
icon: 'flag-o',
|
||||
},
|
||||
foods: {
|
||||
id: t('mobile.emoji_picker.foods'),
|
||||
defaultMessage: 'FOODS',
|
||||
icon: 'cutlery',
|
||||
},
|
||||
nature: {
|
||||
id: t('mobile.emoji_picker.nature'),
|
||||
defaultMessage: 'NATURE',
|
||||
icon: 'leaf',
|
||||
},
|
||||
objects: {
|
||||
id: t('mobile.emoji_picker.objects'),
|
||||
defaultMessage: 'OBJECTS',
|
||||
icon: 'lightbulb-o',
|
||||
},
|
||||
people: {
|
||||
id: t('mobile.emoji_picker.people'),
|
||||
defaultMessage: 'PEOPLE',
|
||||
icon: 'smile-o',
|
||||
},
|
||||
places: {
|
||||
id: t('mobile.emoji_picker.places'),
|
||||
defaultMessage: 'PLACES',
|
||||
icon: 'plane',
|
||||
},
|
||||
recent: {
|
||||
id: t('mobile.emoji_picker.recent'),
|
||||
defaultMessage: 'RECENTLY USED',
|
||||
icon: 'clock-o',
|
||||
},
|
||||
symbols: {
|
||||
id: t('mobile.emoji_picker.symbols'),
|
||||
defaultMessage: 'SYMBOLS',
|
||||
icon: 'heart-o',
|
||||
},
|
||||
};
|
||||
|
||||
function fillEmoji(indice) {
|
||||
const emoji = Emojis[indice];
|
||||
return {
|
||||
name: emoji.aliases[0],
|
||||
aliases: emoji.aliases,
|
||||
};
|
||||
}
|
||||
|
||||
const getEmojisBySection = createSelector(
|
||||
getCustomEmojisByName,
|
||||
(state) => state.views.recentEmojis,
|
||||
(customEmojis, recentEmojis) => {
|
||||
const emoticons = CategoryNames.filter((name) => name !== 'custom').map((category) => {
|
||||
const items = EmojiIndicesByCategory.get(category).map(fillEmoji);
|
||||
|
||||
const section = {
|
||||
...categoryToI18n[category],
|
||||
key: category,
|
||||
data: items,
|
||||
};
|
||||
|
||||
return section;
|
||||
});
|
||||
|
||||
const customEmojiItems = [];
|
||||
BuiltInEmojis.forEach((emoji) => {
|
||||
customEmojiItems.push({
|
||||
name: emoji,
|
||||
});
|
||||
});
|
||||
|
||||
for (const [key] of customEmojis) {
|
||||
customEmojiItems.push({
|
||||
name: key,
|
||||
});
|
||||
}
|
||||
|
||||
emoticons.push({
|
||||
...categoryToI18n.custom,
|
||||
key: 'custom',
|
||||
data: customEmojiItems,
|
||||
});
|
||||
|
||||
if (recentEmojis.length) {
|
||||
const items = recentEmojis.map((emoji) => ({name: emoji}));
|
||||
|
||||
emoticons.unshift({
|
||||
...categoryToI18n.recent,
|
||||
key: 'recent',
|
||||
data: items,
|
||||
});
|
||||
}
|
||||
|
||||
return emoticons;
|
||||
},
|
||||
);
|
||||
|
||||
const getEmojisByName = createIdsSelector(
|
||||
getCustomEmojisByName,
|
||||
(customEmojis) => {
|
||||
const emoticons = new Set();
|
||||
for (const [key] of [...EmojiIndicesByAlias.entries(), ...customEmojis.entries()]) {
|
||||
emoticons.add(key);
|
||||
}
|
||||
|
||||
return Array.from(emoticons);
|
||||
},
|
||||
);
|
||||
|
||||
function mapStateToProps(state) {
|
||||
const emojisBySection = getEmojisBySection(state);
|
||||
const emojis = getEmojisByName(state);
|
||||
const emojisBySection = selectEmojisBySection(state);
|
||||
const emojis = selectEmojisByName(state);
|
||||
const {deviceWidth} = getDimensions(state);
|
||||
const options = {
|
||||
shouldSort: true,
|
||||
shouldSort: false,
|
||||
threshold: 0.3,
|
||||
location: 0,
|
||||
distance: 100,
|
||||
minMatchCharLength: 2,
|
||||
maxPatternLength: 32,
|
||||
distance: 10,
|
||||
includeMatches: true,
|
||||
findAllMatches: true,
|
||||
};
|
||||
|
||||
const list = emojis.length ? emojis : [];
|
||||
|
||||
@@ -3,39 +3,48 @@
|
||||
|
||||
import React, {PureComponent} from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {View} from 'react-native';
|
||||
import {Text, View} from 'react-native';
|
||||
import {intlShape} from 'react-intl';
|
||||
import Button from 'react-native-button';
|
||||
|
||||
import FormattedText from 'app/components/formatted_text';
|
||||
import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme';
|
||||
import {t} from 'app/utils/i18n';
|
||||
import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme';
|
||||
|
||||
import Cloud from './cloud';
|
||||
|
||||
export default class FailedNetworkAction extends PureComponent {
|
||||
static propTypes = {
|
||||
onRetry: PropTypes.func.isRequired,
|
||||
actionId: PropTypes.string,
|
||||
actionDefaultMessage: PropTypes.string,
|
||||
errorId: PropTypes.string,
|
||||
errorDefaultMessage: PropTypes.string,
|
||||
actionText: PropTypes.string,
|
||||
errorMessage: PropTypes.string,
|
||||
errorTitle: PropTypes.string,
|
||||
theme: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
static contextTypes = {
|
||||
intl: intlShape.isRequired,
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
actionId: t('mobile.failed_network_action.retry'),
|
||||
actionDefaultMessage: 'try again',
|
||||
errorId: t('mobile.failed_network_action.shortDescription'),
|
||||
errorDefaultMessage: 'Messages will load when you have an internet connection or {tryAgainAction}.',
|
||||
showAction: true,
|
||||
};
|
||||
|
||||
render() {
|
||||
const {actionId, actionDefaultMessage, errorId, errorDefaultMessage, onRetry, theme} = this.props;
|
||||
const {formatMessage} = this.context.intl;
|
||||
const {onRetry, theme} = this.props;
|
||||
const style = getStyleFromTheme(theme);
|
||||
|
||||
const errorTitle = {
|
||||
id: t('mobile.failed_network_action.title'),
|
||||
const actionText = this.props.actionText || formatMessage({
|
||||
id: 'mobile.failed_network_action.retry',
|
||||
defaultMessage: 'Try again',
|
||||
});
|
||||
const errorTitle = this.props.errorTitle || formatMessage({
|
||||
id: 'mobile.failed_network_action.title',
|
||||
defaultMessage: 'No internet connection',
|
||||
};
|
||||
});
|
||||
const errorMessage = this.props.errorMessage || formatMessage({
|
||||
id: 'mobile.failed_network_action.shortDescription',
|
||||
defaultMessage: 'Messages will load when you have an internet connection.',
|
||||
});
|
||||
|
||||
return (
|
||||
<View style={style.container}>
|
||||
@@ -44,26 +53,14 @@ export default class FailedNetworkAction extends PureComponent {
|
||||
height={76}
|
||||
width={76}
|
||||
/>
|
||||
<FormattedText
|
||||
id={errorTitle.id}
|
||||
defaultMessage={errorTitle.defaultMessage}
|
||||
style={style.title}
|
||||
/>
|
||||
<FormattedText
|
||||
id={errorId}
|
||||
defaultMessage={errorDefaultMessage}
|
||||
style={style.description}
|
||||
values={{
|
||||
tryAgainAction: (
|
||||
<FormattedText
|
||||
id={actionId}
|
||||
defaultMessage={actionDefaultMessage}
|
||||
style={style.link}
|
||||
onPress={onRetry}
|
||||
/>
|
||||
),
|
||||
}}
|
||||
/>
|
||||
<Text style={style.title}>{errorTitle}</Text>
|
||||
<Text style={style.description}>{errorMessage}</Text>
|
||||
<Button
|
||||
onPress={onRetry}
|
||||
containerStyle={style.buttonContainer}
|
||||
>
|
||||
<Text style={style.link}>{actionText}</Text>
|
||||
</Button>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -92,7 +89,16 @@ const getStyleFromTheme = makeStyleSheetFromTheme((theme) => {
|
||||
textAlign: 'center',
|
||||
},
|
||||
link: {
|
||||
color: theme.linkColor,
|
||||
color: theme.buttonColor,
|
||||
fontSize: 15,
|
||||
},
|
||||
buttonContainer: {
|
||||
backgroundColor: theme.buttonBg,
|
||||
borderRadius: 5,
|
||||
height: 42,
|
||||
justifyContent: 'center',
|
||||
marginTop: 20,
|
||||
paddingHorizontal: 12,
|
||||
},
|
||||
};
|
||||
});
|
||||
|
||||
@@ -7,7 +7,6 @@ import {
|
||||
View,
|
||||
StyleSheet,
|
||||
} from 'react-native';
|
||||
import FastImage from 'react-native-fast-image';
|
||||
|
||||
import brokenImageIcon from '@assets/images/icons/brokenimage.png';
|
||||
import ProgressiveImage from '@components/progressive_image';
|
||||
@@ -49,29 +48,9 @@ export default class FileAttachmentImage extends PureComponent {
|
||||
resizeMethod: 'resize',
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
const {file} = props;
|
||||
if (file && file.id && !file.localPath) {
|
||||
const headers = Client4.getOptions({}).headers;
|
||||
|
||||
const preloadImages = [
|
||||
{uri: Client4.getFileThumbnailUrl(file.id), headers},
|
||||
{uri: Client4.getFileUrl(file.id), headers},
|
||||
];
|
||||
|
||||
if (isGif(file)) {
|
||||
preloadImages.push({uri: Client4.getFilePreviewUrl(file.id), headers});
|
||||
}
|
||||
|
||||
FastImage.preload(preloadImages);
|
||||
}
|
||||
|
||||
this.state = {
|
||||
failed: false,
|
||||
};
|
||||
}
|
||||
state = {
|
||||
failed: false,
|
||||
};
|
||||
|
||||
boxPlaceholder = () => {
|
||||
if (this.props.isSingleImage) {
|
||||
|
||||
@@ -77,7 +77,6 @@ export default class MarkdownImage extends ImageViewPort {
|
||||
uri = EphemeralStore.currentServerUrl + uri;
|
||||
}
|
||||
|
||||
FastImage.preload([{uri}]);
|
||||
return uri;
|
||||
};
|
||||
|
||||
|
||||
@@ -16,14 +16,6 @@ export default class AttachmentAuthor extends PureComponent {
|
||||
theme: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
if (props.icon) {
|
||||
FastImage.preload([{uri: props.icon}]);
|
||||
}
|
||||
}
|
||||
|
||||
openLink = () => {
|
||||
const {link} = this.props;
|
||||
if (link && Linking.canOpenURL(link)) {
|
||||
|
||||
@@ -17,14 +17,6 @@ export default class AttachmentFooter extends PureComponent {
|
||||
theme: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
if (props.icon) {
|
||||
FastImage.preload([{uri: props.icon}]);
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
text,
|
||||
|
||||
@@ -312,7 +312,7 @@ export default class Post extends PureComponent {
|
||||
<TouchableWithFeedback
|
||||
onPress={this.handlePress}
|
||||
onLongPress={this.showPostOptions}
|
||||
delayLongPress={100}
|
||||
delayLongPress={200}
|
||||
underlayColor={changeOpacity(theme.centerChannelColor, 0.1)}
|
||||
cancelTouchOnPanning={true}
|
||||
>
|
||||
|
||||
@@ -110,8 +110,6 @@ export default class PostAttachmentOpenGraph extends PureComponent {
|
||||
dimensions = calculateDimensions(ogImage.height, ogImage.width, this.getViewPostWidth());
|
||||
}
|
||||
|
||||
FastImage.preload([{uri: imageUrl}]);
|
||||
|
||||
return {
|
||||
hasImage: true,
|
||||
...dimensions,
|
||||
|
||||
@@ -141,7 +141,7 @@ export default class PostDraft extends PureComponent {
|
||||
channel_id: channelId,
|
||||
root_id: rootId,
|
||||
parent_id: rootId,
|
||||
message: value.trim(),
|
||||
message: value,
|
||||
};
|
||||
|
||||
createPost(post, postFiles);
|
||||
|
||||
@@ -151,7 +151,7 @@ export default class UploadItem extends PureComponent {
|
||||
|
||||
const certificate = await mattermostBucket.getPreference('cert');
|
||||
const options = {
|
||||
timeout: 10000,
|
||||
timeout: 60000,
|
||||
certificate,
|
||||
};
|
||||
this.uploadPromise = RNFetchBlob.config(options).fetch('POST', Client4.getFilesRoute(), headers, data);
|
||||
|
||||
@@ -61,7 +61,6 @@ export default class ProfilePicture extends PureComponent {
|
||||
this.setImageURL(imageUri);
|
||||
} else if (user) {
|
||||
const uri = Client4.getProfilePictureUrl(user.id, user.last_picture_update);
|
||||
FastImage.preload([{uri, headers: Client4.getOptions({}).headers}]);
|
||||
|
||||
this.setImageURL(uri);
|
||||
this.clearProfileImageUri();
|
||||
@@ -102,7 +101,6 @@ export default class ProfilePicture extends PureComponent {
|
||||
|
||||
if (nextUrl && url !== nextUrl) {
|
||||
// empty function is so that promise unhandled is not triggered in dev mode
|
||||
FastImage.preload([{uri: nextUrl, headers: Client4.getOptions({}).headers}]);
|
||||
this.setImageURL(nextUrl);
|
||||
this.clearProfileImageUri();
|
||||
}
|
||||
|
||||
@@ -8,10 +8,6 @@ import Preferences from '@mm-redux/constants/preferences';
|
||||
|
||||
import ProgressiveImage from './progressive_image';
|
||||
|
||||
jest.mock('react-native-fast-image', () => ({
|
||||
preload: jest.fn(),
|
||||
}));
|
||||
|
||||
jest.useFakeTimers();
|
||||
|
||||
describe('ProgressiveImage', () => {
|
||||
|
||||
@@ -68,7 +68,7 @@ export default class Root extends PureComponent {
|
||||
const {currentUrl, theme} = this.props;
|
||||
const {intl} = this.providerRef.getChildContext();
|
||||
|
||||
let passProps = null;
|
||||
let passProps = {theme};
|
||||
const options = {topBar: {}};
|
||||
if (Platform.OS === 'android') {
|
||||
options.topBar.rightButtons = [{
|
||||
@@ -87,6 +87,7 @@ export default class Root extends PureComponent {
|
||||
|
||||
if (screen === 'SelectTeam') {
|
||||
passProps = {
|
||||
...passProps,
|
||||
currentUrl,
|
||||
userWithoutTeams: true,
|
||||
};
|
||||
|
||||
@@ -38,6 +38,7 @@ export default class Search extends PureComponent {
|
||||
tintColorDelete: PropTypes.string,
|
||||
selectionColor: PropTypes.string,
|
||||
inputStyle: CustomPropTypes.Style,
|
||||
containerStyle: CustomPropTypes.Style,
|
||||
cancelButtonStyle: CustomPropTypes.Style,
|
||||
autoFocus: PropTypes.bool,
|
||||
placeholder: PropTypes.string,
|
||||
@@ -285,7 +286,7 @@ export default class Search extends PureComponent {
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={searchBarStyle.container}>
|
||||
<View style={[searchBarStyle.container, this.props.containerStyle]}>
|
||||
{((this.props.leftComponent) ?
|
||||
<Animated.View
|
||||
style={{
|
||||
@@ -385,7 +386,7 @@ const getSearchBarStyle = memoizeResult((
|
||||
justifyContent: 'flex-start',
|
||||
alignItems: 'center',
|
||||
height: containerHeight,
|
||||
flex: 1,
|
||||
overflow: 'hidden',
|
||||
},
|
||||
clearIconColorIos: tintColorDelete || styles.defaultColor.color,
|
||||
clearIconColorAndroid: titleCancelColor || placeholderTextColor,
|
||||
|
||||
@@ -135,6 +135,7 @@ export default class ChannelsList extends PureComponent {
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
containerStyle={styles.searchBar}
|
||||
placeholderTextColor={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
@@ -225,6 +226,10 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
|
||||
right: 10,
|
||||
top: 10,
|
||||
},
|
||||
searchBar: {
|
||||
flex: 1,
|
||||
overflow: 'visible',
|
||||
},
|
||||
searchContainer: {
|
||||
flex: 1,
|
||||
flexDirection: 'row',
|
||||
|
||||
@@ -113,11 +113,15 @@ export default class MainSidebarIOS extends MainSidebarBase {
|
||||
};
|
||||
|
||||
render() {
|
||||
const {children} = this.props;
|
||||
const {children, currentUserId} = this.props;
|
||||
const {deviceWidth, openDrawerOffset} = this.state;
|
||||
const isTablet = DeviceTypes.IS_TABLET && !this.state.isSplitView && this.state.permanentSidebar;
|
||||
const drawerWidth = DeviceTypes.IS_TABLET ? TABLET_WIDTH : (deviceWidth - openDrawerOffset);
|
||||
|
||||
if (!currentUserId) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<DrawerLayout
|
||||
ref={this.drawerRef}
|
||||
|
||||
@@ -71,7 +71,7 @@ export default class MainSidebarBase extends Component {
|
||||
|
||||
const condition = nextProps.currentTeamId !== currentTeamId ||
|
||||
nextProps.teamsCount !== teamsCount ||
|
||||
nextProps.theme !== theme;
|
||||
nextProps.theme !== theme || this.props.children !== nextProps.children;
|
||||
|
||||
if (Platform.OS === 'ios') {
|
||||
return condition ||
|
||||
@@ -263,6 +263,10 @@ export default class MainSidebarBase extends Component {
|
||||
selectChannel = (channel, currentChannelId, closeDrawer = true) => {
|
||||
const {logChannelSwitch, handleSelectChannel} = this.props.actions;
|
||||
|
||||
if (channel.id === currentChannelId) {
|
||||
return;
|
||||
}
|
||||
|
||||
logChannelSwitch(channel.id, currentChannelId);
|
||||
|
||||
tracker.channelSwitch = Date.now();
|
||||
|
||||
@@ -221,7 +221,7 @@ export default class SlideUpPanel extends PureComponent {
|
||||
|
||||
scrollToTop = () => {
|
||||
if (this.scrollViewRef?.current) {
|
||||
this.scrollViewRef.current._component.scrollTo({ //eslint-disable-line no-underscore-dangle
|
||||
this.scrollViewRef.current.scrollTo({
|
||||
x: 0,
|
||||
y: 0,
|
||||
animated: false,
|
||||
|
||||
@@ -10,10 +10,10 @@ import TeamIcon from './team_icon';
|
||||
|
||||
function mapStateToProps(state, ownProps) {
|
||||
const team = getTeam(state, ownProps.teamId);
|
||||
const lastIconUpdate = team.last_team_icon_update;
|
||||
const lastIconUpdate = team?.last_team_icon_update;
|
||||
|
||||
return {
|
||||
displayName: team.display_name,
|
||||
displayName: team?.display_name,
|
||||
lastIconUpdate,
|
||||
theme: getTheme(state),
|
||||
};
|
||||
|
||||
@@ -54,7 +54,6 @@ export default class TeamIcon extends React.PureComponent {
|
||||
|
||||
preloadTeamIcon = (teamId, lastIconUpdate) => {
|
||||
const uri = Client4.getTeamIconUrl(teamId, lastIconUpdate);
|
||||
FastImage.preload([{uri, headers: Client4.getOptions({}).headers}]);
|
||||
this.setImageURL(uri);
|
||||
};
|
||||
|
||||
@@ -87,7 +86,7 @@ export default class TeamIcon extends React.PureComponent {
|
||||
} else {
|
||||
teamIconContent = (
|
||||
<Text style={[styles.text, styleText]}>
|
||||
{displayName.substr(0, 2).toUpperCase()}
|
||||
{displayName?.substr(0, 2).toUpperCase()}
|
||||
</Text>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -106,17 +106,15 @@ export default class VideoControls extends PureComponent {
|
||||
});
|
||||
};
|
||||
|
||||
getPlayerStateIcon = (playerState) => {
|
||||
getControlIconAndAspectRatio = (playerState) => {
|
||||
switch (playerState) {
|
||||
case PLAYER_STATE.PAUSED:
|
||||
return playImage;
|
||||
case PLAYER_STATE.PLAYING:
|
||||
return pauseImage;
|
||||
return {icon: pauseImage, aspectRatio: 0.83};
|
||||
case PLAYER_STATE.ENDED:
|
||||
return replayImage;
|
||||
return {icon: replayImage, aspectRatio: 1.17};
|
||||
}
|
||||
|
||||
return playImage;
|
||||
return {icon: playImage, aspectRatio: 0.83};
|
||||
};
|
||||
|
||||
handleAppStateChange = (nextAppState) => {
|
||||
@@ -216,16 +214,16 @@ export default class VideoControls extends PureComponent {
|
||||
};
|
||||
|
||||
setPlayerControls = (playerState) => {
|
||||
const icon = this.getPlayerStateIcon(playerState);
|
||||
const {icon, aspectRatio} = this.getControlIconAndAspectRatio(playerState);
|
||||
const pressAction = playerState === PLAYER_STATE.ENDED ? this.onReplay : this.onPause;
|
||||
return (
|
||||
<TouchableOpacity
|
||||
style={[styles.playButton, {backgroundColor: this.props.mainColor}]}
|
||||
style={[styles.controlButton, {backgroundColor: this.props.mainColor}]}
|
||||
onPress={pressAction}
|
||||
>
|
||||
<FastImage
|
||||
source={icon}
|
||||
style={styles.playIcon}
|
||||
style={[styles.controlIcon, {aspectRatio}]}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
);
|
||||
@@ -288,7 +286,7 @@ const styles = StyleSheet.create({
|
||||
timeRow: {
|
||||
alignSelf: 'stretch',
|
||||
},
|
||||
playButton: {
|
||||
controlButton: {
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center',
|
||||
width: 50,
|
||||
@@ -297,15 +295,8 @@ const styles = StyleSheet.create({
|
||||
borderWidth: 1.5,
|
||||
borderColor: 'rgba(255,255,255,0.5)',
|
||||
},
|
||||
playIcon: {
|
||||
width: 22,
|
||||
height: 22,
|
||||
resizeMode: 'contain',
|
||||
},
|
||||
replayIcon: {
|
||||
width: 25,
|
||||
controlIcon: {
|
||||
height: 20,
|
||||
resizeMode: 'stretch',
|
||||
},
|
||||
progressContainer: {
|
||||
position: 'absolute',
|
||||
|
||||
@@ -156,30 +156,35 @@ class GlobalEventHandler {
|
||||
emmProvider.handleManagedConfig(true);
|
||||
};
|
||||
|
||||
onLogout = async () => {
|
||||
Store.redux.dispatch(closeWebSocket(false));
|
||||
Store.redux.dispatch(setServerVersion(''));
|
||||
|
||||
if (analytics) {
|
||||
await analytics.reset();
|
||||
clearCookiesAndWebData = async () => {
|
||||
try {
|
||||
await CookieManager.clearAll(Platform.OS === 'ios');
|
||||
} catch (error) {
|
||||
// Nothing to clear
|
||||
}
|
||||
|
||||
removeAppCredentials();
|
||||
deleteFileCache();
|
||||
await this.resetState();
|
||||
resetMomentLocale();
|
||||
switch (Platform.OS) {
|
||||
case 'ios': {
|
||||
const mainPath = RNFetchBlob.fs.dirs.DocumentDir.split('/').slice(0, -1).join('/');
|
||||
const libraryDir = `${mainPath}/Library`;
|
||||
const cookiesDir = `${libraryDir}/Cookies`;
|
||||
const cookies = await RNFetchBlob.fs.exists(cookiesDir);
|
||||
const webkitDir = `${libraryDir}/WebKit`;
|
||||
const webkit = await RNFetchBlob.fs.exists(webkitDir);
|
||||
|
||||
// TODO: Handle when multi-server support is added
|
||||
CookieManager.clearAll(Platform.OS === 'ios');
|
||||
PushNotifications.clearNotifications();
|
||||
const cacheDir = RNFetchBlob.fs.dirs.CacheDir;
|
||||
const mainPath = cacheDir.split('/').slice(0, -1).join('/');
|
||||
if (cookies) {
|
||||
RNFetchBlob.fs.unlink(cookiesDir);
|
||||
}
|
||||
|
||||
mattermostBucket.removePreference('cert');
|
||||
mattermostBucket.removePreference('emm');
|
||||
if (Platform.OS === 'ios') {
|
||||
mattermostBucket.removeFile('entities');
|
||||
} else {
|
||||
if (webkit) {
|
||||
RNFetchBlob.fs.unlink(webkitDir);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'android': {
|
||||
const cacheDir = RNFetchBlob.fs.dirs.CacheDir;
|
||||
const mainPath = cacheDir.split('/').slice(0, -1).join('/');
|
||||
const cookies = await RNFetchBlob.fs.exists(`${mainPath}/app_webview/Cookies`);
|
||||
const cookiesJ = await RNFetchBlob.fs.exists(`${mainPath}/app_webview/Cookies-journal`);
|
||||
if (cookies) {
|
||||
@@ -189,7 +194,31 @@ class GlobalEventHandler {
|
||||
if (cookiesJ) {
|
||||
RNFetchBlob.fs.unlink(`${mainPath}/app_webview/Cookies-journal`);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
onLogout = async () => {
|
||||
Store.redux.dispatch(closeWebSocket(false));
|
||||
Store.redux.dispatch(setServerVersion(''));
|
||||
|
||||
if (analytics) {
|
||||
await analytics.reset();
|
||||
}
|
||||
|
||||
mattermostBucket.removePreference('cert');
|
||||
mattermostBucket.removePreference('emm');
|
||||
if (Platform.OS === 'ios') {
|
||||
mattermostBucket.removeFile('entities');
|
||||
}
|
||||
|
||||
removeAppCredentials();
|
||||
deleteFileCache();
|
||||
resetMomentLocale();
|
||||
|
||||
await this.clearCookiesAndWebData();
|
||||
PushNotifications.clearNotifications();
|
||||
|
||||
if (this.launchApp) {
|
||||
this.launchApp();
|
||||
@@ -325,7 +354,7 @@ class GlobalEventHandler {
|
||||
|
||||
return Store.redux.dispatch({
|
||||
type: General.OFFLINE_STORE_PURGE,
|
||||
state: newState,
|
||||
data: newState,
|
||||
});
|
||||
} catch (e) {
|
||||
// clear error
|
||||
|
||||
@@ -365,17 +365,20 @@ function myMembers(state: RelationOneToOne<Channel, ChannelMembership> = {}, act
|
||||
case ChannelTypes.RECEIVED_MY_CHANNELS_WITH_MEMBERS: { // Used by the mobile app
|
||||
const nextState: any = {...state};
|
||||
const current = Object.values(nextState);
|
||||
const {sync, channelMembers} = action.data;
|
||||
const {sync, teamChannels, channelMembers} = action.data;
|
||||
let hasNewValues = channelMembers && channelMembers.length > 0;
|
||||
|
||||
// Remove existing channel memberships when the user is no longer a member
|
||||
if (sync) {
|
||||
current.forEach((member: ChannelMembership) => {
|
||||
const id = member.channel_id;
|
||||
if (channelMembers.find((cm: ChannelMembership) => cm.channel_id !== id)) {
|
||||
delete nextState[id];
|
||||
hasNewValues = true;
|
||||
}
|
||||
const memberIds = channelMembers.map((cm: ChannelMembership) => cm.channel_id);
|
||||
const removedMembers = current.filter((cm: ChannelMembership) => {
|
||||
const id = cm.channel_id;
|
||||
return !memberIds.includes(id) && teamChannels.includes(id);
|
||||
});
|
||||
|
||||
removedMembers.forEach((member: ChannelMembership) => {
|
||||
delete nextState[member.channel_id];
|
||||
hasNewValues = true;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ export default ((state: Array<{error: any;displayable?: boolean;date: string}> =
|
||||
return nextState;
|
||||
}
|
||||
case ErrorTypes.LOG_ERROR: {
|
||||
const nextState = [...state];
|
||||
const nextState = state.length ? [...state] : [];
|
||||
const {displayable, error} = action;
|
||||
nextState.push({
|
||||
displayable,
|
||||
|
||||
3
app/mm-redux/types/module.d.ts
vendored
3
app/mm-redux/types/module.d.ts
vendored
@@ -2,5 +2,4 @@
|
||||
// See LICENSE.txt for license information.
|
||||
declare module 'gfycat-sdk';
|
||||
declare module 'remote-redux-devtools';
|
||||
declare module 'redux-action-buffer';
|
||||
declare module 'redux-reset';
|
||||
declare module 'redux-action-buffer';
|
||||
@@ -31,18 +31,10 @@ export default class ChannelAndroid extends ChannelBase {
|
||||
|
||||
render() {
|
||||
const {theme} = this.props;
|
||||
const channelLoadingOrFailed = this.renderLoadingOrFailedChannel();
|
||||
if (channelLoadingOrFailed) {
|
||||
return channelLoadingOrFailed;
|
||||
}
|
||||
let component = this.renderLoadingOrFailedChannel();
|
||||
|
||||
const drawerContent = (
|
||||
<>
|
||||
<ChannelNavBar
|
||||
openMainSidebar={this.openMainSidebar}
|
||||
openSettingsSidebar={this.openSettingsSidebar}
|
||||
onPress={this.goToChannelInfo}
|
||||
/>
|
||||
if (!component) {
|
||||
component = (
|
||||
<KeyboardLayout>
|
||||
<View style={style.flex}>
|
||||
<ChannelPostList/>
|
||||
@@ -52,6 +44,17 @@ export default class ChannelAndroid extends ChannelBase {
|
||||
screenId={this.props.componentId}
|
||||
/>
|
||||
</KeyboardLayout>
|
||||
);
|
||||
}
|
||||
|
||||
const drawerContent = (
|
||||
<>
|
||||
<ChannelNavBar
|
||||
openMainSidebar={this.openMainSidebar}
|
||||
openSettingsSidebar={this.openSettingsSidebar}
|
||||
onPress={this.goToChannelInfo}
|
||||
/>
|
||||
{component}
|
||||
<NetworkIndicator/>
|
||||
{LocalConfig.EnableMobileClientUpgrade && <ClientUpgradeListener/>}
|
||||
</>
|
||||
|
||||
@@ -54,10 +54,27 @@ export default class ChannelIOS extends ChannelBase {
|
||||
|
||||
render() {
|
||||
const {currentChannelId, theme} = this.props;
|
||||
let component = this.renderLoadingOrFailedChannel();
|
||||
let renderDraftArea = false;
|
||||
|
||||
const channelLoadingOrFailed = this.renderLoadingOrFailedChannel();
|
||||
if (channelLoadingOrFailed) {
|
||||
return channelLoadingOrFailed;
|
||||
if (!component) {
|
||||
renderDraftArea = true;
|
||||
component = (
|
||||
<>
|
||||
<ChannelPostList
|
||||
updateNativeScrollView={this.updateNativeScrollView}
|
||||
/>
|
||||
<View nativeID={ACCESSORIES_CONTAINER_NATIVE_ID}>
|
||||
<Autocomplete
|
||||
maxHeight={AUTOCOMPLETE_MAX_HEIGHT}
|
||||
onChangeText={this.handleAutoComplete}
|
||||
cursorPositionEvent={CHANNEL_POST_TEXTBOX_CURSOR_CHANGE}
|
||||
valueEvent={CHANNEL_POST_TEXTBOX_VALUE_CHANGE}
|
||||
/>
|
||||
</View>
|
||||
{LocalConfig.EnableMobileClientUpgrade && <ClientUpgradeListener/>}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
const style = getStyle(theme);
|
||||
@@ -71,19 +88,9 @@ export default class ChannelIOS extends ChannelBase {
|
||||
openSettingsSidebar={this.openSettingsSidebar}
|
||||
onPress={this.goToChannelInfo}
|
||||
/>
|
||||
<ChannelPostList
|
||||
updateNativeScrollView={this.updateNativeScrollView}
|
||||
/>
|
||||
<View nativeID={ACCESSORIES_CONTAINER_NATIVE_ID}>
|
||||
<Autocomplete
|
||||
maxHeight={AUTOCOMPLETE_MAX_HEIGHT}
|
||||
onChangeText={this.handleAutoComplete}
|
||||
cursorPositionEvent={CHANNEL_POST_TEXTBOX_CURSOR_CHANGE}
|
||||
valueEvent={CHANNEL_POST_TEXTBOX_VALUE_CHANGE}
|
||||
/>
|
||||
</View>
|
||||
{LocalConfig.EnableMobileClientUpgrade && <ClientUpgradeListener/>}
|
||||
{component}
|
||||
</SafeAreaView>
|
||||
{renderDraftArea &&
|
||||
<KeyboardTrackingView
|
||||
ref={this.keyboardTracker}
|
||||
scrollViewNativeID={currentChannelId}
|
||||
@@ -96,6 +103,7 @@ export default class ChannelIOS extends ChannelBase {
|
||||
screenId={this.props.componentId}
|
||||
/>
|
||||
</KeyboardTrackingView>
|
||||
}
|
||||
</>
|
||||
);
|
||||
|
||||
|
||||
@@ -7,14 +7,11 @@ import {intlShape} from 'react-intl';
|
||||
import {
|
||||
Keyboard,
|
||||
StyleSheet,
|
||||
View,
|
||||
} from 'react-native';
|
||||
import MaterialIcon from 'react-native-vector-icons/MaterialIcons';
|
||||
|
||||
import {showModal, showModalOverCurrentContext} from '@actions/navigation';
|
||||
import LocalConfig from '@assets/config';
|
||||
import SafeAreaView from '@components/safe_area_view';
|
||||
import EmptyToolbar from '@components/start/empty_toolbar';
|
||||
import {NavigationTypes} from '@constants';
|
||||
import EventEmitter from '@mm-redux/utils/event_emitter';
|
||||
import EphemeralStore from '@store/ephemeral_store';
|
||||
@@ -30,19 +27,19 @@ export let ClientUpgradeListener;
|
||||
export default class ChannelBase extends PureComponent {
|
||||
static propTypes = {
|
||||
actions: PropTypes.shape({
|
||||
getChannelStats: PropTypes.func.isRequired,
|
||||
loadChannelsForTeam: PropTypes.func.isRequired,
|
||||
selectDefaultTeam: PropTypes.func.isRequired,
|
||||
selectInitialChannel: PropTypes.func.isRequired,
|
||||
recordLoadTime: PropTypes.func.isRequired,
|
||||
getChannelStats: PropTypes.func.isRequired,
|
||||
}).isRequired,
|
||||
componentId: PropTypes.string.isRequired,
|
||||
currentChannelId: PropTypes.string,
|
||||
currentTeamId: PropTypes.string,
|
||||
isLandscape: PropTypes.bool,
|
||||
disableTermsModal: PropTypes.bool,
|
||||
teamName: PropTypes.string,
|
||||
theme: PropTypes.object.isRequired,
|
||||
showTermsOfService: PropTypes.bool,
|
||||
disableTermsModal: PropTypes.bool,
|
||||
skipMetrics: PropTypes.bool,
|
||||
};
|
||||
|
||||
@@ -213,9 +210,10 @@ export default class ChannelBase extends PureComponent {
|
||||
};
|
||||
|
||||
renderLoadingOrFailedChannel() {
|
||||
const {formatMessage} = this.context.intl;
|
||||
const {
|
||||
currentChannelId,
|
||||
isLandscape,
|
||||
teamName,
|
||||
theme,
|
||||
} = this.props;
|
||||
|
||||
@@ -223,37 +221,28 @@ export default class ChannelBase extends PureComponent {
|
||||
if (!currentChannelId) {
|
||||
if (channelsRequestFailed) {
|
||||
const FailedNetworkAction = require('app/components/failed_network_action').default;
|
||||
const title = formatMessage({id: 'mobile.failed_network_action.teams_title', defaultMessage: 'Something went wrong'});
|
||||
const message = formatMessage({
|
||||
id: 'mobile.failed_network_action.teams_channel_description',
|
||||
defaultMessage: 'Channels could not be loaded for {teamName}.',
|
||||
}, {teamName});
|
||||
|
||||
return (
|
||||
<SafeAreaView>
|
||||
<View style={style.flex}>
|
||||
<EmptyToolbar
|
||||
theme={theme}
|
||||
isLandscape={isLandscape}
|
||||
/>
|
||||
<FailedNetworkAction
|
||||
onRetry={this.retryLoadChannels}
|
||||
theme={theme}
|
||||
/>
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
<FailedNetworkAction
|
||||
errorMessage={message}
|
||||
errorTitle={title}
|
||||
onRetry={this.retryLoadChannels}
|
||||
theme={theme}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
const Loading = require('app/components/channel_loader').default;
|
||||
return (
|
||||
<SafeAreaView>
|
||||
<View style={style.flex}>
|
||||
<EmptyToolbar
|
||||
theme={theme}
|
||||
isLandscape={isLandscape}
|
||||
/>
|
||||
<Loading
|
||||
channelIsLoading={true}
|
||||
color={theme.centerChannelColor}
|
||||
/>
|
||||
</View>
|
||||
</SafeAreaView>
|
||||
<Loading
|
||||
channelIsLoading={true}
|
||||
color={theme.centerChannelColor}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,30 +4,24 @@
|
||||
import {bindActionCreators} from 'redux';
|
||||
import {connect} from 'react-redux';
|
||||
|
||||
import {startPeriodicStatusUpdates, stopPeriodicStatusUpdates} from '@mm-redux/actions/users';
|
||||
import {loadChannelsForTeam, selectInitialChannel} from '@actions/views/channel';
|
||||
import {recordLoadTime} from '@actions/views/root';
|
||||
import {selectDefaultTeam} from '@actions/views/select_team';
|
||||
import {getCurrentChannelId} from '@mm-redux/selectors/entities/channels';
|
||||
import {getCurrentTeamId} from '@mm-redux/selectors/entities/teams';
|
||||
import {getCurrentTeam} from '@mm-redux/selectors/entities/teams';
|
||||
import {getTheme} from '@mm-redux/selectors/entities/preferences';
|
||||
import {shouldShowTermsOfService} from '@mm-redux/selectors/entities/users';
|
||||
import {getChannelStats} from '@mm-redux/actions/channels';
|
||||
|
||||
import {
|
||||
loadChannelsForTeam,
|
||||
selectInitialChannel,
|
||||
} from 'app/actions/views/channel';
|
||||
import {connection} from 'app/actions/device';
|
||||
import {recordLoadTime} from 'app/actions/views/root';
|
||||
import {logout} from 'app/actions/views/user';
|
||||
import {selectDefaultTeam} from 'app/actions/views/select_team';
|
||||
import {isLandscape} from 'app/selectors/device';
|
||||
|
||||
import Channel from './channel';
|
||||
|
||||
function mapStateToProps(state) {
|
||||
const currentTeam = getCurrentTeam(state);
|
||||
|
||||
return {
|
||||
currentTeamId: getCurrentTeamId(state),
|
||||
currentTeamId: currentTeam?.id,
|
||||
currentChannelId: getCurrentChannelId(state),
|
||||
isLandscape: isLandscape(state),
|
||||
teamName: currentTeam?.display_name,
|
||||
theme: getTheme(state),
|
||||
showTermsOfService: shouldShowTermsOfService(state),
|
||||
};
|
||||
@@ -37,14 +31,10 @@ function mapDispatchToProps(dispatch) {
|
||||
return {
|
||||
actions: bindActionCreators({
|
||||
getChannelStats,
|
||||
connection,
|
||||
loadChannelsForTeam,
|
||||
logout,
|
||||
selectDefaultTeam,
|
||||
selectInitialChannel,
|
||||
recordLoadTime,
|
||||
startPeriodicStatusUpdates,
|
||||
stopPeriodicStatusUpdates,
|
||||
}, dispatch),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -334,25 +334,27 @@ export default class ChannelAddMembers extends PureComponent {
|
||||
return (
|
||||
<KeyboardLayout>
|
||||
<StatusBar/>
|
||||
<View style={[style.searchBar, padding(isLandscape)]}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.onSearch}
|
||||
onSearchButtonPress={this.onSearch}
|
||||
onCancelButtonPress={this.clearSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
<View style={style.searchBar}>
|
||||
<View style={padding(isLandscape)}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.onSearch}
|
||||
onSearchButtonPress={this.onSearch}
|
||||
onCancelButtonPress={this.clearSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
data={data}
|
||||
|
||||
@@ -5,53 +5,54 @@ exports[`ChannelMembers should match snapshot 1`] = `
|
||||
<Connect(StatusBar) />
|
||||
<View
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
},
|
||||
null,
|
||||
]
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
}
|
||||
}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
<View
|
||||
style={null}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
}
|
||||
}
|
||||
}
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
canRefresh={true}
|
||||
|
||||
@@ -363,25 +363,27 @@ export default class ChannelMembers extends PureComponent {
|
||||
return (
|
||||
<KeyboardLayout>
|
||||
<StatusBar/>
|
||||
<View style={[style.searchBar, padding(isLandscape)]}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.onSearch}
|
||||
onSearchButtonPress={this.onSearch}
|
||||
onCancelButtonPress={this.clearSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
<View style={style.searchBar}>
|
||||
<View style={padding(isLandscape)}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.onSearch}
|
||||
onSearchButtonPress={this.onSearch}
|
||||
onCancelButtonPress={this.clearSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
data={data}
|
||||
|
||||
@@ -10,92 +10,12 @@ exports[`edit_profile should match snapshot 1`] = `
|
||||
}
|
||||
}
|
||||
>
|
||||
<ProfilePictureButton
|
||||
blurTextBox={[Function]}
|
||||
browseFileTypes="public.image"
|
||||
canBrowseVideoLibrary={false}
|
||||
canTakeVideo={false}
|
||||
currentUser={
|
||||
Object {
|
||||
"email": "dwight@schrutefarms.com",
|
||||
"first_name": "Dwight",
|
||||
"last_name": "Schrute",
|
||||
"nickname": "Dragon",
|
||||
"position": "position",
|
||||
"username": "ieatbeets",
|
||||
}
|
||||
}
|
||||
maxFileSize={20971520}
|
||||
onShowFileSizeWarning={[Function]}
|
||||
onShowUnsupportedMimeTypeWarning={[Function]}
|
||||
removeProfileImage={[Function]}
|
||||
theme={
|
||||
Object {
|
||||
"awayIndicator": "#ffbc42",
|
||||
"buttonBg": "#166de0",
|
||||
"buttonColor": "#ffffff",
|
||||
"centerChannelBg": "#ffffff",
|
||||
"centerChannelColor": "#3d3c40",
|
||||
"codeTheme": "github",
|
||||
"dndIndicator": "#f74343",
|
||||
"errorTextColor": "#fd5960",
|
||||
"linkColor": "#2389d7",
|
||||
"mentionBg": "#ffffff",
|
||||
"mentionBj": "#ffffff",
|
||||
"mentionColor": "#145dbf",
|
||||
"mentionHighlightBg": "#ffe577",
|
||||
"mentionHighlightLink": "#166de0",
|
||||
"newMessageSeparator": "#ff8800",
|
||||
"onlineIndicator": "#06d6a0",
|
||||
"sidebarBg": "#145dbf",
|
||||
"sidebarHeaderBg": "#1153ab",
|
||||
"sidebarHeaderTextColor": "#ffffff",
|
||||
"sidebarText": "#ffffff",
|
||||
"sidebarTextActiveBorder": "#579eff",
|
||||
"sidebarTextActiveColor": "#ffffff",
|
||||
"sidebarTextHoverBg": "#4578bf",
|
||||
"sidebarUnreadText": "#ffffff",
|
||||
"type": "Mattermost",
|
||||
}
|
||||
}
|
||||
uploadFiles={[Function]}
|
||||
validMimeTypes={
|
||||
Array [
|
||||
"image/jpeg",
|
||||
"image/jpeg",
|
||||
"image/jpg",
|
||||
"image/jp_",
|
||||
"application/jpg",
|
||||
"application/x-jpg",
|
||||
"image/pjpeg",
|
||||
"image/pipeg",
|
||||
"image/vnd.swiftview-jpeg",
|
||||
"image/x-xbitmap",
|
||||
"image/png",
|
||||
"application/png",
|
||||
"application/x-png",
|
||||
"image/bmp",
|
||||
"image/x-bmp",
|
||||
"image/x-bitmap",
|
||||
"image/x-xbitmap",
|
||||
"image/x-win-bitmap",
|
||||
"image/x-windows-bmp",
|
||||
"image/ms-bmp",
|
||||
"image/x-ms-bmp",
|
||||
"application/bmp",
|
||||
"application/x-bmp",
|
||||
"application/x-win-bitmap",
|
||||
]
|
||||
}
|
||||
wrapper={true}
|
||||
>
|
||||
<Connect(ProfilePicture)
|
||||
edit={true}
|
||||
imageUri={null}
|
||||
size={150}
|
||||
statusBorderWidth={6}
|
||||
statusSize={40}
|
||||
/>
|
||||
</ProfilePictureButton>
|
||||
<Connect(ProfilePicture)
|
||||
edit={false}
|
||||
imageUri={null}
|
||||
size={150}
|
||||
statusBorderWidth={6}
|
||||
statusSize={40}
|
||||
/>
|
||||
</View>
|
||||
`;
|
||||
|
||||
@@ -95,6 +95,7 @@ export default class EditProfile extends PureComponent {
|
||||
lastNameDisabled: PropTypes.bool.isRequired,
|
||||
nicknameDisabled: PropTypes.bool.isRequired,
|
||||
positionDisabled: PropTypes.bool.isRequired,
|
||||
profilePictureDisabled: PropTypes.bool.isRequired,
|
||||
theme: PropTypes.object.isRequired,
|
||||
commandType: PropTypes.string.isRequired,
|
||||
isLandscape: PropTypes.bool.isRequired,
|
||||
@@ -504,6 +505,7 @@ export default class EditProfile extends PureComponent {
|
||||
renderProfilePicture = () => {
|
||||
const {
|
||||
currentUser,
|
||||
profilePictureDisabled,
|
||||
theme,
|
||||
} = this.props;
|
||||
|
||||
@@ -514,6 +516,25 @@ export default class EditProfile extends PureComponent {
|
||||
|
||||
const style = getStyleSheet(theme);
|
||||
const uri = profileImage ? profileImage.uri : null;
|
||||
const profilePicture = (
|
||||
<ProfilePicture
|
||||
userId={currentUser.id}
|
||||
size={150}
|
||||
statusBorderWidth={6}
|
||||
statusSize={40}
|
||||
edit={!profilePictureDisabled}
|
||||
imageUri={uri}
|
||||
profileImageRemove={profileImageRemove}
|
||||
/>
|
||||
);
|
||||
|
||||
if (profilePictureDisabled) {
|
||||
return (
|
||||
<View style={style.top}>
|
||||
{profilePicture}
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={style.top}>
|
||||
@@ -532,15 +553,7 @@ export default class EditProfile extends PureComponent {
|
||||
onShowUnsupportedMimeTypeWarning={this.onShowUnsupportedMimeTypeWarning}
|
||||
validMimeTypes={VALID_MIME_TYPES}
|
||||
>
|
||||
<ProfilePicture
|
||||
userId={currentUser.id}
|
||||
size={150}
|
||||
statusBorderWidth={6}
|
||||
statusSize={40}
|
||||
edit={true}
|
||||
imageUri={uri}
|
||||
profileImageRemove={profileImageRemove}
|
||||
/>
|
||||
{profilePicture}
|
||||
</ProfilePictureButton>
|
||||
</View>
|
||||
);
|
||||
|
||||
@@ -32,6 +32,7 @@ describe('edit_profile', () => {
|
||||
lastNameDisabled: true,
|
||||
nicknameDisabled: true,
|
||||
positionDisabled: true,
|
||||
profilePictureDisabled: true,
|
||||
theme: Preferences.THEMES.default,
|
||||
currentUser: {
|
||||
first_name: 'Dwight',
|
||||
@@ -58,6 +59,7 @@ describe('edit_profile', () => {
|
||||
const wrapper = shallow(
|
||||
<EditProfile
|
||||
{...baseProps}
|
||||
profilePictureDisabled={false}
|
||||
/>,
|
||||
{context: {intl: {formatMessage: jest.fn()}}},
|
||||
);
|
||||
|
||||
@@ -26,12 +26,12 @@ function mapStateToProps(state, ownProps) {
|
||||
const nicknameDisabled = (service === 'ldap' && config.LdapNicknameAttributeSet === 'true') ||
|
||||
(service === 'saml' && config.SamlNicknameAttributeSet === 'true');
|
||||
|
||||
let positionDisabled = false;
|
||||
if (isMinimumServerVersion(serverVersion, 5, 12)) {
|
||||
positionDisabled = (service === 'ldap' && config.LdapPositionAttributeSet === 'true') ||
|
||||
(service === 'saml' && config.SamlPositionAttributeSet === 'true');
|
||||
} else {
|
||||
positionDisabled = (service === 'ldap' || service === 'saml') && config.PositionAttribute === 'true';
|
||||
const positionDisabled = (service === 'ldap' && config.LdapPositionAttributeSet === 'true') ||
|
||||
(service === 'saml' && config.SamlPositionAttributeSet === 'true');
|
||||
|
||||
let profilePictureDisabled = false;
|
||||
if (isMinimumServerVersion(serverVersion, 5, 24)) {
|
||||
profilePictureDisabled = (service === 'ldap' || service === 'saml') && config.LdapPictureAttributeSet === 'true';
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -39,6 +39,7 @@ function mapStateToProps(state, ownProps) {
|
||||
lastNameDisabled,
|
||||
nicknameDisabled,
|
||||
positionDisabled,
|
||||
profilePictureDisabled,
|
||||
theme: getTheme(state),
|
||||
isLandscape: isLandscape(state),
|
||||
};
|
||||
|
||||
@@ -10,11 +10,10 @@ exports[`ErrorTeamsList should match snapshot 1`] = `
|
||||
>
|
||||
<Connect(StatusBar) />
|
||||
<FailedNetworkAction
|
||||
actionDefaultMessage="try again"
|
||||
actionId="mobile.failed_network_action.retry"
|
||||
errorDefaultMessage="Messages will load when you have an internet connection or {tryAgainAction}."
|
||||
errorId="mobile.failed_network_action.shortDescription"
|
||||
errorMessage="Teams could not be loaded."
|
||||
errorTitle="Something went wrong"
|
||||
onRetry={[Function]}
|
||||
showAction={true}
|
||||
theme={
|
||||
Object {
|
||||
"awayIndicator": "#ffbc42",
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
import React, {PureComponent} from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {intlShape} from 'react-intl';
|
||||
import {
|
||||
InteractionManager,
|
||||
StyleSheet,
|
||||
@@ -26,6 +27,10 @@ export default class ErrorTeamsList extends PureComponent {
|
||||
theme: PropTypes.object,
|
||||
};
|
||||
|
||||
static contextTypes = {
|
||||
intl: intlShape.isRequired,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
@@ -67,16 +72,25 @@ export default class ErrorTeamsList extends PureComponent {
|
||||
}
|
||||
|
||||
render() {
|
||||
const {formatMessage} = this.context.intl;
|
||||
const {theme} = this.props;
|
||||
|
||||
if (this.state.loading) {
|
||||
return <Loading color={theme.centerChannelColor}/>;
|
||||
}
|
||||
|
||||
const title = formatMessage({id: 'mobile.failed_network_action.teams_title', defaultMessage: 'Something went wrong'});
|
||||
const message = formatMessage({
|
||||
id: 'mobile.failed_network_action.teams_description',
|
||||
defaultMessage: 'Teams could not be loaded.',
|
||||
});
|
||||
|
||||
return (
|
||||
<View style={style.container}>
|
||||
<StatusBar/>
|
||||
<FailedNetworkAction
|
||||
errorMessage={message}
|
||||
errorTitle={title}
|
||||
onRetry={this.getUserInfo}
|
||||
theme={theme}
|
||||
/>
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import React from 'react';
|
||||
import {shallow} from 'enzyme';
|
||||
|
||||
import FailedNetworkAction from '@components/failed_network_action';
|
||||
import Preferences from '@mm-redux/constants/preferences';
|
||||
import {shallowWithIntl} from 'test/intl-test-helper.js';
|
||||
|
||||
import FailedNetworkAction from 'app/components/failed_network_action';
|
||||
import ErrorTeamsList from './error_teams_list';
|
||||
|
||||
describe('ErrorTeamsList', () => {
|
||||
@@ -28,7 +28,7 @@ describe('ErrorTeamsList', () => {
|
||||
};
|
||||
|
||||
test('should match snapshot', () => {
|
||||
const wrapper = shallow(
|
||||
const wrapper = shallowWithIntl(
|
||||
<ErrorTeamsList {...baseProps}/>,
|
||||
);
|
||||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
@@ -51,7 +51,7 @@ describe('ErrorTeamsList', () => {
|
||||
actions,
|
||||
};
|
||||
|
||||
const wrapper = shallow(
|
||||
const wrapper = shallowWithIntl(
|
||||
<ErrorTeamsList {...newProps}/>,
|
||||
);
|
||||
|
||||
|
||||
@@ -40,11 +40,8 @@ exports[`FlaggedPosts should match snapshot when getFlaggedPosts failed 1`] = `
|
||||
>
|
||||
<Connect(StatusBar) />
|
||||
<FailedNetworkAction
|
||||
actionDefaultMessage="try again"
|
||||
actionId="mobile.failed_network_action.retry"
|
||||
errorDefaultMessage="Messages will load when you have an internet connection or {tryAgainAction}."
|
||||
errorId="mobile.failed_network_action.shortDescription"
|
||||
onRetry={[Function]}
|
||||
showAction={true}
|
||||
theme={
|
||||
Object {
|
||||
"awayIndicator": "#ffbc42",
|
||||
|
||||
@@ -16,10 +16,10 @@ export function registerScreens(store, Provider) {
|
||||
Root = require('app/components/root').default;
|
||||
}
|
||||
|
||||
const wrapper = (Comp) => (props) => ( // eslint-disable-line react/display-name
|
||||
const wrapper = (Comp, excludeEvents = true) => (props) => ( // eslint-disable-line react/display-name
|
||||
<Provider store={store}>
|
||||
<ThemeProvider>
|
||||
<Root>
|
||||
<Root excludeEvents={excludeEvents}>
|
||||
<Comp {...props}/>
|
||||
</Root>
|
||||
</ThemeProvider>
|
||||
@@ -29,7 +29,7 @@ export function registerScreens(store, Provider) {
|
||||
Navigation.registerComponent('About', () => wrapper(require('app/screens/about').default), () => require('app/screens/about').default);
|
||||
Navigation.registerComponent('AddReaction', () => wrapper(require('app/screens/add_reaction').default), () => require('app/screens/add_reaction').default);
|
||||
Navigation.registerComponent('AdvancedSettings', () => wrapper(require('app/screens/settings/advanced_settings').default), () => require('app/screens/settings/advanced_settings').default);
|
||||
Navigation.registerComponent('Channel', () => wrapper(require('app/screens/channel').default), () => require('app/screens/channel').default);
|
||||
Navigation.registerComponent('Channel', () => wrapper(require('app/screens/channel').default, false), () => require('app/screens/channel').default);
|
||||
Navigation.registerComponent('ChannelAddMembers', () => wrapper(require('app/screens/channel_add_members').default), () => require('app/screens/channel_add_members').default);
|
||||
Navigation.registerComponent('ChannelInfo', () => wrapper(require('app/screens/channel_info').default), () => require('app/screens/channel_info').default);
|
||||
Navigation.registerComponent('ChannelMembers', () => wrapper(require('app/screens/channel_members').default), () => require('app/screens/channel_members').default);
|
||||
@@ -52,7 +52,11 @@ export function registerScreens(store, Provider) {
|
||||
Navigation.registerComponent('MFA', () => wrapper(require('app/screens/mfa').default), () => require('app/screens/mfa').default);
|
||||
Navigation.registerComponent('MoreChannels', () => wrapper(require('app/screens/more_channels').default), () => require('app/screens/more_channels').default);
|
||||
Navigation.registerComponent('MoreDirectMessages', () => wrapper(require('app/screens/more_dms').default), () => require('app/screens/more_dms').default);
|
||||
Navigation.registerComponent('Notification', () => gestureHandlerRootHOC(wrapper(require('app/screens/notification').default)), () => require('app/screens/notification').default);
|
||||
if (Platform.OS === 'android') {
|
||||
Navigation.registerComponent('Notification', () => gestureHandlerRootHOC(wrapper(require('app/screens/notification').default), {flex: undefined, height: 100}), () => require('app/screens/notification').default);
|
||||
} else {
|
||||
Navigation.registerComponent('Notification', () => wrapper(require('app/screens/notification').default), () => require('app/screens/notification').default);
|
||||
}
|
||||
Navigation.registerComponent('NotificationSettings', () => wrapper(require('app/screens/settings/notification_settings').default), () => require('app/screens/settings/notification_settings').default);
|
||||
Navigation.registerComponent('NotificationSettingsAutoResponder', () => wrapper(require('app/screens/settings/notification_settings_auto_responder').default), () => require('app/screens/settings/notification_settings_auto_responder').default);
|
||||
Navigation.registerComponent('NotificationSettingsEmail', () => wrapper(require('app/screens/settings/notification_settings_email').default), () => require('app/screens/settings/notification_settings_email').default);
|
||||
@@ -67,7 +71,7 @@ export function registerScreens(store, Provider) {
|
||||
Navigation.registerComponent('RecentMentions', () => wrapper(require('app/screens/recent_mentions').default), () => require('app/screens/recent_mentions').default);
|
||||
Navigation.registerComponent('Search', () => wrapper(require('app/screens/search').default), () => require('app/screens/search').default);
|
||||
Navigation.registerComponent('SelectorScreen', () => wrapper(require('app/screens/selector_screen').default), () => require('app/screens/selector_screen').default);
|
||||
Navigation.registerComponent('SelectServer', () => wrapper(require('app/screens/select_server').default), () => require('app/screens/select_server').default);
|
||||
Navigation.registerComponent('SelectServer', () => wrapper(require('app/screens/select_server').default, false), () => require('app/screens/select_server').default);
|
||||
Navigation.registerComponent('SelectTeam', () => wrapper(require('app/screens/select_team').default), () => require('app/screens/select_team').default);
|
||||
Navigation.registerComponent('SelectTimezone', () => wrapper(require('app/screens/settings/timezone/select_timezone').default), () => require('app/screens/settings/timezone/select_timezone').default);
|
||||
Navigation.registerComponent('Settings', () => wrapper(require('app/screens/settings/general').default), () => require('app/screens/settings/general').default);
|
||||
|
||||
@@ -25,7 +25,6 @@ import FormattedText from '@components/formatted_text';
|
||||
import {paddingHorizontal as padding} from '@components/safe_area_view/iphone_x_spacing';
|
||||
import StatusBar from '@components/status_bar';
|
||||
import {t} from '@utils/i18n';
|
||||
import {setMfaPreflightDone, getMfaPreflightDone} from '@utils/security';
|
||||
import {preventDoubleTap} from '@utils/tap';
|
||||
import {changeOpacity} from '@utils/theme';
|
||||
import tracker from '@utils/time_tracker';
|
||||
@@ -68,7 +67,6 @@ export default class Login extends PureComponent {
|
||||
componentDidMount() {
|
||||
Dimensions.addEventListener('change', this.orientationDidChange);
|
||||
|
||||
setMfaPreflightDone(false);
|
||||
this.setEmmUsernameIfAvailable();
|
||||
}
|
||||
|
||||
@@ -92,7 +90,7 @@ export default class Login extends PureComponent {
|
||||
const loginId = this.loginId;
|
||||
const password = this.password;
|
||||
|
||||
goToScreen(screen, title, {onMfaComplete: this.checkLoginResponse, goToChannel: this.goToChannel, loginId, password});
|
||||
goToScreen(screen, title, {goToChannel: this.goToChannel, loginId, password});
|
||||
};
|
||||
|
||||
blur = () => {
|
||||
@@ -182,9 +180,6 @@ export default class Login extends PureComponent {
|
||||
if (!errorId) {
|
||||
return error.message;
|
||||
}
|
||||
if (mfaExpectedErrors.includes(errorId) && !getMfaPreflightDone()) {
|
||||
return null;
|
||||
}
|
||||
if (
|
||||
errorId === 'store.sql_user.get_for_login.app_error' ||
|
||||
errorId === 'ent.ldap.do_login.user_not_registered.app_error'
|
||||
|
||||
@@ -94,7 +94,6 @@ describe('Login', () => {
|
||||
'Multi-factor Authentication',
|
||||
{
|
||||
goToChannel: wrapper.instance().goToChannel,
|
||||
onMfaComplete: wrapper.instance().checkLoginResponse,
|
||||
loginId,
|
||||
password,
|
||||
},
|
||||
|
||||
@@ -21,6 +21,7 @@ import FormattedText from '@components/formatted_text';
|
||||
import StatusBar from '@components/status_bar';
|
||||
import {paddingHorizontal as padding} from '@components/safe_area_view/iphone_x_spacing';
|
||||
import {ViewTypes} from '@constants';
|
||||
import globalEventHandler from '@init/global_event_handler';
|
||||
import {preventDoubleTap} from '@utils/tap';
|
||||
|
||||
import {GlobalStyles} from 'app/styles';
|
||||
@@ -44,19 +45,21 @@ export default class LoginOptions extends PureComponent {
|
||||
Dimensions.removeEventListener('change', this.orientationDidChange);
|
||||
}
|
||||
|
||||
goToLogin = preventDoubleTap(() => {
|
||||
goToLogin = preventDoubleTap(async () => {
|
||||
const {intl} = this.context;
|
||||
const screen = 'Login';
|
||||
const title = intl.formatMessage({id: 'mobile.routes.login', defaultMessage: 'Login'});
|
||||
|
||||
globalEventHandler.clearCookiesAndWebData();
|
||||
goToScreen(screen, title);
|
||||
});
|
||||
|
||||
goToSSO = (ssoType) => {
|
||||
goToSSO = async (ssoType) => {
|
||||
const {intl} = this.context;
|
||||
const screen = 'SSO';
|
||||
const title = intl.formatMessage({id: 'mobile.routes.sso', defaultMessage: 'Single Sign-On'});
|
||||
|
||||
globalEventHandler.clearCookiesAndWebData();
|
||||
goToScreen(screen, title, {ssoType});
|
||||
};
|
||||
|
||||
|
||||
@@ -15,14 +15,12 @@ import {
|
||||
} from 'react-native';
|
||||
import Button from 'react-native-button';
|
||||
|
||||
import {popTopScreen} from '@actions/navigation';
|
||||
import ErrorText from '@components/error_text';
|
||||
import FormattedText from '@components/formatted_text';
|
||||
import StatusBar from '@components/status_bar';
|
||||
import TextInputWithLocalizedPlaceholder from '@components/text_input_with_localized_placeholder';
|
||||
import {t} from '@utils/i18n';
|
||||
import {preventDoubleTap} from '@utils/tap';
|
||||
import {setMfaPreflightDone} from '@utils/security';
|
||||
|
||||
import {GlobalStyles} from 'app/styles';
|
||||
|
||||
@@ -34,7 +32,6 @@ export default class Mfa extends PureComponent {
|
||||
goToChannel: PropTypes.func.isRequired,
|
||||
loginId: PropTypes.string.isRequired,
|
||||
password: PropTypes.string.isRequired,
|
||||
onMfaComplete: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
constructor(props) {
|
||||
@@ -79,7 +76,7 @@ export default class Mfa extends PureComponent {
|
||||
};
|
||||
|
||||
submit = preventDoubleTap(() => {
|
||||
const {actions, goToChannel, loginId, password, onMfaComplete} = this.props;
|
||||
const {actions, goToChannel, loginId, password} = this.props;
|
||||
const {token} = this.state;
|
||||
|
||||
Keyboard.dismiss();
|
||||
@@ -94,16 +91,16 @@ export default class Mfa extends PureComponent {
|
||||
});
|
||||
return;
|
||||
}
|
||||
setMfaPreflightDone(true);
|
||||
|
||||
this.setState({isLoading: true});
|
||||
actions.login(loginId, password, token).then((result) => {
|
||||
this.setState({isLoading: false});
|
||||
if (onMfaComplete(result)) {
|
||||
goToChannel();
|
||||
if (result.error) {
|
||||
this.setState({error: result.error});
|
||||
return;
|
||||
}
|
||||
|
||||
popTopScreen();
|
||||
goToChannel();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -6,51 +6,52 @@ exports[`MoreChannels should match snapshot 1`] = `
|
||||
<React.Fragment>
|
||||
<View
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
},
|
||||
null,
|
||||
]
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
}
|
||||
}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
<View
|
||||
style={null}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
}
|
||||
}
|
||||
}
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
|
||||
@@ -452,25 +452,27 @@ export default class MoreChannels extends PureComponent {
|
||||
|
||||
content = (
|
||||
<React.Fragment>
|
||||
<View style={[style.searchBar, padding(isLandscape)]}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.searchChannels}
|
||||
onSearchButtonPress={this.searchChannels}
|
||||
onCancelButtonPress={this.cancelSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
<View style={style.searchBar}>
|
||||
<View style={padding(isLandscape)}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.searchChannels}
|
||||
onSearchButtonPress={this.searchChannels}
|
||||
onCancelButtonPress={this.cancelSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
{channelDropdown}
|
||||
<CustomList
|
||||
|
||||
@@ -52,7 +52,7 @@ export default class MoreDirectMessages extends PureComponent {
|
||||
currentDisplayName: PropTypes.string,
|
||||
currentTeamId: PropTypes.string.isRequired,
|
||||
currentUserId: PropTypes.string.isRequired,
|
||||
isGuest: PropTypes.object.isRequired,
|
||||
isGuest: PropTypes.bool,
|
||||
restrictDirectMessage: PropTypes.bool.isRequired,
|
||||
teammateNameDisplay: PropTypes.string,
|
||||
theme: PropTypes.object.isRequired,
|
||||
@@ -472,25 +472,27 @@ export default class MoreDirectMessages extends PureComponent {
|
||||
return (
|
||||
<KeyboardLayout>
|
||||
<StatusBar/>
|
||||
<View style={[style.searchBar, padding(isLandscape)]}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.onSearch}
|
||||
onSearchButtonPress={this.onSearch}
|
||||
onCancelButtonPress={this.clearSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
<View style={style.searchBar}>
|
||||
<View style={padding(isLandscape)}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.onSearch}
|
||||
onSearchButtonPress={this.onSearch}
|
||||
onCancelButtonPress={this.clearSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<SelectedUsers
|
||||
selectedIds={this.state.selectedIds}
|
||||
@@ -501,6 +503,7 @@ export default class MoreDirectMessages extends PureComponent {
|
||||
<CustomList
|
||||
data={data}
|
||||
extraData={selectedIds}
|
||||
isLandscape={isLandscape}
|
||||
key='custom_list'
|
||||
listType={listType}
|
||||
loading={loading}
|
||||
|
||||
@@ -110,7 +110,7 @@ export default class OptionsModal extends PureComponent {
|
||||
|
||||
const style = StyleSheet.create({
|
||||
wrapper: {
|
||||
backgroundColor: Platform.select({ios: 'rgba(0, 0, 0, 0.5)'}),
|
||||
backgroundColor: 'rgba(0, 0, 0, 0.5)',
|
||||
flex: 1,
|
||||
},
|
||||
});
|
||||
|
||||
@@ -40,11 +40,8 @@ exports[`PinnedPosts should match snapshot when getPinnedPosts failed 1`] = `
|
||||
>
|
||||
<Connect(StatusBar) />
|
||||
<FailedNetworkAction
|
||||
actionDefaultMessage="try again"
|
||||
actionId="mobile.failed_network_action.retry"
|
||||
errorDefaultMessage="Messages will load when you have an internet connection or {tryAgainAction}."
|
||||
errorId="mobile.failed_network_action.shortDescription"
|
||||
onRetry={[Function]}
|
||||
showAction={true}
|
||||
theme={
|
||||
Object {
|
||||
"awayIndicator": "#ffbc42",
|
||||
|
||||
@@ -19,7 +19,7 @@ function makeMapStateToProps() {
|
||||
const getProfilesByIdsAndUsernames = makeGetProfilesByIdsAndUsernames();
|
||||
|
||||
return function mapStateToProps(state, ownProps) {
|
||||
const reactions = getReactionsForPostSelector(state, ownProps.postId);
|
||||
const reactions = getReactionsForPostSelector(state, ownProps.postId) || undefined;
|
||||
const allUserIds = getUniqueUserIds(reactions);
|
||||
|
||||
return {
|
||||
|
||||
@@ -40,11 +40,8 @@ exports[`RecentMentions should match snapshot when getRecentMentions failed 1`]
|
||||
>
|
||||
<Connect(StatusBar) />
|
||||
<FailedNetworkAction
|
||||
actionDefaultMessage="try again"
|
||||
actionId="mobile.failed_network_action.retry"
|
||||
errorDefaultMessage="Messages will load when you have an internet connection or {tryAgainAction}."
|
||||
errorId="mobile.failed_network_action.shortDescription"
|
||||
onRetry={[Function]}
|
||||
showAction={true}
|
||||
theme={
|
||||
Object {
|
||||
"awayIndicator": "#ffbc42",
|
||||
|
||||
@@ -713,7 +713,7 @@ export default class Search extends PureComponent {
|
||||
paddingRes.paddingLeft = null;
|
||||
|
||||
if (isLandscape) {
|
||||
paddingRes.paddingTop = 10;
|
||||
paddingRes.paddingTop = 5;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -147,19 +147,19 @@ export default class SelectServer extends PureComponent {
|
||||
}
|
||||
};
|
||||
|
||||
getUrl = () => {
|
||||
const urlParse = require('url-parse');
|
||||
let preUrl = urlParse(this.state.url, true);
|
||||
getUrl = async (serverUrl, useHttp = false) => {
|
||||
let url = this.sanitizeUrl(serverUrl, useHttp);
|
||||
|
||||
if (!preUrl.host || preUrl.protocol === 'file:') {
|
||||
preUrl = urlParse('https://' + stripTrailingSlashes(this.state.url), true);
|
||||
try {
|
||||
const resp = await fetch(url, {method: 'HEAD'});
|
||||
if (resp?.rnfbRespInfo?.redirects?.length) {
|
||||
url = resp.rnfbRespInfo.redirects[resp.rnfbRespInfo.redirects.length - 1];
|
||||
}
|
||||
} catch {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
if (preUrl.protocol === 'http:') {
|
||||
preUrl.protocol = 'https:';
|
||||
}
|
||||
|
||||
return stripTrailingSlashes(preUrl.protocol + '//' + preUrl.host + preUrl.pathname);
|
||||
return this.sanitizeUrl(url, useHttp);
|
||||
};
|
||||
|
||||
goToNextScreen = (screen, title, passProps = {}, navOptions = {}) => {
|
||||
@@ -187,8 +187,6 @@ export default class SelectServer extends PureComponent {
|
||||
};
|
||||
|
||||
handleConnect = preventDoubleTap(async () => {
|
||||
const url = this.getUrl();
|
||||
|
||||
Keyboard.dismiss();
|
||||
|
||||
if (this.state.connecting || this.state.connected) {
|
||||
@@ -197,7 +195,7 @@ export default class SelectServer extends PureComponent {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isValidUrl(url)) {
|
||||
if (!isValidUrl(this.sanitizeUrl(this.state.url))) {
|
||||
this.setState({
|
||||
error: {
|
||||
intl: {
|
||||
@@ -219,11 +217,11 @@ export default class SelectServer extends PureComponent {
|
||||
auto: true,
|
||||
certificate,
|
||||
}).build();
|
||||
this.pingServer(url);
|
||||
this.pingServer(this.state.url);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.pingServer(url);
|
||||
this.pingServer(this.state.url);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -301,7 +299,7 @@ export default class SelectServer extends PureComponent {
|
||||
resetToChannel();
|
||||
};
|
||||
|
||||
pingServer = (url, retryWithHttp = true) => {
|
||||
pingServer = async (url, retryWithHttp = true) => {
|
||||
const {
|
||||
getPing,
|
||||
handleServerUrlChanged,
|
||||
@@ -315,9 +313,6 @@ export default class SelectServer extends PureComponent {
|
||||
error: null,
|
||||
});
|
||||
|
||||
Client4.setUrl(url);
|
||||
handleServerUrlChanged(url);
|
||||
|
||||
let cancel = false;
|
||||
this.cancelPing = () => {
|
||||
cancel = true;
|
||||
@@ -330,13 +325,20 @@ export default class SelectServer extends PureComponent {
|
||||
this.cancelPing = null;
|
||||
};
|
||||
|
||||
getPing().then((result) => {
|
||||
const serverUrl = await this.getUrl(url, !retryWithHttp);
|
||||
Client4.setUrl(serverUrl);
|
||||
handleServerUrlChanged(serverUrl);
|
||||
|
||||
try {
|
||||
const result = await getPing();
|
||||
|
||||
if (cancel) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (result.error && retryWithHttp) {
|
||||
this.pingServer(url.replace('https:', 'http:'), false);
|
||||
const nurl = serverUrl.replace('https:', 'http:');
|
||||
this.pingServer(nurl, false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -350,7 +352,7 @@ export default class SelectServer extends PureComponent {
|
||||
connecting: false,
|
||||
error: result.error,
|
||||
});
|
||||
}).catch(() => {
|
||||
} catch {
|
||||
if (cancel) {
|
||||
return;
|
||||
}
|
||||
@@ -358,9 +360,23 @@ export default class SelectServer extends PureComponent {
|
||||
this.setState({
|
||||
connecting: false,
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
sanitizeUrl = (url, useHttp = false) => {
|
||||
const urlParse = require('url-parse');
|
||||
let preUrl = urlParse(url, true);
|
||||
|
||||
if (!preUrl.host || preUrl.protocol === 'file:') {
|
||||
preUrl = urlParse('https://' + stripTrailingSlashes(url), true);
|
||||
}
|
||||
|
||||
if (preUrl.protocol === 'http:' && !useHttp) {
|
||||
preUrl.protocol = 'https:';
|
||||
}
|
||||
return stripTrailingSlashes(preUrl.protocol + '//' + preUrl.host + preUrl.pathname);
|
||||
}
|
||||
|
||||
scheduleSessionExpiredNotification = () => {
|
||||
const {intl} = this.context;
|
||||
const {actions} = this.props;
|
||||
|
||||
@@ -2,11 +2,8 @@
|
||||
|
||||
exports[`SelectTeam should match snapshot for fail of teams 1`] = `
|
||||
<FailedNetworkAction
|
||||
actionDefaultMessage="try again"
|
||||
actionId="mobile.failed_network_action.retry"
|
||||
errorDefaultMessage="Messages will load when you have an internet connection or {tryAgainAction}."
|
||||
errorId="mobile.failed_network_action.shortDescription"
|
||||
onRetry={[Function]}
|
||||
showAction={true}
|
||||
theme={
|
||||
Object {
|
||||
"awayIndicator": "#ffbc42",
|
||||
|
||||
@@ -11,53 +11,54 @@ exports[`SelectorScreen should match snapshot for channels 1`] = `
|
||||
<Connect(StatusBar) />
|
||||
<View
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
},
|
||||
null,
|
||||
]
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
}
|
||||
}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
<View
|
||||
style={null}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
}
|
||||
}
|
||||
}
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
canRefresh={true}
|
||||
@@ -116,53 +117,54 @@ exports[`SelectorScreen should match snapshot for channels 2`] = `
|
||||
<Connect(StatusBar) />
|
||||
<View
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
},
|
||||
null,
|
||||
]
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
}
|
||||
}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
<View
|
||||
style={null}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
}
|
||||
}
|
||||
}
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
canRefresh={true}
|
||||
@@ -221,53 +223,54 @@ exports[`SelectorScreen should match snapshot for explicit options 1`] = `
|
||||
<Connect(StatusBar) />
|
||||
<View
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
},
|
||||
null,
|
||||
]
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
}
|
||||
}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
<View
|
||||
style={null}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
}
|
||||
}
|
||||
}
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
canRefresh={true}
|
||||
@@ -333,53 +336,54 @@ exports[`SelectorScreen should match snapshot for searching 1`] = `
|
||||
<Connect(StatusBar) />
|
||||
<View
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
},
|
||||
null,
|
||||
]
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
}
|
||||
}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
<View
|
||||
style={null}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
}
|
||||
}
|
||||
}
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value="name2"
|
||||
/>
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value="name2"
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
canRefresh={true}
|
||||
@@ -438,53 +442,54 @@ exports[`SelectorScreen should match snapshot for users 1`] = `
|
||||
<Connect(StatusBar) />
|
||||
<View
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
},
|
||||
null,
|
||||
]
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
}
|
||||
}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
<View
|
||||
style={null}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
}
|
||||
}
|
||||
}
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
canRefresh={true}
|
||||
@@ -543,53 +548,54 @@ exports[`SelectorScreen should match snapshot for users 2`] = `
|
||||
<Connect(StatusBar) />
|
||||
<View
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
},
|
||||
null,
|
||||
]
|
||||
Object {
|
||||
"height": 38,
|
||||
"marginVertical": 5,
|
||||
"paddingLeft": 8,
|
||||
}
|
||||
}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
<View
|
||||
style={null}
|
||||
>
|
||||
<Search
|
||||
autoCapitalize="none"
|
||||
backArrowSize={24}
|
||||
backgroundColor="transparent"
|
||||
blurOnSubmit={false}
|
||||
cancelTitle="Cancel"
|
||||
containerHeight={40}
|
||||
deleteIconSize={20}
|
||||
editable={true}
|
||||
inputHeight={33}
|
||||
inputStyle={
|
||||
Object {
|
||||
"backgroundColor": "rgba(61,60,64,0.2)",
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 15,
|
||||
}
|
||||
}
|
||||
}
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
keyboardAppearance="light"
|
||||
keyboardShouldPersist={false}
|
||||
keyboardType="default"
|
||||
onBlur={[Function]}
|
||||
onCancelButtonPress={[Function]}
|
||||
onChangeText={[Function]}
|
||||
onSearchButtonPress={[Function]}
|
||||
onSelectionChange={[Function]}
|
||||
placeholder="Search"
|
||||
placeholderTextColor="rgba(61,60,64,0.5)"
|
||||
returnKeyType="search"
|
||||
searchBarRightMargin={0}
|
||||
searchIconSize={24}
|
||||
showArrow={false}
|
||||
showCancel={true}
|
||||
tintColorDelete="rgba(61,60,64,0.5)"
|
||||
tintColorSearch="rgba(61,60,64,0.5)"
|
||||
titleCancelColor="#3d3c40"
|
||||
value=""
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
canRefresh={true}
|
||||
|
||||
@@ -316,25 +316,27 @@ export default class SelectorScreen extends PureComponent {
|
||||
return (
|
||||
<View style={style.container}>
|
||||
<StatusBar/>
|
||||
<View style={[style.searchBar, padding(isLandscape)]}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.onSearch}
|
||||
onSearchButtonPress={this.onSearch}
|
||||
onCancelButtonPress={this.clearSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
<View style={style.searchBar}>
|
||||
<View style={padding(isLandscape)}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={33}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.centerChannelColor, 0.5)}
|
||||
titleCancelColor={theme.centerChannelColor}
|
||||
onChangeText={this.onSearch}
|
||||
onSearchButtonPress={this.onSearch}
|
||||
onCancelButtonPress={this.clearSearch}
|
||||
autoCapitalize='none'
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
value={term}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<CustomList
|
||||
data={data}
|
||||
|
||||
@@ -32,7 +32,7 @@ class Settings extends PureComponent {
|
||||
currentTeamId: PropTypes.string.isRequired,
|
||||
currentUserId: PropTypes.string.isRequired,
|
||||
currentUrl: PropTypes.string.isRequired,
|
||||
errors: PropTypes.array.isRequired,
|
||||
errors: PropTypes.object.isRequired,
|
||||
intl: intlShape.isRequired,
|
||||
joinableTeams: PropTypes.array.isRequired,
|
||||
theme: PropTypes.object,
|
||||
|
||||
@@ -112,26 +112,28 @@ export default class Timezone extends PureComponent {
|
||||
return (
|
||||
<View style={style.container}>
|
||||
<StatusBar/>
|
||||
<View style={[style.header, padding(isLandscape)]}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={intl.formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={intl.formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={Platform.OS === 'ios' ? 33 : 46}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
selectionColor={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
titleCancelColor={theme.sidebarHeaderTextColor}
|
||||
onChangeText={this.handleTextChanged}
|
||||
autoCapitalize='none'
|
||||
value={value}
|
||||
containerStyle={style.searchBarContainer}
|
||||
showArrow={false}
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
/>
|
||||
<View style={style.header}>
|
||||
<View style={padding(isLandscape)}>
|
||||
<SearchBar
|
||||
ref={this.setSearchBarRef}
|
||||
placeholder={intl.formatMessage({id: 'search_bar.search', defaultMessage: 'Search'})}
|
||||
cancelTitle={intl.formatMessage({id: 'mobile.post.cancel', defaultMessage: 'Cancel'})}
|
||||
backgroundColor='transparent'
|
||||
inputHeight={Platform.OS === 'ios' ? 33 : 46}
|
||||
inputStyle={searchBarInput}
|
||||
placeholderTextColor={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
selectionColor={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
tintColorSearch={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
tintColorDelete={changeOpacity(theme.sidebarHeaderTextColor, 0.5)}
|
||||
titleCancelColor={theme.sidebarHeaderTextColor}
|
||||
onChangeText={this.handleTextChanged}
|
||||
autoCapitalize='none'
|
||||
value={value}
|
||||
containerStyle={style.searchBarContainer}
|
||||
showArrow={false}
|
||||
keyboardAppearance={getKeyboardAppearanceFromTheme(theme)}
|
||||
/>
|
||||
</View>
|
||||
</View>
|
||||
<FlatList
|
||||
data={this.filteredTimezones(value)}
|
||||
|
||||
@@ -27,7 +27,7 @@ const HEADERS = {
|
||||
'X-Mobile-App': 'mattermost',
|
||||
};
|
||||
|
||||
const postMessageJS = "window.ReactNativeWebView.postMessage(document.body.innerText, '*');";
|
||||
const postMessageJS = 'window.ReactNativeWebView.postMessage(document.body.innerText);';
|
||||
|
||||
// Used to make sure that OneLogin forms scale appropriately on both platforms.
|
||||
const oneLoginFormScalingJS = `
|
||||
@@ -87,15 +87,15 @@ class SSO extends PureComponent {
|
||||
switch (props.ssoType) {
|
||||
case ViewTypes.GITLAB:
|
||||
this.loginUrl = `${props.serverUrl}/oauth/gitlab/mobile_login`;
|
||||
this.completedUrl = '/signup/gitlab/complete';
|
||||
this.completeUrlPath = '/signup/gitlab/complete';
|
||||
break;
|
||||
case ViewTypes.SAML:
|
||||
this.loginUrl = `${props.serverUrl}/login/sso/saml?action=mobile`;
|
||||
this.completedUrl = '/login/sso/saml';
|
||||
this.completeUrlPath = '/login/sso/saml';
|
||||
break;
|
||||
case ViewTypes.OFFICE365:
|
||||
this.loginUrl = `${props.serverUrl}/oauth/office365/mobile_login`;
|
||||
this.completedUrl = '/signup/office365/complete';
|
||||
this.completeUrlPath = '/signup/office365/complete';
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -104,6 +104,44 @@ class SSO extends PureComponent {
|
||||
}
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
clearTimeout(this.cookiesTimeout);
|
||||
}
|
||||
|
||||
extractCookie = (parsedUrl) => {
|
||||
CookieManager.get(parsedUrl.origin, true).then((res) => {
|
||||
const mmtoken = res.MMAUTHTOKEN;
|
||||
const token = typeof mmtoken === 'object' ? mmtoken.value : mmtoken;
|
||||
|
||||
if (token) {
|
||||
clearTimeout(this.cookiesTimeout);
|
||||
this.setState({renderWebView: false});
|
||||
const {
|
||||
ssoLogin,
|
||||
} = this.props.actions;
|
||||
|
||||
Client4.setToken(token);
|
||||
if (this.props.serverUrl !== parsedUrl.origin) {
|
||||
const original = urlParse(this.props.serverUrl);
|
||||
|
||||
// Check whether we need to set a sub-path
|
||||
parsedUrl.set('pathname', original.pathname || '');
|
||||
Client4.setUrl(parsedUrl.href);
|
||||
}
|
||||
ssoLogin(token).then((result) => {
|
||||
if (result.error) {
|
||||
this.onLoadEndError(result.error);
|
||||
return;
|
||||
}
|
||||
this.goToChannel();
|
||||
});
|
||||
} else if (this.webView && !this.state.error) {
|
||||
this.webView.injectJavaScript(postMessageJS);
|
||||
this.cookiesTimeout = setTimeout(this.extractCookie.bind(null, parsedUrl), 250);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
goToChannel = () => {
|
||||
tracker.initialLoad = Date.now();
|
||||
|
||||
@@ -122,6 +160,7 @@ class SSO extends PureComponent {
|
||||
status_code: statusCode,
|
||||
} = response;
|
||||
if (id && message && statusCode !== 200) {
|
||||
clearTimeout(this.cookiesTimeout);
|
||||
this.setState({error: message});
|
||||
}
|
||||
}
|
||||
@@ -139,7 +178,7 @@ class SSO extends PureComponent {
|
||||
|
||||
if (parsed.host.includes('.onelogin.com')) {
|
||||
nextState.jsCode = oneLoginFormScalingJS;
|
||||
} else if (parsed.pathname === this.completedUrl) {
|
||||
} else if (parsed.pathname === this.completeUrlPath) {
|
||||
// To avoid `window.postMessage` conflicts in any of the SSO flows
|
||||
// we enable the onMessage handler only When the webView navigates to the final SSO URL.
|
||||
nextState.messagingEnabled = true;
|
||||
@@ -150,29 +189,15 @@ class SSO extends PureComponent {
|
||||
|
||||
onLoadEnd = (event) => {
|
||||
const url = event.nativeEvent.url;
|
||||
if (url.includes(this.completedUrl)) {
|
||||
CookieManager.get(this.props.serverUrl, this.useWebkit).then((res) => {
|
||||
const mmtoken = res.MMAUTHTOKEN;
|
||||
const token = typeof mmtoken === 'object' ? mmtoken.value : mmtoken;
|
||||
const parsed = urlParse(url);
|
||||
|
||||
if (token) {
|
||||
this.setState({renderWebView: false});
|
||||
const {
|
||||
ssoLogin,
|
||||
} = this.props.actions;
|
||||
let isLastRedirect = url.includes(this.completeUrlPath);
|
||||
if (this.props.ssoType === ViewTypes.SAML) {
|
||||
isLastRedirect = isLastRedirect && !parsed.query;
|
||||
}
|
||||
|
||||
Client4.setToken(token);
|
||||
ssoLogin(token).then((result) => {
|
||||
if (result.error) {
|
||||
this.onLoadEndError(result.error);
|
||||
return;
|
||||
}
|
||||
this.goToChannel();
|
||||
});
|
||||
} else if (this.webView && !this.state.error) {
|
||||
this.webView.injectJavaScript(postMessageJS);
|
||||
}
|
||||
});
|
||||
if (isLastRedirect) {
|
||||
this.extractCookie(parsed);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -221,9 +246,10 @@ class SSO extends PureComponent {
|
||||
onShouldStartLoadWithRequest={() => true}
|
||||
injectedJavaScript={jsCode}
|
||||
onLoadEnd={this.onLoadEnd}
|
||||
onMessage={messagingEnabled ? this.onMessage : null}
|
||||
onMessage={(messagingEnabled || Platform.OS === 'android') ? this.onMessage : null}
|
||||
sharedCookiesEnabled={Platform.OS === 'android'}
|
||||
cacheEnabled={false}
|
||||
useSharedProcessPool={false}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -288,11 +288,8 @@ exports[`TermsOfService should match snapshot for fail of get terms 1`] = `
|
||||
>
|
||||
<Connect(StatusBar) />
|
||||
<FailedNetworkAction
|
||||
actionDefaultMessage="try again"
|
||||
actionId="mobile.failed_network_action.retry"
|
||||
errorDefaultMessage="Messages will load when you have an internet connection or {tryAgainAction}."
|
||||
errorId="mobile.failed_network_action.shortDescription"
|
||||
onRetry={[Function]}
|
||||
showAction={true}
|
||||
theme={
|
||||
Object {
|
||||
"awayIndicator": "#ffbc42",
|
||||
|
||||
131
app/selectors/emojis.js
Normal file
131
app/selectors/emojis.js
Normal file
@@ -0,0 +1,131 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import {createSelector} from 'reselect';
|
||||
|
||||
import {t} from '@utils/i18n';
|
||||
import {getCustomEmojisByName as selectCustomEmojisByName} from '@mm-redux/selectors/entities/emojis';
|
||||
import {createIdsSelector} from '@mm-redux/utils/helpers';
|
||||
import {BuiltInEmojis, CategoryNames, Emojis, EmojiIndicesByAlias, EmojiIndicesByCategory} from '@utils/emojis';
|
||||
|
||||
const categoryToI18n = {
|
||||
activity: {
|
||||
id: t('mobile.emoji_picker.activity'),
|
||||
defaultMessage: 'ACTIVITY',
|
||||
icon: 'futbol-o',
|
||||
},
|
||||
custom: {
|
||||
id: t('mobile.emoji_picker.custom'),
|
||||
defaultMessage: 'CUSTOM',
|
||||
icon: 'at',
|
||||
},
|
||||
flags: {
|
||||
id: t('mobile.emoji_picker.flags'),
|
||||
defaultMessage: 'FLAGS',
|
||||
icon: 'flag-o',
|
||||
},
|
||||
foods: {
|
||||
id: t('mobile.emoji_picker.foods'),
|
||||
defaultMessage: 'FOODS',
|
||||
icon: 'cutlery',
|
||||
},
|
||||
nature: {
|
||||
id: t('mobile.emoji_picker.nature'),
|
||||
defaultMessage: 'NATURE',
|
||||
icon: 'leaf',
|
||||
},
|
||||
objects: {
|
||||
id: t('mobile.emoji_picker.objects'),
|
||||
defaultMessage: 'OBJECTS',
|
||||
icon: 'lightbulb-o',
|
||||
},
|
||||
people: {
|
||||
id: t('mobile.emoji_picker.people'),
|
||||
defaultMessage: 'PEOPLE',
|
||||
icon: 'smile-o',
|
||||
},
|
||||
places: {
|
||||
id: t('mobile.emoji_picker.places'),
|
||||
defaultMessage: 'PLACES',
|
||||
icon: 'plane',
|
||||
},
|
||||
recent: {
|
||||
id: t('mobile.emoji_picker.recent'),
|
||||
defaultMessage: 'RECENTLY USED',
|
||||
icon: 'clock-o',
|
||||
},
|
||||
symbols: {
|
||||
id: t('mobile.emoji_picker.symbols'),
|
||||
defaultMessage: 'SYMBOLS',
|
||||
icon: 'heart-o',
|
||||
},
|
||||
};
|
||||
|
||||
function fillEmoji(indice) {
|
||||
const emoji = Emojis[indice];
|
||||
return {
|
||||
name: emoji.aliases[0],
|
||||
aliases: emoji.aliases,
|
||||
};
|
||||
}
|
||||
|
||||
export const selectEmojisByName = createIdsSelector(
|
||||
selectCustomEmojisByName,
|
||||
(customEmojis) => {
|
||||
const emoticons = new Set();
|
||||
for (const [key] of [...EmojiIndicesByAlias.entries(), ...customEmojis.entries()]) {
|
||||
emoticons.add(key);
|
||||
}
|
||||
|
||||
return Array.from(emoticons);
|
||||
},
|
||||
);
|
||||
|
||||
export const selectEmojisBySection = createSelector(
|
||||
selectCustomEmojisByName,
|
||||
(state) => state.views.recentEmojis,
|
||||
(customEmojis, recentEmojis) => {
|
||||
const emoticons = CategoryNames.filter((name) => name !== 'custom').map((category) => {
|
||||
const items = EmojiIndicesByCategory.get(category).map(fillEmoji);
|
||||
|
||||
const section = {
|
||||
...categoryToI18n[category],
|
||||
key: category,
|
||||
data: items,
|
||||
};
|
||||
|
||||
return section;
|
||||
});
|
||||
|
||||
const customEmojiItems = [];
|
||||
BuiltInEmojis.forEach((emoji) => {
|
||||
customEmojiItems.push({
|
||||
name: emoji,
|
||||
});
|
||||
});
|
||||
|
||||
for (const [key] of customEmojis) {
|
||||
customEmojiItems.push({
|
||||
name: key,
|
||||
});
|
||||
}
|
||||
|
||||
emoticons.push({
|
||||
...categoryToI18n.custom,
|
||||
key: 'custom',
|
||||
data: customEmojiItems,
|
||||
});
|
||||
|
||||
if (recentEmojis.length) {
|
||||
const items = recentEmojis.map((emoji) => ({name: emoji}));
|
||||
|
||||
emoticons.unshift({
|
||||
...categoryToI18n.recent,
|
||||
key: 'recent',
|
||||
data: items,
|
||||
});
|
||||
}
|
||||
|
||||
return emoticons;
|
||||
},
|
||||
);
|
||||
@@ -5,11 +5,11 @@ import AsyncStorage from '@react-native-community/async-storage';
|
||||
import * as redux from 'redux';
|
||||
import {createPersistoid, createTransform, persistReducer, persistStore, Persistor, PersistConfig} from 'redux-persist';
|
||||
import {createBlacklistFilter} from 'redux-persist-transform-filter';
|
||||
import reduxReset from 'redux-reset';
|
||||
import DeviceInfo from 'react-native-device-info';
|
||||
|
||||
import {General} from '@mm-redux/constants';
|
||||
import serviceReducer from '@mm-redux/reducers';
|
||||
import {GenericAction} from '@mm-redux/types/actions';
|
||||
import {GlobalState} from '@mm-redux/types/store';
|
||||
|
||||
import initialState from '@store/initial_state';
|
||||
@@ -178,11 +178,20 @@ export default function configureStore(storage: any, preloadedState: any = {}, o
|
||||
emojiBlackListFilter,
|
||||
],
|
||||
throttle: 100,
|
||||
timeout: 60000,
|
||||
};
|
||||
|
||||
const persistConfig: PersistConfig<GlobalState> = Object.assign({}, defaultConfig, optionalConfig);
|
||||
const baseState: any = Object.assign({}, initialState, preloadedState);
|
||||
const rootReducer: any = createReducer(serviceReducer as any, appReducer as any);
|
||||
const baseReducer: any = createReducer(serviceReducer as any, appReducer as any);
|
||||
const rootReducer: any = (state: GlobalState, action: GenericAction) => {
|
||||
if (action.type === General.OFFLINE_STORE_PURGE) {
|
||||
// eslint-disable-next-line no-underscore-dangle
|
||||
delete action.data._persist;
|
||||
return baseReducer(action.data, action as any);
|
||||
}
|
||||
return baseReducer(state as any, action as any);
|
||||
};
|
||||
const persistedReducer = persistReducer({...persistConfig}, rootReducer);
|
||||
const options: ClientOptions = Object.assign({}, defaultOptions, optionalOptions);
|
||||
|
||||
@@ -193,7 +202,6 @@ export default function configureStore(storage: any, preloadedState: any = {}, o
|
||||
redux.applyMiddleware(
|
||||
...createMiddlewares(options),
|
||||
),
|
||||
reduxReset(General.OFFLINE_STORE_PURGE),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
@@ -93,6 +93,12 @@ export function getStateForReset(initialState, currentState) {
|
||||
},
|
||||
teams: {
|
||||
currentTeamId,
|
||||
teams: {
|
||||
[currentTeamId]: currentState.entities.teams.teams[currentTeamId],
|
||||
},
|
||||
myMembers: {
|
||||
[currentTeamId]: currentState.entities.teams.myMembers[currentTeamId],
|
||||
},
|
||||
},
|
||||
preferences,
|
||||
},
|
||||
|
||||
@@ -37,6 +37,16 @@ describe('getStateForReset', () => {
|
||||
},
|
||||
teams: {
|
||||
currentTeamId,
|
||||
teams: {
|
||||
[currentTeamId]: {
|
||||
id: 'currentTeamId',
|
||||
name: 'test',
|
||||
display_name: 'Test',
|
||||
},
|
||||
},
|
||||
myMembers: {
|
||||
[currentTeamId]: {},
|
||||
},
|
||||
},
|
||||
preferences: {
|
||||
myPreferences: {
|
||||
@@ -74,10 +84,12 @@ describe('getStateForReset', () => {
|
||||
expect(users.profiles[currentUserId]).toBeDefined();
|
||||
});
|
||||
|
||||
it('should keep the current team ID', () => {
|
||||
it('should keep the current team', () => {
|
||||
const resetState = getStateForReset(initialState, currentState);
|
||||
const {teams} = resetState.entities;
|
||||
expect(teams.currentTeamId).toEqual(currentTeamId);
|
||||
expect(teams.teams[currentTeamId]).toEqual(currentState.entities.teams.teams[currentTeamId]);
|
||||
expect(teams.myMembers[currentTeamId]).toEqual(currentState.entities.teams.myMembers[currentTeamId]);
|
||||
});
|
||||
|
||||
it('should keep theme preferences', () => {
|
||||
|
||||
@@ -1,27 +1,22 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
import {
|
||||
Alert,
|
||||
} from 'react-native';
|
||||
|
||||
import {
|
||||
setJSExceptionHandler,
|
||||
setNativeExceptionHandler,
|
||||
} from 'react-native-exception-handler';
|
||||
import {Alert} from 'react-native';
|
||||
import {setJSExceptionHandler, setNativeExceptionHandler} from 'react-native-exception-handler';
|
||||
|
||||
import {dismissAllModals} from '@actions/navigation';
|
||||
import {purgeOfflineStore} from '@actions/views/root';
|
||||
import {close as closeWebSocket} from '@actions/websocket';
|
||||
import {DEFAULT_LOCALE, getTranslations} from '@i18n';
|
||||
import {Client4} from '@mm-redux/client';
|
||||
import {logError} from '@mm-redux/actions/errors';
|
||||
import {close as closeWebSocket} from '@actions/websocket';
|
||||
|
||||
import {purgeOfflineStore} from 'app/actions/views/root';
|
||||
import {DEFAULT_LOCALE, getTranslations} from 'app/i18n';
|
||||
import {t} from 'app/utils/i18n';
|
||||
import {t} from '@utils/i18n';
|
||||
import {
|
||||
captureException,
|
||||
captureJSException,
|
||||
initializeSentry,
|
||||
LOGGER_NATIVE,
|
||||
} from 'app/utils/sentry';
|
||||
} from '@utils/sentry';
|
||||
|
||||
class JavascriptAndNativeErrorHandler {
|
||||
initializeErrorHandling = (store) => {
|
||||
@@ -63,7 +58,9 @@ class JavascriptAndNativeErrorHandler {
|
||||
translations[t('mobile.error_handler.description')],
|
||||
[{
|
||||
text: translations[t('mobile.error_handler.button')],
|
||||
onPress: () => {
|
||||
onPress: async () => {
|
||||
await dismissAllModals();
|
||||
|
||||
// purge the store
|
||||
dispatch(purgeOfflineStore());
|
||||
},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import {Alert} from 'react-native';
|
||||
import {Alert, Platform} from 'react-native';
|
||||
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
|
||||
|
||||
import {Posts} from '@mm-redux/constants';
|
||||
@@ -86,6 +86,10 @@ export function isPendingPost(postId, userId) {
|
||||
}
|
||||
|
||||
export function validatePreviousVersion(previousVersion) {
|
||||
if (Platform.OS === 'ios') {
|
||||
INVALID_VERSIONS.push('1.31.0', '1.31.1');
|
||||
}
|
||||
|
||||
if (!previousVersion || INVALID_VERSIONS.includes(previousVersion)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -4,16 +4,6 @@
|
||||
import {Client4} from '@mm-redux/client';
|
||||
import CookieManager from '@react-native-community/cookies';
|
||||
|
||||
let mfaPreflightDone = false;
|
||||
|
||||
export function setMfaPreflightDone(state) {
|
||||
mfaPreflightDone = state;
|
||||
}
|
||||
|
||||
export function getMfaPreflightDone() {
|
||||
return mfaPreflightDone;
|
||||
}
|
||||
|
||||
export function setCSRFFromCookie(url) {
|
||||
return new Promise((resolve) => {
|
||||
CookieManager.get(url, false).then((cookies) => {
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
// See LICENSE.txt for license information.
|
||||
// @flow
|
||||
|
||||
export function selectFirstAvailableTeam(teams, primaryTeam) {
|
||||
export function selectFirstAvailableTeam(teams, primaryTeamName) {
|
||||
let defaultTeam;
|
||||
if (primaryTeam) {
|
||||
defaultTeam = teams.find((t) => t.name === primaryTeam.toLowerCase());
|
||||
if (primaryTeamName) {
|
||||
defaultTeam = teams.find((t) => t?.name === primaryTeamName.toLowerCase());
|
||||
}
|
||||
|
||||
if (!defaultTeam) {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"about.teamEditionSt": "Ihre gesamte Team-Kommunikation an einem Ort, sofort durchsuchbar und überall verfügbar.",
|
||||
"about.teamEditiont0": "Team Edition",
|
||||
"about.teamEditiont1": "Enterprise Edition",
|
||||
"about.title": "Über Mattermost",
|
||||
"about.title": "Über {appTitle}",
|
||||
"announcment_banner.dont_show_again": "Nicht erneut anzeigen",
|
||||
"api.channel.add_member.added": "{addedUsername} durch {username} zum Kanal hinzugefügt.",
|
||||
"archivedChannelMessage": "Sie sehen einen **archivierten Kanal**. Neue Nachrichten können nicht geschickt werden.",
|
||||
@@ -27,7 +27,7 @@
|
||||
"channel_modal.descriptionHelp": "Beschreiben Sie,wie dieser Kanal genutzt werden soll.",
|
||||
"channel_modal.header": "Überschrift",
|
||||
"channel_modal.headerEx": "Z.B.: \"[Link Titel](http://beispiel.de)\"",
|
||||
"channel_modal.headerHelp": "Der Text der in der Kopfzeile des Kanals neben dem Namen steht. Zum Beispiel könnten Sie häufig genutzte Links durch Hinzufügen von [Link Titel](http://example.de) anzeigen lassen.",
|
||||
"channel_modal.headerHelp": "Der Text, der in der Kopfzeile des Kanals neben dem Namen steht. Zum Beispiel könnten Sie häufig genutzte Links durch Hinzufügen von [Link Titel](http://example.de) anzeigen lassen.",
|
||||
"channel_modal.name": "Name",
|
||||
"channel_modal.nameEx": "Z.B.: \"Bugs\", \"Marketing\", \"客户支持\"",
|
||||
"channel_modal.optional": "(optional)",
|
||||
@@ -35,8 +35,11 @@
|
||||
"channel_modal.purposeEx": "Z.B.: \"Ein Kanal um Fehler und Verbesserungsvorschläge abzulegen\"",
|
||||
"channel_notifications.ignoreChannelMentions.settings": "@channel, @here, @all ignorieren",
|
||||
"channel_notifications.muteChannel.settings": "Kanal stummschalten",
|
||||
"channel.channelHasGuests": "Dieser Kanal hat Gäste",
|
||||
"channel.hasGuests": "Diese Gruppennachricht hat Gäste",
|
||||
"channel.isGuest": "Diese Person ist ein Gast.",
|
||||
"combined_system_message.added_to_channel.many_expanded": "{users} und {lastUser} wurden durch {actor} **zum Kanal hinzugefügt**.",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser} von {actor} **zum Kanal hinzugefügt**.",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser} durch {actor} **zum Kanal hinzugefügt**.",
|
||||
"combined_system_message.added_to_channel.one_you": "Sie wurden durch {actor} **zum Kanal hinzugefügt**.",
|
||||
"combined_system_message.added_to_channel.two": "{firstUser} und {secondUser} wurden durch {actor} **zum Kanal hinzugefügt**.",
|
||||
"combined_system_message.added_to_team.many_expanded": "{users} und {lastUser} wurden durch {actor} **zum Team hinzugefügt**.",
|
||||
@@ -45,19 +48,19 @@
|
||||
"combined_system_message.added_to_team.two": "{firstUser} und {secondUser} wurden durch {actor} **zum Team hinzugefügt**.",
|
||||
"combined_system_message.joined_channel.many_expanded": "{users} und {lastUser} **sind dem Kanal beigetreten**.",
|
||||
"combined_system_message.joined_channel.one": "{firstUser} **ist dem Kanal beigetreten**.",
|
||||
"combined_system_message.joined_channel.one_you": "**sind dem Kanal beigetreten**.",
|
||||
"combined_system_message.joined_channel.one_you": "Sie **sind dem Kanal beigetreten**.",
|
||||
"combined_system_message.joined_channel.two": "{firstUser} und {secondUser} **sind dem Kanal beigetreten**.",
|
||||
"combined_system_message.joined_team.many_expanded": "{users} und {lastUser} **sind dem Team beigetreten**.",
|
||||
"combined_system_message.joined_team.one": "{firstUser} **ist dem Team beigetreten**.",
|
||||
"combined_system_message.joined_team.one_you": "**ist dem Team beigetreten**.",
|
||||
"combined_system_message.joined_team.one_you": "Sie **sind dem Team beigetreten**.",
|
||||
"combined_system_message.joined_team.two": "{firstUser} und {secondUser} **sind dem Team beigetreten**.",
|
||||
"combined_system_message.left_channel.many_expanded": "{users} und {lastUser} **haben den Kanal verlassen**.",
|
||||
"combined_system_message.left_channel.one": "{firstUser} **hat den Kanal verlassen**.",
|
||||
"combined_system_message.left_channel.one_you": "**hat den Kanal verlassen**.",
|
||||
"combined_system_message.left_channel.one_you": "Sie **haben den Kanal verlassen**.",
|
||||
"combined_system_message.left_channel.two": "{firstUser} und {secondUser} **haben den Kanal verlassen**.",
|
||||
"combined_system_message.left_team.many_expanded": "{users} und {lastUser} **haben das Team verlassen**.",
|
||||
"combined_system_message.left_team.one": "{firstUser} **hat das Team verlassen**.",
|
||||
"combined_system_message.left_team.one_you": "**hat das Team verlassen**.",
|
||||
"combined_system_message.left_team.one_you": "Sie **haben das Team verlassen**.",
|
||||
"combined_system_message.left_team.two": "{firstUser} und {secondUser} **haben das Team verlassen**.",
|
||||
"combined_system_message.removed_from_channel.many_expanded": "{users} und {lastUser} wurden **aus dem Kanal entfernt**.",
|
||||
"combined_system_message.removed_from_channel.one": "{firstUser} wurde **aus dem Kanal entfernt**.",
|
||||
@@ -70,21 +73,21 @@
|
||||
"combined_system_message.you": "Sie",
|
||||
"create_comment.addComment": "Kommentar hinzufügen...",
|
||||
"create_post.deactivated": "Sie betrachten einen archivierten Kanal mit einem deaktivierten Benutzer.",
|
||||
"create_post.write": "Write to {channelDisplayName}",
|
||||
"create_post.write": "In {channelDisplayName} schreiben",
|
||||
"date_separator.today": "Heute",
|
||||
"date_separator.yesterday": "Gestern",
|
||||
"edit_post.editPost": "Nachricht bearbeiten...",
|
||||
"edit_post.save": "Speichern",
|
||||
"error.team_not_found.title": "Team nicht gefunden",
|
||||
"file_attachment.download": "Download",
|
||||
"file_upload.fileAbove": "Datei über {max}MB kann nicht hochgeladen werden: {filename}",
|
||||
"get_post_link_modal.title": "Kopiere Permalink",
|
||||
"get_post_link_modal.title": "Link kopieren",
|
||||
"integrations.add": "Hinzufügen",
|
||||
"intro_messages.anyMember": " Jedes Mitglied kann diesem Kanal beitreten und folgen.",
|
||||
"intro_messages.beginning": "Start von {name}",
|
||||
"intro_messages.channel": "Kanal",
|
||||
"intro_messages.creator": "Dies ist der Start von {type} {name}, erstellt durch {creator} am {date}.",
|
||||
"intro_messages.group": "Privater Kanal",
|
||||
"intro_messages.group_message": "Dies ist der Start ihres Gruppennachrichten-Verlaufs mit diesen Teammitgliedern. Nachrichten und hier geteilte Dateien sind für Personen außerhalb dieses Bereichs nicht sichtbar.",
|
||||
"intro_messages.noCreator": "Dies ist der Start von {type} {name}, erstellt am {date}.",
|
||||
"intro_messages.creator": "Dies ist der Start von {name}, erstellt durch {creator} am {date}.",
|
||||
"intro_messages.creatorPrivate": "Dies ist der Start von {name}, erstellt durch {creator} am {date}.",
|
||||
"intro_messages.group_message": "Dies ist der Start ihres Gruppennachrichtenverlaufs mit diesen Teammitgliedern. Nachrichten und hier geteilte Dateien sind für Personen außerhalb dieses Bereichs nicht sichtbar.",
|
||||
"intro_messages.noCreator": "Dies ist der Start von {name}, erstellt am {date}.",
|
||||
"intro_messages.onlyInvited": " Nur eingeladene Mitglieder können diesen privaten Kanal sehen.",
|
||||
"last_users_message.added_to_channel.type": "wurden durch {actor} **dem Kanal hinzugefügt**.",
|
||||
"last_users_message.added_to_team.type": "wurden durch {actor} **dem Team hinzugefügt**.",
|
||||
@@ -98,9 +101,9 @@
|
||||
"last_users_message.removed_from_team.type": "wurden **aus dem Team entfernt**.",
|
||||
"login_mfa.enterToken": "Um ihre Anmeldung zu vervollständigen, geben Sie bitte den Token des Authenticators ein",
|
||||
"login_mfa.token": "MFA Token",
|
||||
"login_mfa.tokenReq": "Bitte geben Sie den MFA Token ein",
|
||||
"login_mfa.tokenReq": "Bitte geben Sie den MFA-Token ein",
|
||||
"login.email": "E-Mail-Adresse",
|
||||
"login.forgot": "Ich habe mein Passwort vergessen",
|
||||
"login.forgot": "Ich habe mein Passwort vergessen.",
|
||||
"login.invalidPassword": "Ihr Passwort ist falsch.",
|
||||
"login.ldapUsername": "AD/LDAP-Benutzername",
|
||||
"login.ldapUsernameLower": "AD/LDAP-Benutzername",
|
||||
@@ -128,7 +131,6 @@
|
||||
"mobile.account_notifications.threads_mentions": "Erwähnungen in Antworten",
|
||||
"mobile.account_notifications.threads_start": "Diskussionen die ich starte",
|
||||
"mobile.account_notifications.threads_start_participate": "Diskussionen die ich starte oder an denen ich teilnehme",
|
||||
"mobile.account.settings.cancel": "Abbrechen",
|
||||
"mobile.account.settings.save": "Speichern",
|
||||
"mobile.action_menu.select": "Wählen Sie eine Option",
|
||||
"mobile.advanced_settings.clockDisplay": "Uhrzeit-Format",
|
||||
@@ -137,36 +139,44 @@
|
||||
"mobile.advanced_settings.delete_title": "Dokumente & Daten löschen",
|
||||
"mobile.advanced_settings.timezone": "Zeitzone",
|
||||
"mobile.advanced_settings.title": "Erweiterte Einstellungen",
|
||||
"mobile.android.camera_permission_denied_description": "Um Fotos und Videos mit ihrer Kamera aufzunehmen, ändern Sie bitte ihre Berechtigungseinstellungen.",
|
||||
"mobile.android.camera_permission_denied_title": "Kamerazugrif wird benötigt",
|
||||
"mobile.android.permission_denied_dismiss": "Verwerfen",
|
||||
"mobile.android.permission_denied_retry": "Berechtigung einstellen",
|
||||
"mobile.android.photos_permission_denied_description": "Um Bilder aus ihrer Bibliothek hochzuladen, ändern Sie bitte ihre Berechtigungseinstellungen.",
|
||||
"mobile.android.photos_permission_denied_title": "Zugriff auf Fotobibliothek wird benötigt",
|
||||
"mobile.android.storage_permission_denied_description": "Um Bilder von ihrem Android-Gerät hochzuladen, ändern Sie bitte ihre Berechtigungseinstellungen.",
|
||||
"mobile.android.storage_permission_denied_title": "Zugriff auf Dateisystem wird benötigt",
|
||||
"mobile.android.videos_permission_denied_description": "Um Videos aus ihrer Bibliothek hochzuladen, ändern Sie bitte ihre Berechtigungseinstellungen.",
|
||||
"mobile.android.videos_permission_denied_title": "Zugriff auf Videobibliothek wird benötigt",
|
||||
"mobile.alert_dialog.alertCancel": "Abbrechen",
|
||||
"mobile.android.photos_permission_denied_description": "Laden Sie Fotos auf ihre Mattermost-Instanz hoch oder speichern Sie sie auf Ihrem Gerät. Öffnen Sie die Einstellungen, um Mattermost Lese- und Schreibzugriff auf ihre Fotobibliothek zu gewähren.",
|
||||
"mobile.android.photos_permission_denied_title": "{applicationName} möchte auf Ihre Fotos zugreifen",
|
||||
"mobile.android.videos_permission_denied_description": "Laden Sie Videos auf ihre Mattermost-Instanz hoch oder speichern Sie sie auf Ihrem Gerät. Öffnen Sie die Einstellungen, um Mattermost Lese- und Schreibzugriff auf ihre Videobibliothek zu gewähren.",
|
||||
"mobile.android.videos_permission_denied_title": "{applicationName} möchte auf Ihre Videos zugreifen",
|
||||
"mobile.announcement_banner.title": "Ankündigung",
|
||||
"mobile.authentication_error.message": "Mattermost hat einen Fehler festgestellt. Bitte authentifizieren Sie sich erneut, um eine neue Sitzung zu beginnen.",
|
||||
"mobile.authentication_error.title": "Authentifizierungsfehler",
|
||||
"mobile.calendar.dayNames": "Montag,Dienstag,Mittwoch,Donnerstag,Freitag, Samstag,Sonntag",
|
||||
"mobile.calendar.dayNamesShort": "Mo,Di,Mi,Do,Fr,Sa,So",
|
||||
"mobile.calendar.monthNames": "Januar,Februar,März,April,Mai,Juni,July,August,September,Oktober,November,Dezember",
|
||||
"mobile.calendar.monthNamesShort": "Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez",
|
||||
"mobile.camera_photo_permission_denied_description": "Nehmen Sie Fotos auf und laden sie auf ihre Mattermost-Instanz hoch oder speichern Sie sie auf Ihrem Gerät. Öffnen Sie die Einstellungen, um Mattermost Lese- und Schreibzugriff auf ihre Kamera zu gewähren.",
|
||||
"mobile.camera_photo_permission_denied_title": "{applicationName} möchte auf Ihre Kamera zugreifen",
|
||||
"mobile.camera_video_permission_denied_description": "Nehmen Sie Videos auf und laden sie auf ihre Mattermost-Instanz hoch oder speichern Sie sie auf Ihrem Gerät. Öffnen Sie die Einstellungen, um Mattermost Lese- und Schreibzugriff auf ihre Kamera zu gewähren.",
|
||||
"mobile.camera_video_permission_denied_title": "{applicationName} möchte auf Ihre Kamera zugreifen",
|
||||
"mobile.channel_drawer.search": "Springe zu...",
|
||||
"mobile.channel_info.alertMessageConvertChannel": "Wenn Sie **{displayName}**** in einen privaten Kanal umwandeln, bleiben Historie und Mitgliedschaft erhalten. Öffentlich freigegebene Dateien bleiben für jeden mit dem Link zugänglich. Die Mitgliedschaft in einem privaten Kanal ist nur auf Einladung möglich. \n\nDie Änderung ist dauerhaft und kann nicht rückgängig gemacht werden.\n\nSind Sie sicher, dass Sie **{displayName}**** in einen privaten Kanal umwandeln möchten?",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Sind Sie sicher, dass Sie den {term} {name} archivieren möchten?",
|
||||
"mobile.channel_info.alertMessageLeaveChannel": "Sind Sie sicher, dass Sie den {term} {name} verlassen möchten?",
|
||||
"mobile.channel_info.alertMessageUnarchiveChannel": "Sind Sie sicher, dass Sie den {term} {name} wiederherstellen möchten?",
|
||||
"mobile.channel_info.alertNo": "Nein",
|
||||
"mobile.channel_info.alertTitleConvertChannel": "{displayName} in privaten Kanal umwandeln?",
|
||||
"mobile.channel_info.alertTitleDeleteChannel": "{term} archivieren",
|
||||
"mobile.channel_info.alertTitleLeaveChannel": "{term} verlassen",
|
||||
"mobile.channel_info.alertTitleUnarchiveChannel": "{term} wiederherstellen",
|
||||
"mobile.channel_info.alertYes": "Ja",
|
||||
"mobile.channel_info.convert": "In privaten Kanal umwandeln",
|
||||
"mobile.channel_info.convert_failed": "Wir konnten {displayName} nicht in einen privaten Kanal umwandeln.",
|
||||
"mobile.channel_info.convert_success": "{displayName} ist nun ein privater Kanal.",
|
||||
"mobile.channel_info.copy_header": "Header kopieren",
|
||||
"mobile.channel_info.copy_purpose": "Zweck kopieren",
|
||||
"mobile.channel_info.delete_failed": "Der Kanal {displayName} konnte nicht archiviert werden. Bitte überprüfen Sie ihre Verbindung und versuchen es erneut.",
|
||||
"mobile.channel_info.edit": "Kanal bearbeiten",
|
||||
"mobile.channel_info.privateChannel": "Privater Kanal",
|
||||
"mobile.channel_info.publicChannel": "Öffentlicher Kanal",
|
||||
"mobile.channel_info.unarchive_failed": "Der Kanal {displayName} konnte nicht wiederhergestellt werden. Bitte überprüfen Sie ihre Verbindung und versuchen es erneut.",
|
||||
"mobile.channel_list.alertNo": "Nein",
|
||||
"mobile.channel_list.alertYes": "Ja",
|
||||
"mobile.channel_list.archived": "ARCHIVIERT",
|
||||
"mobile.channel_list.channels": "KANÄLE",
|
||||
"mobile.channel_list.closeDM": "Direktnachricht schließen",
|
||||
"mobile.channel_list.closeGM": "Gruppennachricht schließen",
|
||||
@@ -174,14 +184,13 @@
|
||||
"mobile.channel_list.not_member": "KEIN MITGLIED",
|
||||
"mobile.channel_list.unreads": "UNGELESENE",
|
||||
"mobile.channel_members.add_members_alert": "Sie müssen mindestens ein Mitglied auswählen, um es dem Kanal hinzuzufügen.",
|
||||
"mobile.channel.markAsRead": "Als gelesen markieren",
|
||||
"mobile.client_upgrade": "App aktualisieren",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "Es steht eine neue Version zum Herunterladen bereit.",
|
||||
"mobile.client_upgrade.can_upgrade_title": "Aktualisierung verfügbar",
|
||||
"mobile.client_upgrade.close": "Später Aktualisieren",
|
||||
"mobile.client_upgrade.current_version": "Neueste Version: {version}",
|
||||
"mobile.client_upgrade.download_error.message": "Es ist ein Fehler beim Herunterladen der neuen Version aufgetreten.",
|
||||
"mobile.client_upgrade.download_error.title": "Aktualisierung konnte nicht installiert werden",
|
||||
"mobile.client_upgrade.download_error.title": "Konnte Aktualisierung nicht installieren.",
|
||||
"mobile.client_upgrade.latest_version": "Ihre Version: {version}",
|
||||
"mobile.client_upgrade.listener.dismiss_button": "Verwerfen",
|
||||
"mobile.client_upgrade.listener.learn_more_button": "Mehr erfahren",
|
||||
@@ -204,25 +213,26 @@
|
||||
"mobile.create_channel.public": "Neuer Öffentlicher Kanal",
|
||||
"mobile.create_post.read_only": "Dieser Kanal ist schreibgeschützt",
|
||||
"mobile.custom_list.no_results": "Keine Ergebnisse",
|
||||
"mobile.display_settings.sidebar": "Seitenleiste",
|
||||
"mobile.display_settings.theme": "Motiv",
|
||||
"mobile.document_preview.failed_description": "Es trat ein Fehler beim Öffnen des Dokuments auf. Bitte stellen Sie sicher Sie haben einen Betrachter für {fileType} installiert und versuchen es erneut.\n",
|
||||
"mobile.document_preview.failed_description": "Es ist ein Fehler beim Öffnen des Dokuments aufgetreten. Bitte stellen Sie sicher, dass Sie einen Betrachter für {fileType} installiert haben und versuchen es erneut.\n",
|
||||
"mobile.document_preview.failed_title": "Dokument öffnen fehlgeschlagen",
|
||||
"mobile.downloader.android_complete": "Herunterladen abgeschlossen",
|
||||
"mobile.downloader.android_failed": "Herunterladen gescheitert",
|
||||
"mobile.downloader.android_permission": "Wir benötigen Zugriff auf den Donwload-Ordner, um Dateien speichern zu können.",
|
||||
"mobile.downloader.android_started": "Herunterladen gestartet",
|
||||
"mobile.downloader.android_success": "Herunterladen erfolgreich",
|
||||
"mobile.downloader.complete": "Herunterladen abgeschlossen",
|
||||
"mobile.downloader.disabled_description": "Das Herunterladen von Dateien ist auf diesem Server deaktiviert. Bitte kontaktieren Sie ihren Systemadministrator.\n",
|
||||
"mobile.downloader.disabled_title": "Herunterladen deaktiviert",
|
||||
"mobile.downloader.downloading": "Wird heruntergeladen...",
|
||||
"mobile.downloader.failed_description": "Beim Herunterladen der Datei ist ein Fehler aufgetreten. Überprüfen Sie ihre Internetverbindung und versuchen Sie es erneut.\n",
|
||||
"mobile.downloader.failed_description": "Es ist ein Fehler beim Herunterladen der Datei aufgetreten. Überprüfen Sie ihre Internetverbindung und versuchen Sie es erneut.\n",
|
||||
"mobile.downloader.failed_title": "Herunterladen gescheitert",
|
||||
"mobile.downloader.image_saved": "Bild gespeichert",
|
||||
"mobile.downloader.video_saved": "Video gespeichert",
|
||||
"mobile.drawer.teamsTitle": "Teams",
|
||||
"mobile.edit_channel": "Speichern",
|
||||
"mobile.edit_post.title": "Nachricht bearbeiten",
|
||||
"mobile.edit_profile.remove_profile_photo": "Foto entfernen",
|
||||
"mobile.emoji_picker.activity": "AKTIVITÄTEN",
|
||||
"mobile.emoji_picker.custom": "BENUTZERDEFINIERT",
|
||||
"mobile.emoji_picker.flags": "FLAGGEN",
|
||||
@@ -234,24 +244,31 @@
|
||||
"mobile.emoji_picker.recent": "ZULETZT VERWENDET",
|
||||
"mobile.emoji_picker.symbols": "SYMBOLE",
|
||||
"mobile.error_handler.button": "Neustarten",
|
||||
"mobile.error_handler.description": "\nKlicken Sie auf Neustarten um die App neu zu öffnen. Nach dem Neustart können Sie das Problem über das Einstellungsmenü melden.\n",
|
||||
"mobile.error_handler.description": "\nTippen Sie auf Neustarten um die App neu zu öffnen. Nach dem Neustart können Sie das Problem über das Einstellungsmenü melden.\n",
|
||||
"mobile.error_handler.title": "Ein unerwarteter Fehler ist aufgetreten",
|
||||
"mobile.extension.authentication_required": "Authentifizierung erforderlich: Bitte melden Sie sich zuerst in der App an.",
|
||||
"mobile.extension.file_error": "Es gab einen Fehler beim Lesen der zu teilenden Datei.\nBitte erneut versuchen.",
|
||||
"mobile.extension.file_limit": "Dateiaustausch ist auf ein Maximum von 5 Dateien begrenzt.",
|
||||
"mobile.extension.max_file_size": "Dateianhänge, die in Mattermost geteilt werden, müssen kleiner als {size} sein.",
|
||||
"mobile.extension.permission": "Mattermost benötigt Zugriff auf den Gerätespeicher, um Dateien teilen zu können.",
|
||||
"mobile.extension.team_required": "Sie müssen zu einem Team gehören, bevor Sie Dateien austauschen können.",
|
||||
"mobile.extension.title": "In Mattermost teilen",
|
||||
"mobile.failed_network_action.description": "Es scheint ein Problem mit ihrer Internetverbindung zu geben. Stellen Sie sicher, dass Sie über eine aktive Verbindung verfügen und versuchen Sie es erneut.",
|
||||
"mobile.failed_network_action.retry": "Erneut versuchen",
|
||||
"mobile.failed_network_action.shortDescription": "Stellen Sie sicher, dass Sie eine aktive Verbindung haben und versuchen es erneut.",
|
||||
"mobile.failed_network_action.shortDescription": "Messages will load when you have an internet connection.",
|
||||
"mobile.failed_network_action.teams_channel_description": "Channels could not be loaded for {teamName}.",
|
||||
"mobile.failed_network_action.teams_description": "Teams could not be loaded.",
|
||||
"mobile.failed_network_action.teams_title": "Something went wrong",
|
||||
"mobile.failed_network_action.title": "Keine Internetverbindung",
|
||||
"mobile.file_upload.browse": "Dateien durchsuchen",
|
||||
"mobile.file_upload.camera_photo": "Foto aufnehmen",
|
||||
"mobile.file_upload.camera_video": "Video aufnehmen",
|
||||
"mobile.file_upload.library": "Foto-Bibliothek",
|
||||
"mobile.file_upload.max_warning": "Uploads sind auf maximal fünf Dateien beschränkt.",
|
||||
"mobile.file_upload.unsupportedMimeType": "Nur BMP-, JPG- oder PNG-Bilder sind als Profilbilder zugelassen.",
|
||||
"mobile.file_upload.video": "Videobibliothek",
|
||||
"mobile.files_paste.error_description": "Fehler beim Einfügen der Datei(en). Bitte erneut versuchen.",
|
||||
"mobile.files_paste.error_dismiss": "Verwerfen",
|
||||
"mobile.files_paste.error_title": "Einfügen fehlgeschlagen",
|
||||
"mobile.flagged_posts.empty_description": "Markierungen dienen als Möglichkeit, Nachrichten für eine Wiedervorlage zu markieren. Ihre Markierungen sind persönlich und können nicht von anderen Benutzern gesehen werden.",
|
||||
"mobile.flagged_posts.empty_title": "Keine markierte Nachrichten",
|
||||
"mobile.help.title": "Hilfe",
|
||||
@@ -259,8 +276,9 @@
|
||||
"mobile.image_preview.save_video": "Video speichern",
|
||||
"mobile.intro_messages.default_message": "Dies ist der Kanal, den Teammitglieder sehen, wenn sie sich anmelden - benutzen Sie ihn zum Veröffentlichen von Aktualisierungen, die jeder kennen muss.",
|
||||
"mobile.intro_messages.default_welcome": "Willkommen bei {name}!",
|
||||
"mobile.intro_messages.DM": "Dies ist der Start der Privatnachrichten mit {teammate}. Privatnachrichten und hier geteilte Dateien sind für Personen außerhalb dieses Bereichs nicht sichtbar.",
|
||||
"mobile.ios.photos_permission_denied_description": "Um Fotos und Videos in ihrer Bibliothek speichern zu können, ändern Sie bitte ihre Berechtigungseinstellungen.",
|
||||
"mobile.intro_messages.DM": "Dies ist der Start der Privatnachrichtenverlaufs mit {teammate}. Privatnachrichten und hier geteilte Dateien sind für Personen außerhalb dieses Bereichs nicht sichtbar.",
|
||||
"mobile.ios.photos_permission_denied_description": "Laden Sie Fotos und Videos auf ihre Mattermost-Instanz hoch oder speichern Sie sie auf Ihrem Gerät. Öffnen Sie die Einstellungen, um Mattermost Lese- und Schreibzugriff auf ihre Foto- und Videobibliothek zu gewähren.",
|
||||
"mobile.ios.photos_permission_denied_title": "{applicationName} möchte auf Ihre Fotos zugreifen",
|
||||
"mobile.join_channel.error": "Dem Kanal {displayName} konnte nicht beigetreten werden. Bitte überprüfen Sie ihre Verbindung und versuchen es erneut.",
|
||||
"mobile.loading_channels": "Lade Kanäle...",
|
||||
"mobile.loading_members": "Lade Mitglieder...",
|
||||
@@ -271,13 +289,17 @@
|
||||
"mobile.managed.blocked_by": "Blockiert durch {vendor}",
|
||||
"mobile.managed.exit": "Beenden",
|
||||
"mobile.managed.jailbreak": "Geräten mit Jailbreak wird von {vendor} nicht vertraut, bitte beenden Sie die App.",
|
||||
"mobile.managed.not_secured.android": "Dieses Gerät muss mit einer Bildschirmsperre gesichert werden, um Mattermost verwenden zu können.",
|
||||
"mobile.managed.not_secured.ios": "Dieses Gerät muss mit einem Passcode gesichert werden, um Mattermost verwenden zu können.\n \nGehen Sie zu Einstellungen > Face ID & Passwort.",
|
||||
"mobile.managed.not_secured.ios.touchId": "Dieses Gerät muss mit einem Passcode gesichert werden, um Mattermost zu verwenden.\n \nGehen Sie zu Einstellungen > Touch ID & Passwort.",
|
||||
"mobile.managed.secured_by": "Gesichert durch {vendor}",
|
||||
"mobile.managed.settings": "Zu Einstellungen gehen",
|
||||
"mobile.markdown.code.copy_code": "Code kopieren",
|
||||
"mobile.markdown.code.plusMoreLines": "+{count, number} weitere {count, plural, one {Zeile} other {Zeilen}}",
|
||||
"mobile.markdown.image.too_large": "Bild überschreitet die maximale Auflösung von {maxWidth} x {maxHeight}:",
|
||||
"mobile.markdown.link.copy_url": "Adresse (URL) kopieren",
|
||||
"mobile.mention.copy_mention": "Erwähnung kopieren",
|
||||
"mobile.message_length.message": "Die Nachricht ist zu lang. Anzahl der Zeichen: {max}/{count}",
|
||||
"mobile.message_length.message": "Die Nachricht ist zu lang. Anzahl der Zeichen: {count}/{max}",
|
||||
"mobile.message_length.title": "Länge der Nachricht",
|
||||
"mobile.more_dms.add_more": "Sie können {remaining, number} weitere Benutzer hinzufügen",
|
||||
"mobile.more_dms.cannot_add_more": "Sie können keine weiteren Benutzer hinzufügen.",
|
||||
@@ -302,7 +324,7 @@
|
||||
"mobile.notification_settings_mobile.sound": "Ton",
|
||||
"mobile.notification_settings_mobile.sounds_title": "Benachrichtigungston",
|
||||
"mobile.notification_settings_mobile.test": "Schicke mir eine Testbenachrichtigung",
|
||||
"mobile.notification_settings_mobile.test_push": "Dies ist eine Test-Push-Benachrichtigung",
|
||||
"mobile.notification_settings_mobile.test_push": "Dies ist eine Test-Push-Benachrichtigung.",
|
||||
"mobile.notification_settings_mobile.vibrate": "Vibrieren",
|
||||
"mobile.notification_settings.auto_responder_short": "Automatische Antworten",
|
||||
"mobile.notification_settings.auto_responder.default_message": "Hallo, ich bin derzeit nicht im Büro und kann nicht auf Nachrichten antworten.",
|
||||
@@ -332,20 +354,28 @@
|
||||
"mobile.open_dm.error": "Der Direktnachrichtenkanal mit {displayName} konnte nicht geöffnet werden. Bitte überprüfen Sie ihre Verbindung und versuchen es erneut.",
|
||||
"mobile.open_gm.error": "Der Gruppennachrichtenkanal mit diesen Benutzern konnte nicht geöffnet werden. Bitte überprüfen Sie ihre Verbindung und versuchen es erneut.",
|
||||
"mobile.open_unknown_channel.error": "Konnte Kanal nicht beitreten. Bitte setzen Sie den Cache zurück und versuchen es erneut.",
|
||||
"mobile.permission_denied_dismiss": "Nicht erlauben",
|
||||
"mobile.permission_denied_retry": "Einstellungen",
|
||||
"mobile.photo_library_permission_denied_description": "Um Fotos und Videos in ihrer Bibliothek speichern zu können, ändern Sie bitte ihre Berechtigungseinstellungen.",
|
||||
"mobile.photo_library_permission_denied_title": "{applicationName} möchte auf Ihre Fotobibliothek zugreifen",
|
||||
"mobile.pinned_posts.empty_description": "Wichtige Elemente anheften durch gedrückt halten einer Nachricht und wählen von \"An Kanal anheften\".",
|
||||
"mobile.pinned_posts.empty_title": "Keine angehefteten Nachrichten",
|
||||
"mobile.post_info.add_reaction": "Reaktion hinzufügen",
|
||||
"mobile.post_info.copy_text": "Text kopieren",
|
||||
"mobile.post_info.flag": "Markieren",
|
||||
"mobile.post_info.mark_unread": "Als ungelesen markieren",
|
||||
"mobile.post_info.pin": "An Kanal anheften",
|
||||
"mobile.post_info.reply": "Antworten",
|
||||
"mobile.post_info.unflag": "Markierung entfernen",
|
||||
"mobile.post_info.unpin": "Vom Kanal abheften",
|
||||
"mobile.post_pre_header.flagged": "Markiert",
|
||||
"mobile.post_pre_header.pinned": "Angeheftet",
|
||||
"mobile.post_pre_header.pinned_flagged": "Angeheftet und markiert",
|
||||
"mobile.post_textbox.empty.message": "Sie versuchen, eine leere Nachricht zu senden.\nBitte stellen Sie sicher, dass die Nachricht Text oder eine angehängte Datei enthält.",
|
||||
"mobile.post_textbox.empty.ok": "OK",
|
||||
"mobile.post_textbox.empty.title": "Leere Nachricht",
|
||||
"mobile.post_textbox.entire_channel.cancel": "Abbrechen",
|
||||
"mobile.post_textbox.entire_channel.confirm": "Bestätigen",
|
||||
"mobile.post_textbox.entire_channel.message": "Durch die Verwendung von @all oder @channel benachrichtigen Sie {totalMembers, number} {totalMembers, plural, one {Person} other {Personen}}. Sind Sie sicher, dass sie dies tun möchten?",
|
||||
"mobile.post_textbox.entire_channel.message.with_timezones": "Durch die Verwendung von @all oder @channel benachrichtigen Sie {totalMembers, number} {totalMembers, plural, one {Person} other {Personen}} in {timezones, number} {timezones, plural, one {Zeitzone} other {Zeitzonen}}. Sind Sie sicher, dass sie dies tun möchten?",
|
||||
"mobile.post_textbox.entire_channel.title": "Bestätigen Sie das Senden von Benachrichtigungen an den gesamten Kanal",
|
||||
"mobile.post_textbox.uploadFailedDesc": "Einige Anhänge konnten nicht auf den Server hochgeladen werden. Sind Sie sicher, dass sie die Nachricht abschicken wollen?",
|
||||
"mobile.post_textbox.uploadFailedTitle": "Anhang Fehler",
|
||||
"mobile.post.cancel": "Abbrechen",
|
||||
@@ -353,9 +383,14 @@
|
||||
"mobile.post.delete_title": "Nachricht löschen",
|
||||
"mobile.post.failed_delete": "Nachricht löschen",
|
||||
"mobile.post.failed_retry": "Erneut versuchen",
|
||||
"mobile.post.failed_title": "Ihre Nachricht konnte nicht gesendet werden",
|
||||
"mobile.post.failed_title": "Konnte ihre Nachricht nicht senden.",
|
||||
"mobile.post.retry": "Aktualisieren",
|
||||
"mobile.posts_view.moreMsg": "Weitere neue Nachrichten oberhalb",
|
||||
"mobile.privacy_link": "Datenschutzbedingungen",
|
||||
"mobile.push_notification_reply.button": "Senden",
|
||||
"mobile.push_notification_reply.placeholder": "Eine Antwort schreiben...",
|
||||
"mobile.push_notification_reply.title": "Antworten",
|
||||
"mobile.reaction_header.all_emojis": "Alle",
|
||||
"mobile.recent_mentions.empty_description": "Hier werden Nachrichten auftauchen, die ihren Benutzernamen oder andere Wörter enthalten, die Erwähnungen auslösen.",
|
||||
"mobile.recent_mentions.empty_title": "Keine letzten Erwähnungen",
|
||||
"mobile.rename_channel.display_name_maxLength": "Kanalname muss kürzer als {maxLength, number} Zeichen sein",
|
||||
@@ -378,6 +413,8 @@
|
||||
"mobile.routes.channelInfo.createdBy": "Erstellt durch {creator} am ",
|
||||
"mobile.routes.channelInfo.delete_channel": "Kanal archivieren",
|
||||
"mobile.routes.channelInfo.favorite": "Favoriten",
|
||||
"mobile.routes.channelInfo.groupManaged": "Mitglieder werden von verknüpften Gruppen verwaltet.",
|
||||
"mobile.routes.channelInfo.unarchive_channel": "Kanal wiederherstellen",
|
||||
"mobile.routes.code": "{language}-Code",
|
||||
"mobile.routes.code.noLanguage": "Code",
|
||||
"mobile.routes.edit_profile": "Profil bearbeiten",
|
||||
@@ -393,6 +430,7 @@
|
||||
"mobile.routes.thread": "{channelName} Diskussion",
|
||||
"mobile.routes.thread_dm": "Direktnachrichten-Diskussion",
|
||||
"mobile.routes.user_profile": "Profil",
|
||||
"mobile.routes.user_profile.edit": "Bearbeiten",
|
||||
"mobile.routes.user_profile.local_time": "LOKALE ZEIT",
|
||||
"mobile.routes.user_profile.send_message": "Nachricht senden",
|
||||
"mobile.search.after_modifier_description": "um Nachrichten nach einem spezifischen Datum zu finden",
|
||||
@@ -405,13 +443,20 @@
|
||||
"mobile.search.no_results": "Keine Ergebnisse gefunden",
|
||||
"mobile.search.on_modifier_description": "um Nachrichten an einem spezifischen Datum zu finden",
|
||||
"mobile.search.recent_title": "Letzte Suchen",
|
||||
"mobile.select_team.guest_cant_join_team": "Ihr Gastkonto ist keinem Team oder Kanal zugeordnet. Bitte kontaktieren Sie den Administrator.",
|
||||
"mobile.select_team.join_open": "Offene Teams, denen Sie beitreten können",
|
||||
"mobile.select_team.no_teams": "Es sind keine Teams zum Betreten für Sie verfügbar.",
|
||||
"mobile.server_link.error.text": "Der Link konnte auf diesem Server nicht gefunden werden.",
|
||||
"mobile.server_link.error.title": "Link-Fehler",
|
||||
"mobile.server_link.unreachable_channel.error": "Der Link gehört zu einem gelöschten Kanal oder einem Kanal auf den Sie keinen Zugriff haben.",
|
||||
"mobile.server_link.unreachable_team.error": "Der Link verweist auf ein gelöschtes Team oder ein Team auf das Sie keinen Zugriff haben.",
|
||||
"mobile.server_ssl.error.text": "The certificate from {host} is not trusted.\n\nPlease contact your System Administrator to resolve the certificate issues and allow connections to this server.",
|
||||
"mobile.server_ssl.error.title": "Untrusted Certificate",
|
||||
"mobile.server_upgrade.button": "OK",
|
||||
"mobile.server_upgrade.description": "\nEine Serveraktualisierung ist erforderlich, um die Mattermost-App zu verwenden. Bitte Fragen Sie ihren Systemadministrator für Details.\n",
|
||||
"mobile.server_upgrade.title": "Serveraktualisierung erforderlich",
|
||||
"mobile.server_url.invalid_format": "URL muss mit http:// oder https:// beginnen",
|
||||
"mobile.session_expired": "Sitzung abgelaufen: Bitte anmelden um weiterhin Benachrichtigungen zu erhalten.",
|
||||
"mobile.session_expired": "Die Sitzung ist abgelaufen: Bitte melden Sie sich an, um weiterhin Benachrichtigungen zu erhalten. Sitzungen für {siteName} sind so konfiguriert, dass sie nach {daysCount, number} {daysCount, plural, one {Tag} other {Tagen}} ablaufen.",
|
||||
"mobile.set_status.away": "Abwesend",
|
||||
"mobile.set_status.dnd": "Nicht stören",
|
||||
"mobile.set_status.offline": "Offline",
|
||||
@@ -422,19 +467,33 @@
|
||||
"mobile.share_extension.error_message": "Es ist ein Fehler bei der Verwendung der Teilen-Erweiterung aufgetreten.",
|
||||
"mobile.share_extension.error_title": "Erweiterungs-Fehler",
|
||||
"mobile.share_extension.team": "Team",
|
||||
"mobile.share_extension.too_long_message": "Zeichenanzahl: {count}/{max}",
|
||||
"mobile.share_extension.too_long_title": "Nachricht ist zu lang",
|
||||
"mobile.sidebar_settings.permanent": "Permanente Seitenleiste",
|
||||
"mobile.sidebar_settings.permanent_description": "Seitenleiste permanent geöffnet lassen",
|
||||
"mobile.storage_permission_denied_description": "Laden Sie Dateien auf ihre Mattermost-Instanz hoch. Öffnen Sie die Einstellungen, um Mattermost Lese- und Schreibzugriff auf Dateien auf diesem Gerät zu gewähren.",
|
||||
"mobile.storage_permission_denied_title": "{applicationName} möchte auf Ihre Dateien zugreifen.",
|
||||
"mobile.suggestion.members": "Mitglieder",
|
||||
"mobile.system_message.channel_archived_message": "{username} hat den Kanal archiviert.",
|
||||
"mobile.system_message.channel_unarchived_message": "{username} hat den Kanal wiederhergestellt",
|
||||
"mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} hat den Kanal-Anzeigenamen geändert von: {oldDisplayName} auf: {newDisplayName}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.removed": "{username} hat die Kanalüberschrift entfernt (war: {oldHeader})",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username} hat die Kanalüberschrift aktualisiert von: {oldHeader} auf: {newHeader}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} hat die Kanalüberschrift geändert zu: {newHeader}",
|
||||
"mobile.system_message.update_channel_purpose_message.removed": "{username} hat den Kanalzweck entfernt (war: {oldPurpose})",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_from": "{username} hat den Kanalzweck aktualisiert von: {oldPurpose} auf: {newPurpose}",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_to": "{username} hat den Kanalzweck geändert zu: {newPurpose}",
|
||||
"mobile.terms_of_service.alert_cancel": "Abbrechen",
|
||||
"mobile.terms_of_service.alert_ok": "OK",
|
||||
"mobile.terms_of_service.alert_retry": "Erneut versuchen",
|
||||
"mobile.terms_of_service.get_terms_error_description": "Stellen Sie sicher, dass Sie über eine Internetverbindung verfügen und probieren Sie es erneut. Falls das Problem weiterhin besteht, kontaktieren Sie ihren Systemadministrator.",
|
||||
"mobile.terms_of_service.get_terms_error_title": "Konnte Nutzungsbedingungen nicht laden.",
|
||||
"mobile.terms_of_service.terms_rejected": "Sie müssen die Nutzungsbedingungen akzeptieren, bevor Sie {siteName} verwenden können. Bitte kontaktieren Sie ihren Systemadministrator für mehr Details.",
|
||||
"mobile.timezone_settings.automatically": "Automatisch einstellen",
|
||||
"mobile.timezone_settings.manual": "Zeitzone ändern",
|
||||
"mobile.timezone_settings.select": "Zeitzone auswählen",
|
||||
"mobile.tos_link": "Nutzungsbedingungen",
|
||||
"mobile.user_list.deactivated": "Deaktiviert",
|
||||
"mobile.user.settings.notifications.email.fifteenMinutes": "Alle 15 Minuten",
|
||||
"mobile.video_playback.failed_description": "Beim Abspielen des Videos ist ein Fehler aufgetreten.\n",
|
||||
"mobile.video_playback.failed_description": "Es ist ein Fehler beim Abspielen des Videos aufgetreten.\n",
|
||||
"mobile.video_playback.failed_title": "Videowiedergabe fehlgeschlagen",
|
||||
"mobile.video.save_error_message": "Um das Video zu speichern, müssen Sie es zuerst herunterladen.",
|
||||
"mobile.video.save_error_title": "Fehler beim Speichern des Videos",
|
||||
@@ -445,11 +504,17 @@
|
||||
"modal.manual_status.auto_responder.message_dnd": "Möchten Sie ihren Status auf \"Nicht stören\" umschalten und automatische Antworten deaktivieren?",
|
||||
"modal.manual_status.auto_responder.message_offline": "Möchten Sie ihren Status auf \"Offline\" umschalten und automatische Antworten deaktivieren?",
|
||||
"modal.manual_status.auto_responder.message_online": "Möchten Sie ihren Status auf \"Online\" umschalten und automatische Antworten deaktivieren?",
|
||||
"more_channels.archivedChannels": "Archivierte Kanäle",
|
||||
"more_channels.dropdownTitle": "Anzeigen",
|
||||
"more_channels.noMore": "Keine weiteren Kanäle zum Betreten",
|
||||
"more_channels.publicChannels": "Öffentliche Kanäle",
|
||||
"more_channels.showArchivedChannels": "Anzeigen: Archivierte Kanäle",
|
||||
"more_channels.showPublicChannels": "Anzeigen: Öffentliche Kanäle",
|
||||
"more_channels.title": "Weitere Kanäle",
|
||||
"msg_typing.areTyping": "{users} und {last} tippen gerade...",
|
||||
"msg_typing.isTyping": "{user} tippt...",
|
||||
"navbar_dropdown.logout": "Abmelden",
|
||||
"navbar.channel_drawer.button": "Kanäle und Teams",
|
||||
"navbar.channel_drawer.hint": "Öffnet die Kanal- und Team-Schublade.",
|
||||
"navbar.leave": "Kanal verlassen",
|
||||
"password_form.title": "Passwort zurücksetzen",
|
||||
"password_send.checkInbox": "Bitte prüfen Sie den Posteingang.",
|
||||
@@ -458,25 +523,26 @@
|
||||
"password_send.link": "Falls das Konto existiert, wurde eine E-Mail zur Passwortzurücksetzung gesendet an:",
|
||||
"password_send.reset": "Mein Passwort zurücksetzen",
|
||||
"permalink.error.access": "Der dauerhafte Link verweist auf eine gelöschte Nachricht oder einen Kanal auf den Sie keinen Zugriff haben.",
|
||||
"permalink.error.link_not_found": "Link nicht gefunden",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "wurde durch diese Erwähnung nicht benachrichtigt, da sich der Benutzer nicht im Kanal befinden. Er kann dem Kanal nicht hinzugefügt werden, da er nicht Mitglied der verknüpften Gruppen ist. Um ihn zu diesem Kanal hinzuzufügen, müssen er zu den verknüpften Gruppen hinzugefügt werden.",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": " und ",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "sie zu diesem privaten Kanal hinzufügen",
|
||||
"post_body.check_for_out_of_channel_mentions.link.public": "sie zu diesem Kanal hinzufügen",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? Sie werden Zugriff auf den Nachrichtenverlauf haben.",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "wurden erwähnt, befinden sich aber nicht im Kanal. Möchten Sie ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "wurde erwähnt, befinden sich aber nicht im Kanal. Möchten Sie ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "wurde durch diese Erwähnung nicht benachrichtigt, da der Benutzer sich nicht im Kanal befindet. Möchten Sie ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "wurde durch diese Erwähnung nicht benachrichtigt, da der Benutzer sich nicht im Kanal befindet. Möchten Sie ",
|
||||
"post_body.commentedOn": "Kommentierte auf die Nachricht von {name}: ",
|
||||
"post_body.deleted": "(Nachricht gelöscht)",
|
||||
"post_info.auto_responder": "AUTOMATISCHE ANTWORT",
|
||||
"post_info.bot": "BOT",
|
||||
"post_info.del": "Löschen",
|
||||
"post_info.edit": "Bearbeiten",
|
||||
"post_info.guest": "GAST",
|
||||
"post_info.message.show_less": "Weniger anzeigen",
|
||||
"post_info.message.show_more": "Mehr anzeigen",
|
||||
"post_info.system": "System",
|
||||
"post_message_view.edited": "(bearbeitet)",
|
||||
"posts_view.newMsg": "Neue Nachrichten",
|
||||
"rename_channel.handleHolder": "Kleinbuchstaben oder Ziffern",
|
||||
"rename_channel.url": "URL",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "Ein Teil dieses Nachrichtenverlaufes wurde wegen einer Datenaufbewahrungsrichtlinie gelöscht. Sie können nicht länger auf diesen Strang antworten.",
|
||||
"search_bar.search": "Suche",
|
||||
"search_header.results": "Suchergebnisse",
|
||||
@@ -498,20 +564,22 @@
|
||||
"status_dropdown.set_offline": "Offline",
|
||||
"status_dropdown.set_online": "Online",
|
||||
"status_dropdown.set_ooo": "Nicht im Büro",
|
||||
"suggestion.mention.all": "ACHTUNG: Dies erwähnt jeden im Kanal",
|
||||
"suggestion.mention.all": "Benachrichtigt jeden in diesem Kanal",
|
||||
"suggestion.mention.channel": "Benachrichtigt jeden in diesem Kanal",
|
||||
"suggestion.mention.channels": "Meine Kanäle",
|
||||
"suggestion.mention.here": "Benachrichtigt jeden der im Kanal und online ist",
|
||||
"suggestion.mention.here": "Benachrichtigt jeden in diesem Kanal",
|
||||
"suggestion.mention.members": "Kanalmitglieder",
|
||||
"suggestion.mention.morechannels": "Andere Kanäle",
|
||||
"suggestion.mention.nonmembers": "Nicht im Kanal",
|
||||
"suggestion.mention.special": "Spezielle Erwähnungen",
|
||||
"suggestion.mention.you": "(Sie)",
|
||||
"suggestion.search.direct": "Direktnachrichten",
|
||||
"suggestion.search.private": "Private Kanäle",
|
||||
"suggestion.search.public": "Öffentliche Kanäle",
|
||||
"terms_of_service.agreeButton": "Ich stimme zu",
|
||||
"terms_of_service.api_error": "Konnte die Anfrage nicht abschließen. Falls der Fehler weiterhin besteht, fragen Sie den Systemadministrator.",
|
||||
"user.settings.display.clockDisplay": "Uhrzeit-Format",
|
||||
"user.settings.display.custom_theme": "Benutzerdefiniertes Motiv",
|
||||
"user.settings.display.militaryClock": "24-Stunden-Format (z.B.: 16:00)",
|
||||
"user.settings.display.normalClock": "12-Stunden-Format (z.B.: 4:00 PM)",
|
||||
"user.settings.display.preferTime": "Wählen Sie das bevorzugte Zeitformat aus.",
|
||||
@@ -538,7 +606,7 @@
|
||||
"user.settings.notifications.email.immediately": "Sofort",
|
||||
"user.settings.notifications.email.never": "Nie",
|
||||
"user.settings.notifications.email.send": "E-Mail-Benachrichtigungen senden",
|
||||
"user.settings.notifications.emailInfo": "E-Mail-Benachrichtigungen werden bei Erwähnungen und Direktnachrichten gesendet, sobald Sie von {siteName} mehr als 5 Minuten offline oder abwesend waren.",
|
||||
"user.settings.notifications.emailInfo": "E-Mail-Benachrichtigungen werden bei Erwähnungen und Direktnachrichten gesendet, sobald Sie mehr als 5 Minuten offline oder abwesend sind.",
|
||||
"user.settings.notifications.never": "Nie",
|
||||
"user.settings.notifications.onlyMentions": "Nur für Erwähnungen und Direktnachrichten",
|
||||
"user.settings.push_notification.away": "Abwesend oder offline",
|
||||
@@ -547,4 +615,4 @@
|
||||
"user.settings.push_notification.offline": "Offline",
|
||||
"user.settings.push_notification.online": "Online, abwesend oder offline",
|
||||
"web.root.signup_info": "Die gesamte Teamkommunikation an einem Ort, durchsuchbar und überall verfügbar"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,8 +253,11 @@
|
||||
"mobile.extension.permission": "Mattermost needs access to the device storage to share files.",
|
||||
"mobile.extension.team_required": "You must belong to a team before you can share files.",
|
||||
"mobile.extension.title": "Share in Mattermost",
|
||||
"mobile.failed_network_action.retry": "try again",
|
||||
"mobile.failed_network_action.shortDescription": "Messages will load when you have an internet connection or {tryAgainAction}.",
|
||||
"mobile.failed_network_action.retry": "Try again",
|
||||
"mobile.failed_network_action.shortDescription": "Messages will load when you have an internet connection.",
|
||||
"mobile.failed_network_action.teams_channel_description": "Channels could not be loaded for {teamName}.",
|
||||
"mobile.failed_network_action.teams_description": "Teams could not be loaded.",
|
||||
"mobile.failed_network_action.teams_title": "Something went wrong",
|
||||
"mobile.failed_network_action.title": "No internet connection",
|
||||
"mobile.file_upload.browse": "Browse Files",
|
||||
"mobile.file_upload.camera_photo": "Take Photo",
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"about.teamEditionSt": "Todas las comunicaciones de tu equipo en un solo lugar, con búsquedas instantáneas y accesible de todas partes.",
|
||||
"about.teamEditiont0": "Edición Team T0",
|
||||
"about.teamEditiont1": "Edición Team T1",
|
||||
"about.title": "Acerca de Mattermost",
|
||||
"about.title": "Acerca de {appTitle}",
|
||||
"announcment_banner.dont_show_again": "No volver a mostrar",
|
||||
"api.channel.add_member.added": "{addedUsername} agregado al canal por {username}",
|
||||
"archivedChannelMessage": "Estás viendo un **canal archivado**. No serán publicados nuevos mensajes.",
|
||||
@@ -17,7 +17,7 @@
|
||||
"channel_header.addMembers": "Agregar Miembros",
|
||||
"channel_header.directchannel.you": "{displayname} (tu) ",
|
||||
"channel_header.manageMembers": "Administrar Miembros",
|
||||
"channel_header.pinnedPosts": "Mensajes Anclados",
|
||||
"channel_header.pinnedPosts": "Mensajes Destacados",
|
||||
"channel_header.viewMembers": "Ver Miembros",
|
||||
"channel_info.header": "Encabezado:",
|
||||
"channel_info.purpose": "Propósito:",
|
||||
@@ -35,6 +35,9 @@
|
||||
"channel_modal.purposeEx": "Ej: \"Un canal para describir errores y mejoras\"",
|
||||
"channel_notifications.ignoreChannelMentions.settings": "Ignorar @channel, @here, @all",
|
||||
"channel_notifications.muteChannel.settings": "Silenciar canal",
|
||||
"channel.channelHasGuests": "Este canal tiene huéspedes",
|
||||
"channel.hasGuests": "Este grupo de mensajes tiene huéspedes",
|
||||
"channel.isGuest": "Esta persona es un huésped",
|
||||
"combined_system_message.added_to_channel.many_expanded": "{users} y {lastUser} fueron **agregados al canal** por {actor}.",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser} **agregado al canal** por {actor}.",
|
||||
"combined_system_message.added_to_channel.one_you": "Fuiste **agregado al canal** por {actor}.",
|
||||
@@ -45,19 +48,19 @@
|
||||
"combined_system_message.added_to_team.two": "{firstUser} y {secondUser} **agregados al equipo** por {actor}.",
|
||||
"combined_system_message.joined_channel.many_expanded": "{users} and {lastUser} **se unieron al canal**.",
|
||||
"combined_system_message.joined_channel.one": "{firstUser} **se unió al canal**.",
|
||||
"combined_system_message.joined_channel.one_you": "**unieron al canal**.",
|
||||
"combined_system_message.joined_channel.one_you": "Tú **te uniste al canal**.",
|
||||
"combined_system_message.joined_channel.two": "{firstUser} y {secondUser} **se unieron al canal**.",
|
||||
"combined_system_message.joined_team.many_expanded": "{users} y {lastUser} **se unieron al equipo**.",
|
||||
"combined_system_message.joined_team.one": "{firstUser} **se unió al equipo**.",
|
||||
"combined_system_message.joined_team.one_you": "**unieron al equipo**.",
|
||||
"combined_system_message.joined_team.one_you": "Tú **te uniste al equipo**.",
|
||||
"combined_system_message.joined_team.two": "{firstUser} y {secondUser} **se unieron al equipo**.",
|
||||
"combined_system_message.left_channel.many_expanded": "{users} y {lastUser} **abandonaron el canal**.",
|
||||
"combined_system_message.left_channel.one": "{firstUser} **abandonó el canal**.",
|
||||
"combined_system_message.left_channel.one_you": "**abandonaron el canal**.",
|
||||
"combined_system_message.left_channel.one_you": "Tú **abandonaste el canal**.",
|
||||
"combined_system_message.left_channel.two": "{firstUser} y {secondUser} **abandonaron el canal**.",
|
||||
"combined_system_message.left_team.many_expanded": "{users} y {lastUser} **abandonaron el equipo**.",
|
||||
"combined_system_message.left_team.one": "{firstUser} **abandonó el equipo**.",
|
||||
"combined_system_message.left_team.one_you": "**abandonó el equipo**.",
|
||||
"combined_system_message.left_team.one_you": "Tú **abandonaste el equipo**.",
|
||||
"combined_system_message.left_team.two": "{firstUser} y {secondUser} **abandonaron el equipo**.",
|
||||
"combined_system_message.removed_from_channel.many_expanded": "{users} y {lastUser} fueron **eliminados del canal**.",
|
||||
"combined_system_message.removed_from_channel.one": "{firstUser} fue **eliminado del canal**.",
|
||||
@@ -70,21 +73,21 @@
|
||||
"combined_system_message.you": "Tu",
|
||||
"create_comment.addComment": "Agregar un comentario...",
|
||||
"create_post.deactivated": "Estás viendo un canal archivado con un usuario desactivado.",
|
||||
"create_post.write": "Write to {channelDisplayName}",
|
||||
"create_post.write": "Escribir en {channelDisplayName}",
|
||||
"date_separator.today": "Hoy",
|
||||
"date_separator.yesterday": "Ayer",
|
||||
"edit_post.editPost": "Editar el mensaje...",
|
||||
"edit_post.save": "Guardar",
|
||||
"error.team_not_found.title": "Equipo no encontrado",
|
||||
"file_attachment.download": "Descargar",
|
||||
"file_upload.fileAbove": "No se puede cargar un archivo de más de {max}MB: {filename}",
|
||||
"get_post_link_modal.title": "Copiar enlace Permanente",
|
||||
"get_post_link_modal.title": "Copiar Enlace",
|
||||
"integrations.add": "Agregar",
|
||||
"intro_messages.anyMember": " Cualquier miembro se puede unir y leer este canal.",
|
||||
"intro_messages.beginning": "Inicio de {name}",
|
||||
"intro_messages.channel": "canal",
|
||||
"intro_messages.creator": "Este es el inicio del {type} {name}, creado por {creator} el {date}.",
|
||||
"intro_messages.group": "canal privado",
|
||||
"intro_messages.creator": "Este es el inicio del canal {name}, creado por {creator} el {date}.",
|
||||
"intro_messages.creatorPrivate": "Este es el inicio del canal privado {name}, creado por {creator} el {date}.",
|
||||
"intro_messages.group_message": "Este es el inicio de tu historial del grupo de mensajes con estos compañeros. Los mensajes y archivos que se comparten aquí no son mostrados a personas fuera de esta área.",
|
||||
"intro_messages.noCreator": "Este es el inicio del {type} {name}, creado el {date}.",
|
||||
"intro_messages.noCreator": "Este es el inicio del canal {name}, creado el {date}.",
|
||||
"intro_messages.onlyInvited": " Sólo miembros invitados pueden ver este canal privado.",
|
||||
"last_users_message.added_to_channel.type": "fueron **agregados al canal** por {actor}.",
|
||||
"last_users_message.added_to_team.type": "fueron **agregados al equipo** por {actor}.",
|
||||
@@ -100,7 +103,7 @@
|
||||
"login_mfa.token": "Token MFA",
|
||||
"login_mfa.tokenReq": "Por favor ingresa un token MFA",
|
||||
"login.email": "Correo electrónico",
|
||||
"login.forgot": "Olvide mi contraseña",
|
||||
"login.forgot": "Olvide mi contraseña.",
|
||||
"login.invalidPassword": "La Contraseña es incorrecta.",
|
||||
"login.ldapUsername": "Usuario AD/LDAP",
|
||||
"login.ldapUsernameLower": "Nombre de Usuario AD/LDAP",
|
||||
@@ -128,7 +131,6 @@
|
||||
"mobile.account_notifications.threads_mentions": "Menciones en hilos",
|
||||
"mobile.account_notifications.threads_start": "Hilos que yo comience",
|
||||
"mobile.account_notifications.threads_start_participate": "Hilos que yo comience o participe",
|
||||
"mobile.account.settings.cancel": "Cancelar",
|
||||
"mobile.account.settings.save": "Guardar",
|
||||
"mobile.action_menu.select": "Selecciona una opción",
|
||||
"mobile.advanced_settings.clockDisplay": "Visualización de la hora",
|
||||
@@ -137,36 +139,44 @@
|
||||
"mobile.advanced_settings.delete_title": "Eliminar Documentos & Datos",
|
||||
"mobile.advanced_settings.timezone": "Zona horaria",
|
||||
"mobile.advanced_settings.title": "Configuración Avanzada",
|
||||
"mobile.android.camera_permission_denied_description": "Para tomar fotos y videos con la cámara, por favor, cambia la configuración de permisos.",
|
||||
"mobile.android.camera_permission_denied_title": "Acceso a la cámara es necesario",
|
||||
"mobile.android.permission_denied_dismiss": "Cerrar",
|
||||
"mobile.android.permission_denied_retry": "Establecer permisos",
|
||||
"mobile.android.photos_permission_denied_description": "Para cargar imágenes desde tu biblioteca, por favor, cambia la configuración de permisos.",
|
||||
"mobile.android.photos_permission_denied_title": "Acceso a la biblioteca de fotos es necesario",
|
||||
"mobile.android.storage_permission_denied_description": "Para cargar imágenes desde tu biblioteca de Android, por favor, cambia la configuración de permisos.",
|
||||
"mobile.android.storage_permission_denied_title": "Acceso a los Archivos es necesario",
|
||||
"mobile.android.videos_permission_denied_description": "Para subir los vídeos de tu biblioteca, por favor, cambia la configuración de permisos.",
|
||||
"mobile.android.videos_permission_denied_title": "Acceso a la biblioteca de vídeos es necesario",
|
||||
"mobile.alert_dialog.alertCancel": "Cancelar",
|
||||
"mobile.android.photos_permission_denied_description": "Subir fotos a tu servidor de Mattermost o guardarlos en el dispositivo. Abre la Configuración y otorga a Mattermost permisos de Lectura y Escritura a tu librería de fotos.",
|
||||
"mobile.android.photos_permission_denied_title": "{applicationName} desea acceder a tus fotos",
|
||||
"mobile.android.videos_permission_denied_description": "Subir videos a tu servidor de Mattermost o guardarlos en el dispositivo. Abre la Configuración y otorga a Mattermost permisos de Lectura y Escritura a tu librería de videos.",
|
||||
"mobile.android.videos_permission_denied_title": "{applicationName} desea acceder a tus videos",
|
||||
"mobile.announcement_banner.title": "Anuncio",
|
||||
"mobile.authentication_error.message": "Mattermost a encontrado un error. Por favor vuelve a autenticar tu usuario para iniciar una nueva sesión.",
|
||||
"mobile.authentication_error.title": "Error de Autenticación",
|
||||
"mobile.calendar.dayNames": "Domingo,Lunes,Martes,Miércoles,Jueves,Viernes,Sábado",
|
||||
"mobile.calendar.dayNamesShort": "Dom,Lun,Mar,Mié,Jue,Vie,Sab",
|
||||
"mobile.calendar.monthNames": "Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre",
|
||||
"mobile.calendar.monthNamesShort": "Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic",
|
||||
"mobile.camera_photo_permission_denied_description": "Captura fotos y súbelas a tu servidor de Mattermost o guárdalas en tu dispositivo. Abre la Configuración y otorga a Mattermost permisos de Lectura y Escritura para usar la cámara.",
|
||||
"mobile.camera_photo_permission_denied_title": "{applicationName} desea acceder a tu cámara",
|
||||
"mobile.camera_video_permission_denied_description": "Captura videos y súbelos a a tu servidor de Mattermost o guárdalos en tu dispositivo. Abre la Configuración y otorga a Mattermost permisos de Lectura y Escritura para acceder tu cámara.",
|
||||
"mobile.camera_video_permission_denied_title": "{applicationName} desea acceder a tu cámara",
|
||||
"mobile.channel_drawer.search": "Saltar a...",
|
||||
"mobile.channel_info.alertMessageConvertChannel": "Al convertir {displayName} a un canal privado, la historia y la membresía son preservados. Archivos compartidos públicamente permanecerán accesibles para cualquier que tenga el enlace. La membresía en un canal privado es solo por invitación \n\nEste es un cambio permanente y no puede deshacerse.\n\n¿Estás seguro que quieres convertir {displayName} a un canal privado?",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "¿Seguro quieres archivar el {term} {name}?",
|
||||
"mobile.channel_info.alertMessageLeaveChannel": "¿Seguro quieres abandonar el {term} {name}?",
|
||||
"mobile.channel_info.alertMessageUnarchiveChannel": "¿Seguro quieres restaurar el {term} {name}?",
|
||||
"mobile.channel_info.alertNo": "No",
|
||||
"mobile.channel_info.alertTitleConvertChannel": "¿Convertir {displayName} a un canal privado?",
|
||||
"mobile.channel_info.alertTitleDeleteChannel": "Archivar {term}",
|
||||
"mobile.channel_info.alertTitleLeaveChannel": "Abandonar {term}",
|
||||
"mobile.channel_info.alertTitleUnarchiveChannel": "Restaurar {term}",
|
||||
"mobile.channel_info.alertYes": "Sí",
|
||||
"mobile.channel_info.convert": "Convertir a Canal Privado",
|
||||
"mobile.channel_info.convert_failed": "No se pudo convertir {displayName} a canal privado.",
|
||||
"mobile.channel_info.convert_success": "{displayName} ahora es un canal privado.",
|
||||
"mobile.channel_info.copy_header": "Copiar Encabezado",
|
||||
"mobile.channel_info.copy_purpose": "Copiar Propósito",
|
||||
"mobile.channel_info.delete_failed": "No se pudo archivar el canal {displayName}. Por favor revisa tu conexión e intenta de nuevo.",
|
||||
"mobile.channel_info.edit": "Editar Canal",
|
||||
"mobile.channel_info.privateChannel": "Canal Privado",
|
||||
"mobile.channel_info.publicChannel": "Canal Público",
|
||||
"mobile.channel_info.unarchive_failed": "No se pudo restaurar el canal {displayName}. Por favor revisa tu conexión e intenta de nuevo.",
|
||||
"mobile.channel_list.alertNo": "No",
|
||||
"mobile.channel_list.alertYes": "Sí",
|
||||
"mobile.channel_list.archived": "ARCHIVADO",
|
||||
"mobile.channel_list.channels": "CANALES",
|
||||
"mobile.channel_list.closeDM": "Cerrar Mensaje Directo",
|
||||
"mobile.channel_list.closeGM": "Cerrar Mensaje de Grupo",
|
||||
@@ -174,7 +184,6 @@
|
||||
"mobile.channel_list.not_member": "NO MIEMBRO DE",
|
||||
"mobile.channel_list.unreads": "SIN LEER",
|
||||
"mobile.channel_members.add_members_alert": "Debes seleccionar al menos un miembro a agregar al canal.",
|
||||
"mobile.channel.markAsRead": "Marcar como leído",
|
||||
"mobile.client_upgrade": "Actualizar App",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "Una nueva versión está disponible para su descarga.",
|
||||
"mobile.client_upgrade.can_upgrade_title": "Actualización Disponible",
|
||||
@@ -204,6 +213,7 @@
|
||||
"mobile.create_channel.public": "Nuevo Canal Público",
|
||||
"mobile.create_post.read_only": "Este canal es de sólo lectura",
|
||||
"mobile.custom_list.no_results": "Sin resultados",
|
||||
"mobile.display_settings.sidebar": "Barra lateral",
|
||||
"mobile.display_settings.theme": "Tema",
|
||||
"mobile.document_preview.failed_description": "Ocurrió un error al abrir el documento. Por favor verifica que tienes instalado un visor para archivos {fileType} e intenta de nuevo.\n",
|
||||
"mobile.document_preview.failed_title": "Error Abriendo Documento",
|
||||
@@ -211,7 +221,6 @@
|
||||
"mobile.downloader.android_failed": "Descarga fallida",
|
||||
"mobile.downloader.android_permission": "Se necesita acceso al directorio de descargas para guardar los archivos.",
|
||||
"mobile.downloader.android_started": "Descarga iniciada",
|
||||
"mobile.downloader.android_success": "descarga con éxito",
|
||||
"mobile.downloader.complete": "Descarga completa",
|
||||
"mobile.downloader.disabled_description": "La descarga de archivos ha sido desactivada en este servidor. Por favor contacta a tu Administrador de Sistemas para más detalles.\n",
|
||||
"mobile.downloader.disabled_title": "Descarga desactivada",
|
||||
@@ -223,6 +232,7 @@
|
||||
"mobile.drawer.teamsTitle": "Equipos",
|
||||
"mobile.edit_channel": "Guardar",
|
||||
"mobile.edit_post.title": "Editando Mensaje",
|
||||
"mobile.edit_profile.remove_profile_photo": "Quitar Foto",
|
||||
"mobile.emoji_picker.activity": "ACTIVIDAD",
|
||||
"mobile.emoji_picker.custom": "PERSONALIZADO",
|
||||
"mobile.emoji_picker.flags": "BANDERAS",
|
||||
@@ -241,17 +251,24 @@
|
||||
"mobile.extension.file_limit": "Compartir está limitado a un máximo de 5 archivos.",
|
||||
"mobile.extension.max_file_size": "Los archivos a compartir en Mattermost no deben superar los {size}.",
|
||||
"mobile.extension.permission": "Mattermost necesita acceso al almacenamiento del dispositivo para poder compartir archivos.",
|
||||
"mobile.extension.team_required": "Debes pertenecer a un equipo antes de poder compartir archivos.",
|
||||
"mobile.extension.title": "Compartir en Mattermost",
|
||||
"mobile.failed_network_action.description": "Parece haber un problema con tu conexión de internet. Asegura que tienes una conexión activa e intenta de nuevo.",
|
||||
"mobile.failed_network_action.retry": "Intentar de nuevo",
|
||||
"mobile.failed_network_action.shortDescription": "Asegura de tener una conexión activa e intenta de nuevo.",
|
||||
"mobile.failed_network_action.shortDescription": "Los mensajes serán cargados una vez tengas conexión a internet.",
|
||||
"mobile.failed_network_action.teams_channel_description": "Los canales de {teamName} no pudieron ser cargados.",
|
||||
"mobile.failed_network_action.teams_description": "Los Equipos no pudieron ser cargados.",
|
||||
"mobile.failed_network_action.teams_title": "Algo salió mal",
|
||||
"mobile.failed_network_action.title": "Sin conexión a Internet",
|
||||
"mobile.file_upload.browse": "Explorar Archivos",
|
||||
"mobile.file_upload.camera_photo": "Capturar Foto",
|
||||
"mobile.file_upload.camera_video": "Capturar Vídeo",
|
||||
"mobile.file_upload.library": "Librería de Fotos",
|
||||
"mobile.file_upload.max_warning": "Se pueden subir un máximo de 5 archivos.",
|
||||
"mobile.file_upload.unsupportedMimeType": "Sólo pueden ser utilizadas imágenes BMP, JPG o PNG como imagen de perfil.",
|
||||
"mobile.file_upload.video": "Librería de Videos",
|
||||
"mobile.files_paste.error_description": "Ocurrió un error mientras se pegaba(n) archivo(s). Por favor inténtelo de nuevo.",
|
||||
"mobile.files_paste.error_dismiss": "Descartar",
|
||||
"mobile.files_paste.error_title": "Pegar falló",
|
||||
"mobile.flagged_posts.empty_description": "Las banderas son una forma de marcar los mensajes para hacerles seguimiento. Tus banderas son personales, y no puede ser vistas por otros usuarios.",
|
||||
"mobile.flagged_posts.empty_title": "No hay Mensajes Marcados",
|
||||
"mobile.help.title": "Ayuda",
|
||||
@@ -260,7 +277,8 @@
|
||||
"mobile.intro_messages.default_message": "Es es el primer canal que tus compañeros ven cuando se registran - puedes utilizarlo para enviar mensajes que todos deben leer.",
|
||||
"mobile.intro_messages.default_welcome": "¡Bienvenido a {name}!",
|
||||
"mobile.intro_messages.DM": "Este es el inicio de tu historial de mensajes directos con {teammate}.Los mensajes directos y archivos que se comparten aquí no son mostrados a personas fuera de esta área.",
|
||||
"mobile.ios.photos_permission_denied_description": "Para guardar imágenes y vídeos en tu librería, por favor, cambia la configuración de permisos.",
|
||||
"mobile.ios.photos_permission_denied_description": "Sube fotos y videos a tu servidor de Mattermost o guárdalos en tu dispositivo. Abre la Configuración y otorga a Mattermost permisos de Lectura y Escritura para acceder tu librería de fotos y videos.",
|
||||
"mobile.ios.photos_permission_denied_title": "{applicationName} desea acceder a tu librería de fotos",
|
||||
"mobile.join_channel.error": "No pudimos unirnos al canal {displayName}. Por favor revisa tu conexión e intenta de nuevo.",
|
||||
"mobile.loading_channels": "Cargando Canales...",
|
||||
"mobile.loading_members": "Cargando Miembros...",
|
||||
@@ -271,13 +289,17 @@
|
||||
"mobile.managed.blocked_by": "Bloqueado por {vendor}",
|
||||
"mobile.managed.exit": "Salir",
|
||||
"mobile.managed.jailbreak": "{vendor} no confía en los dispositivos con jailbreak, por favor, salga de la aplicación.",
|
||||
"mobile.managed.not_secured.android": "Este dispositivo debe estar asegurado con un bloqueo de pantalla para utilizar Mattermost.",
|
||||
"mobile.managed.not_secured.ios": "Este dispositivo debe estar protegido con un código de acceso para utilizar Mattermost.\n\nVaya a Configuración > Identificación Facial y clave de acceso.",
|
||||
"mobile.managed.not_secured.ios.touchId": "Este dispositivo debe estar protegido con un código de acceso para utilizar Mattermost.\n\nVaya a Configuración > Identificación Táctil y clave de acceso.",
|
||||
"mobile.managed.secured_by": "Asegurado por {vendor}",
|
||||
"mobile.managed.settings": "Ir a configuración",
|
||||
"mobile.markdown.code.copy_code": "Copiar código",
|
||||
"mobile.markdown.code.plusMoreLines": "+{count, number} más {count, plural, one {línea} other {líneas}}",
|
||||
"mobile.markdown.image.too_large": "La imagen excede la dimensión máxima de {maxWidth} x {maxHeight}:",
|
||||
"mobile.markdown.link.copy_url": "Copiar URL",
|
||||
"mobile.mention.copy_mention": "Copiar Mención",
|
||||
"mobile.message_length.message": "El mensaje es demasiado largo. Actual número de caracteres: {max}/{count}",
|
||||
"mobile.message_length.message": "El mensaje es demasiado largo. Actual número de caracteres: {count}/{max}",
|
||||
"mobile.message_length.title": "Longitud del Mensaje",
|
||||
"mobile.more_dms.add_more": "Puedes agregar {remaining, number} usuarios más",
|
||||
"mobile.more_dms.cannot_add_more": "No puedes agregar más usuarios.",
|
||||
@@ -289,16 +311,16 @@
|
||||
"mobile.notice_platform_link": "servidor",
|
||||
"mobile.notice_text": "Mattermost es hecho posible con software de código abierto utilizado en nuestra {platform} y {mobile}.",
|
||||
"mobile.notification_settings_mentions.keywords": "Palabras clave",
|
||||
"mobile.notification_settings_mentions.keywordsDescription": "Otras palabras que desencadenan menciones",
|
||||
"mobile.notification_settings_mentions.keywordsDescription": "Otras palabras que disparan menciones",
|
||||
"mobile.notification_settings_mentions.keywordsHelp": "Las palabras clave son sin distinción de mayúsculas y deben estar separadas por comas.",
|
||||
"mobile.notification_settings_mentions.wordsTrigger": "PALABRAS QUE DESENCADENAN MENCIONES",
|
||||
"mobile.notification_settings_mentions.wordsTrigger": "PALABRAS QUE DISPARAN MENCIONES",
|
||||
"mobile.notification_settings_mobile.default_sound": "Predeterminado ({sound})",
|
||||
"mobile.notification_settings_mobile.light": "Luz",
|
||||
"mobile.notification_settings_mobile.no_sound": "Ninguno",
|
||||
"mobile.notification_settings_mobile.push_activity": "ENVIAR NOTIFICACIONES",
|
||||
"mobile.notification_settings_mobile.push_activity_android": "Enviar notificaciones",
|
||||
"mobile.notification_settings_mobile.push_status": "ACTIVA LAS NOTIFICACIONES A DISPOSITIVOS MÓVILES CUANDO",
|
||||
"mobile.notification_settings_mobile.push_status_android": "Activa las notificaciones a dispositivos móviles cuando",
|
||||
"mobile.notification_settings_mobile.push_status": "DISPARAR NOTIFICACIONES A DISPOSITIVOS MÓVILES CUANDO",
|
||||
"mobile.notification_settings_mobile.push_status_android": "disparar notificaciones a dispositivos móviles cuando",
|
||||
"mobile.notification_settings_mobile.sound": "Sonido",
|
||||
"mobile.notification_settings_mobile.sounds_title": "Sonido de la notificación",
|
||||
"mobile.notification_settings_mobile.test": "Notificación de prueba",
|
||||
@@ -307,7 +329,7 @@
|
||||
"mobile.notification_settings.auto_responder_short": "Respuestas Automáticas",
|
||||
"mobile.notification_settings.auto_responder.default_message": "Hola, actualmente estoy fuera de la oficina y no puedo responder mensajes.",
|
||||
"mobile.notification_settings.auto_responder.enabled": "Activada",
|
||||
"mobile.notification_settings.auto_responder.footer_message": "Asigna un mensaje personalizado que será enviado automáticamente en respuesta a Mensajes Directos. Las menciones en canales Públicos y Privados no enviarán una respuesta automática. Al habilitar la Respuestas Automáticas tu estado será Fuera de Oficina y apagará las notificaciones por correo electrónico y a dispositivos móviles.",
|
||||
"mobile.notification_settings.auto_responder.footer_message": "Asigna un mensaje personalizado que será enviado automáticamente en respuesta a Mensajes Directos. Las menciones en canales Públicos y Privados no dispararán una respuesta automática. Al habilitar la Respuestas Automáticas tu estado será Fuera de Oficina y apagará las notificaciones por correo electrónico y a dispositivos móviles.",
|
||||
"mobile.notification_settings.auto_responder.message_placeholder": "Mensaje",
|
||||
"mobile.notification_settings.auto_responder.message_title": "MENSAJE PERSONALIZADO",
|
||||
"mobile.notification_settings.email": "Correo electrónico",
|
||||
@@ -332,20 +354,28 @@
|
||||
"mobile.open_dm.error": "No pudimos abrir el canal de mensajes directos con {displayName}. Por favor revisa tu conexión e intenta de nuevo.",
|
||||
"mobile.open_gm.error": "No pudimos abrir el canal del grupo con esos usuarios. Por favor revisa tu conexión e intenta de nuevo.",
|
||||
"mobile.open_unknown_channel.error": "No se pudo unir al canal. Por favor elimina el cache e intenta de nuevo.",
|
||||
"mobile.pinned_posts.empty_description": "Ancla elementos importantes manteniendo pulsado cualquier mensaje y selecciona la opción \"Anclar al Canal\".",
|
||||
"mobile.pinned_posts.empty_title": "No hay Mensajes Anclados",
|
||||
"mobile.permission_denied_dismiss": "No Permitir",
|
||||
"mobile.permission_denied_retry": "Ajustes",
|
||||
"mobile.photo_library_permission_denied_description": "Para guardar imágenes y vídeos en tu librería, por favor, cambia la configuración de permisos.",
|
||||
"mobile.photo_library_permission_denied_title": "{applicationName} desea acceder a tu librería de fotos",
|
||||
"mobile.pinned_posts.empty_description": "Destaca elementos importantes manteniendo pulsado cualquier mensaje y selecciona la opción \"Destacar\".",
|
||||
"mobile.pinned_posts.empty_title": "No hay Mensajes Destacados",
|
||||
"mobile.post_info.add_reaction": "Reaccionar",
|
||||
"mobile.post_info.copy_text": "Copiar Texto",
|
||||
"mobile.post_info.flag": "Marcar",
|
||||
"mobile.post_info.pin": "Anclar al Canal",
|
||||
"mobile.post_info.mark_unread": "Marcar No leído",
|
||||
"mobile.post_info.pin": "Destacar",
|
||||
"mobile.post_info.reply": "Responder",
|
||||
"mobile.post_info.unflag": "Desmarcar",
|
||||
"mobile.post_info.unpin": "Desprender del Canal",
|
||||
"mobile.post_info.unpin": "No Destacar",
|
||||
"mobile.post_pre_header.flagged": "Marcado",
|
||||
"mobile.post_pre_header.pinned": "Anclado",
|
||||
"mobile.post_pre_header.pinned_flagged": "Anclado y Marcado",
|
||||
"mobile.post_textbox.empty.message": "Estas intentando enviar un mensaje vacío.\nPor favor asegurate de estar enviando un mensaje con texto o con al menos un archivo adjunto.",
|
||||
"mobile.post_textbox.empty.ok": "Aceptar",
|
||||
"mobile.post_textbox.empty.title": "Mensaje vacío",
|
||||
"mobile.post_pre_header.pinned": "Destacado",
|
||||
"mobile.post_pre_header.pinned_flagged": "Destacado y Marcado",
|
||||
"mobile.post_textbox.entire_channel.cancel": "Cancelar",
|
||||
"mobile.post_textbox.entire_channel.confirm": "Confirmar",
|
||||
"mobile.post_textbox.entire_channel.message": "Al utilizar @all ó @channel estás a punto de enviar notificaciones a {totalMembers, number} {totalMembers, plural, one {persona} other {personas}}. ¿Estás seguro de querer hacer esto?",
|
||||
"mobile.post_textbox.entire_channel.message.with_timezones": "Al utilizar @all ó @channel estás a punto de enviar notificaciones a {totalMembers, number} {totalMembers, plural, one {persona} other {personas}} en {timezones, number} {zonas horarias, plural, one {zona horaria} other {zonas horarias}}. ¿Estás seguro de querer hacer esto?",
|
||||
"mobile.post_textbox.entire_channel.title": "Confirma el envío de notificaciones a todo el canal",
|
||||
"mobile.post_textbox.uploadFailedDesc": "Algunos archivos adjuntos no se han subido al servidor. ¿Quieres publicar el mensaje?",
|
||||
"mobile.post_textbox.uploadFailedTitle": "Error Adjuntando",
|
||||
"mobile.post.cancel": "Cancelar",
|
||||
@@ -356,7 +386,12 @@
|
||||
"mobile.post.failed_title": "No se pudo enviar el mensaje",
|
||||
"mobile.post.retry": "Actualizar",
|
||||
"mobile.posts_view.moreMsg": "Más Mensajes Arriba",
|
||||
"mobile.recent_mentions.empty_description": "Mensajes que contienen tu nombre de usuario u otras palabras que desencadenan menciones aparecerán aquí.",
|
||||
"mobile.privacy_link": "Política de Privacidad",
|
||||
"mobile.push_notification_reply.button": "Enviar",
|
||||
"mobile.push_notification_reply.placeholder": "Escribe una respuesta...",
|
||||
"mobile.push_notification_reply.title": "Responder",
|
||||
"mobile.reaction_header.all_emojis": "Todos",
|
||||
"mobile.recent_mentions.empty_description": "Mensajes que contienen tu nombre de usuario u otras palabras que disparan menciones aparecerán aquí.",
|
||||
"mobile.recent_mentions.empty_title": "No hay Menciones recientes",
|
||||
"mobile.rename_channel.display_name_maxLength": "El nombre del canal debe tener menos de {maxLength, number} caracteres",
|
||||
"mobile.rename_channel.display_name_minLength": "El nombre del canal debe ser de {minLength, number} o más caracteres",
|
||||
@@ -378,6 +413,8 @@
|
||||
"mobile.routes.channelInfo.createdBy": "Creado por {creator} el ",
|
||||
"mobile.routes.channelInfo.delete_channel": "Archivar Canal",
|
||||
"mobile.routes.channelInfo.favorite": "Favorito",
|
||||
"mobile.routes.channelInfo.groupManaged": "Los miembros son gestionados por grupos enlazados",
|
||||
"mobile.routes.channelInfo.unarchive_channel": "Restaurar Canal",
|
||||
"mobile.routes.code": "Código {language}",
|
||||
"mobile.routes.code.noLanguage": "Código",
|
||||
"mobile.routes.edit_profile": "Editar Perfil",
|
||||
@@ -393,6 +430,7 @@
|
||||
"mobile.routes.thread": "Hilo en {channelName}",
|
||||
"mobile.routes.thread_dm": "Hilo de Mensaje Directo",
|
||||
"mobile.routes.user_profile": "Perfil",
|
||||
"mobile.routes.user_profile.edit": "Editar",
|
||||
"mobile.routes.user_profile.local_time": "HORA LOCAL",
|
||||
"mobile.routes.user_profile.send_message": "Enviar Mensaje",
|
||||
"mobile.search.after_modifier_description": "encontrar mensajes después de una fecha específica",
|
||||
@@ -405,13 +443,20 @@
|
||||
"mobile.search.no_results": "No se han encontrado resultados",
|
||||
"mobile.search.on_modifier_description": "encontrar mensajes de una fecha específica",
|
||||
"mobile.search.recent_title": "Búsquedas recientes",
|
||||
"mobile.select_team.guest_cant_join_team": "Tu cuenta de huésped no tiene equipos o canales asignados. Por favor contacta a un administrador.",
|
||||
"mobile.select_team.join_open": "Equipos a los que te puedes unir",
|
||||
"mobile.select_team.no_teams": "No hay equipos disponibles a los que te puedas unir.",
|
||||
"mobile.server_link.error.text": "No se pudo encontrar el enlace en este servidor.",
|
||||
"mobile.server_link.error.title": "Error de enlace",
|
||||
"mobile.server_link.unreachable_channel.error": "Este enlace pertenece a un canal eliminado o a un canal al cual no tienes acceso.",
|
||||
"mobile.server_link.unreachable_team.error": "Este enlace pertenece a un equipo eliminado o a un equipo al cual no tienes acceso.",
|
||||
"mobile.server_ssl.error.text": "El certificado de {host} no es confiable.\n\nPor favor contacta a tu Administrador de Sistema para resolver los problemas con el certificado y permitir la conexión a este servidor.",
|
||||
"mobile.server_ssl.error.title": "Certificado no confiable",
|
||||
"mobile.server_upgrade.button": "Aceptar",
|
||||
"mobile.server_upgrade.description": "\nEs necesaria una actualización del servidor para utilizar la aplicación de Mattermost. Por favor, preguntale a tu Administrador del Sistema para obtener más detalles.\n",
|
||||
"mobile.server_upgrade.title": "Es necesario actualizar el Servidor",
|
||||
"mobile.server_url.invalid_format": "URL debe comenzar con http:// o https://",
|
||||
"mobile.session_expired": "Sesión Caducada: Por favor, inicia sesión para seguir recibiendo notificaciones.",
|
||||
"mobile.session_expired": "Sesión expirada: Inicia sesión para continuar recibiendo notificaciones. Las sesiones para {siteName} están configuradas para caducar cada {daysCount, number} {daysCount, plural, un {día} other {días}}.",
|
||||
"mobile.set_status.away": "Ausente",
|
||||
"mobile.set_status.dnd": "No Molestar",
|
||||
"mobile.set_status.offline": "Desconectado",
|
||||
@@ -422,16 +467,30 @@
|
||||
"mobile.share_extension.error_message": "Ocurrió un error utilizando la extensión para compartir.",
|
||||
"mobile.share_extension.error_title": "Error en la Extensión",
|
||||
"mobile.share_extension.team": "Equipo",
|
||||
"mobile.share_extension.too_long_message": "Número de letras: {count}/{max}",
|
||||
"mobile.share_extension.too_long_title": "Mensaje es un largo",
|
||||
"mobile.sidebar_settings.permanent": "Barra lateral permanente",
|
||||
"mobile.sidebar_settings.permanent_description": "Mantiene la barra lateral abierta permanentemente",
|
||||
"mobile.storage_permission_denied_description": "Sube archivos a tu servidor de Mattermost. Abre la Configuración para otorgar permisos de Lectura y Escritura para acceder archivos en este dispositivo.",
|
||||
"mobile.storage_permission_denied_title": "{applicationName} desea acceder a tus archivos",
|
||||
"mobile.suggestion.members": "Miembros",
|
||||
"mobile.system_message.channel_archived_message": "{username} archivó el canal",
|
||||
"mobile.system_message.channel_unarchived_message": "{username} restauró el canal",
|
||||
"mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} actualizó el nombre del canal de: {oldDisplayName} a: {newDisplayName}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.removed": "{username} eliminó el encabezado del canal (era: {oldHeader})",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username} ha actualizado el encabezado del canal de: {oldHeader} a: {newHeader}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} ha actualizado el encabezado del canal a: {newHeader}",
|
||||
"mobile.system_message.update_channel_purpose_message.removed": "{username} eliminó el propósito del canal (era: {oldPurpose})",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_from": "{username} ha actualizado el propósito del canal de: {oldPurpose} a: {newPurpose}",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_to": "{username} ha actualizado el propósito del canal a: {newPurpose}",
|
||||
"mobile.terms_of_service.alert_cancel": "Cancelar",
|
||||
"mobile.terms_of_service.alert_ok": "Aceptar",
|
||||
"mobile.terms_of_service.alert_retry": "Intentar de nuevo",
|
||||
"mobile.terms_of_service.get_terms_error_description": "Asegúrate de tener una conexión activa a internet e inténtalo de nuevo. Si este problema persiste, ponte en contacto con tu Administrador del Sistema.",
|
||||
"mobile.terms_of_service.get_terms_error_title": "No se pueden cargar los términos de servicio.",
|
||||
"mobile.terms_of_service.terms_rejected": "Debes aceptar los términos de servicio antes de acceder a {siteName}. Por favor, ponte en contacto con el Administrador del Sistema para obtener más detalles.",
|
||||
"mobile.timezone_settings.automatically": "Asignar automáticamente",
|
||||
"mobile.timezone_settings.manual": "Cambiar zona horaria",
|
||||
"mobile.timezone_settings.select": "Seleccione la zona horaria",
|
||||
"mobile.tos_link": "Términos de Servicio",
|
||||
"mobile.user_list.deactivated": "Desactivado",
|
||||
"mobile.user.settings.notifications.email.fifteenMinutes": "Cada 15 minutos",
|
||||
"mobile.video_playback.failed_description": "Ocurrió un error al reproducir el vídeo.\n",
|
||||
@@ -445,11 +504,17 @@
|
||||
"modal.manual_status.auto_responder.message_dnd": "¿Quieres cambiar to estado a \"No Molestar\" e inhabilitar las respuestas automáticas?",
|
||||
"modal.manual_status.auto_responder.message_offline": "¿Quieres cambiar to estado a \"Desconectado\" e inhabilitar las respuestas automáticas?",
|
||||
"modal.manual_status.auto_responder.message_online": "¿Quieres cambiar to estado a \"En línea\" e inhabilitar las respuestas automáticas?",
|
||||
"more_channels.archivedChannels": "Canales Archivados",
|
||||
"more_channels.dropdownTitle": "Mostrar",
|
||||
"more_channels.noMore": "No hay más canales para unirse",
|
||||
"more_channels.publicChannels": "Canales Públicos",
|
||||
"more_channels.showArchivedChannels": "Mostrar: Canales Archivados",
|
||||
"more_channels.showPublicChannels": "Mostrar: Canales Públicos",
|
||||
"more_channels.title": "Más Canales",
|
||||
"msg_typing.areTyping": "{users} y {last} están escribiendo...",
|
||||
"msg_typing.isTyping": "{user} está escribiendo...",
|
||||
"navbar_dropdown.logout": "Cerrar sesión",
|
||||
"navbar.channel_drawer.button": "Canales y equipos",
|
||||
"navbar.channel_drawer.hint": "Abrir la lista de canales y equipos",
|
||||
"navbar.leave": "Abandonar Canal",
|
||||
"password_form.title": "Restablecer Contraseña",
|
||||
"password_send.checkInbox": "Por favor revisa tu bandeja de entrada.",
|
||||
@@ -458,25 +523,26 @@
|
||||
"password_send.link": "Si la cuenta existe, una correo electrónico de reinicio de contraseña será enviado a:",
|
||||
"password_send.reset": "Restablecer mi contraseña",
|
||||
"permalink.error.access": "El Enlace permanente pertenece a un mensaje eliminado o a un canal al cual no tienes acceso.",
|
||||
"permalink.error.link_not_found": "Enlace no encontrado",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "no fueron notificados por esta mención porque no se encuentra en este canal. No pueden ser agregados al canal porque no son miembros de los grupos enlazados. Para agregarlos a este canal, deben ser agregados a alguno de los grupos enlazados.",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": " y ",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "agregarlos a este canal privado",
|
||||
"post_body.check_for_out_of_channel_mentions.link.public": "agregarlos al canal",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? Tendrán acceso al historial de mensajes.",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "fueron mencionados pero no son parte de este canal. Quieres ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "fue mencionado pero no es parte de este canal. Quieres ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "no fueron notificados por esta mención porque no se encuentran en el canal. Quieres ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "no fue notificado por esta mención porque no se encuentra en el canal. Quieres ",
|
||||
"post_body.commentedOn": "Comento en el mensaje de {name}: ",
|
||||
"post_body.deleted": "(mensaje eliminado)",
|
||||
"post_info.auto_responder": "RESPUESTA AUTOMÁTICA",
|
||||
"post_info.bot": "BOT",
|
||||
"post_info.del": "Borrar",
|
||||
"post_info.edit": "Editar",
|
||||
"post_info.message.show_less": "Ver Menos",
|
||||
"post_info.message.show_more": "Ver Más",
|
||||
"post_info.guest": "HUÉSPEDES",
|
||||
"post_info.message.show_less": "Ver menos",
|
||||
"post_info.message.show_more": "Ver más",
|
||||
"post_info.system": "Sistema",
|
||||
"post_message_view.edited": "(editado)",
|
||||
"posts_view.newMsg": "Nuevos Mensajes",
|
||||
"rename_channel.handleHolder": "Debe tener caracteres alfanuméricos y en minúscula",
|
||||
"rename_channel.url": "URL",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "Parte de esta conversación ha sido eliminada debido a la política de retención de datos. No se puede seguir respondiendo a esta conversación.",
|
||||
"search_bar.search": "Buscar",
|
||||
"search_header.results": "Resultados de la Búsqueda",
|
||||
@@ -498,20 +564,22 @@
|
||||
"status_dropdown.set_offline": "Desconectado",
|
||||
"status_dropdown.set_online": "En línea",
|
||||
"status_dropdown.set_ooo": "Fuera de Oficina",
|
||||
"suggestion.mention.all": "PRECAUCIÓN: Esto menciona a todos los usuarios en el canal",
|
||||
"suggestion.mention.channel": "Notifica a todas las personas en el canal",
|
||||
"suggestion.mention.all": "Notifica a todas las personas en este canal",
|
||||
"suggestion.mention.channel": "Notifica a todas las personas en este canal",
|
||||
"suggestion.mention.channels": "Mis Canales",
|
||||
"suggestion.mention.here": "Notifica a todos en el canal que estén en línea",
|
||||
"suggestion.mention.here": "Notifica a todas las personas disponibles en este canal",
|
||||
"suggestion.mention.members": "Miembros del Canal",
|
||||
"suggestion.mention.morechannels": "Otros Canales",
|
||||
"suggestion.mention.nonmembers": "No en el Canal",
|
||||
"suggestion.mention.special": "Menciones especiales",
|
||||
"suggestion.mention.you": "(tú)",
|
||||
"suggestion.search.direct": "Mensajes Directos",
|
||||
"suggestion.search.private": "Canales Privados",
|
||||
"suggestion.search.public": "Canales Públicos",
|
||||
"terms_of_service.agreeButton": "Acepto",
|
||||
"terms_of_service.api_error": "No se puede completar la solicitud. Si el problema persiste, contacta a tu Administrador de Sistema.",
|
||||
"user.settings.display.clockDisplay": "Visualización del Reloj",
|
||||
"user.settings.display.custom_theme": "Tema Personalizado",
|
||||
"user.settings.display.militaryClock": "Reloj de 24 horas (ejemplo: 16:00)",
|
||||
"user.settings.display.normalClock": "Reloj de 12 horas (ejemplo: 4:00 pm)",
|
||||
"user.settings.display.preferTime": "Selecciona como prefieres mostrar la hora.",
|
||||
@@ -538,7 +606,7 @@
|
||||
"user.settings.notifications.email.immediately": "Inmediatamente",
|
||||
"user.settings.notifications.email.never": "Nunca",
|
||||
"user.settings.notifications.email.send": "Enviar notificaciones de correo electrónico",
|
||||
"user.settings.notifications.emailInfo": "El correo electrónico que se envía para notificaciones de menciones y mensajes directos cuando estás ausente o desconectado de {siteName} por más de 5 minutos.",
|
||||
"user.settings.notifications.emailInfo": "El correo electrónico que se envía para notificaciones de menciones y mensajes directos cuando estás ausente o desconectado por más de 5 minutos.",
|
||||
"user.settings.notifications.never": "Nunca",
|
||||
"user.settings.notifications.onlyMentions": "Sólo para menciones y mensajes directos",
|
||||
"user.settings.push_notification.away": "Ausente o desconectado",
|
||||
@@ -547,4 +615,4 @@
|
||||
"user.settings.push_notification.offline": "Desconectado",
|
||||
"user.settings.push_notification.online": "En línea, ausente o desconectado",
|
||||
"web.root.signup_info": "Todas las comunicaciones del equipo en un sólo lugar, con búsquedas y accesible desde cualquier parte"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"about.teamEditionSt": "Toute la communication de votre équipe en un seul endroit, consultable instantanément et accessible de partout.",
|
||||
"about.teamEditiont0": "Édition Team",
|
||||
"about.teamEditiont1": "Édition Entreprise",
|
||||
"about.title": "À propos de Mattermost",
|
||||
"about.title": "A propos de {appTitle}",
|
||||
"announcment_banner.dont_show_again": "Ne plus montrer",
|
||||
"api.channel.add_member.added": "{addedUsername} a été ajouté au canal par {username}.",
|
||||
"archivedChannelMessage": "Vous consultez un **canal archivé**. Vous ne pouvez pas publier de nouveaux messages.",
|
||||
@@ -35,6 +35,9 @@
|
||||
"channel_modal.purposeEx": "Ex. : « Un canal pour rapporter des bogues ou des améliorations »",
|
||||
"channel_notifications.ignoreChannelMentions.settings": "Ignorer @channel, @here et @all",
|
||||
"channel_notifications.muteChannel.settings": "Mettre le canal en sourdine",
|
||||
"channel.channelHasGuests": "The canal dispose d'utilisateurs invités",
|
||||
"channel.hasGuests": "Ce groupe dispose d'utilisateurs invités",
|
||||
"channel.isGuest": "Cet utilisateur est un utilisateur invité",
|
||||
"combined_system_message.added_to_channel.many_expanded": "{users} et {lastUser} ont été **ajoutés au canal** par {actor}.",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser} **ajouté au canal** par {actor}.",
|
||||
"combined_system_message.added_to_channel.one_you": "Vous avez été **ajouté au canal** par {actor}.",
|
||||
@@ -45,19 +48,19 @@
|
||||
"combined_system_message.added_to_team.two": "{firstUser} et {secondUser} ont été **ajoutés à l'équipe** par {actor}.",
|
||||
"combined_system_message.joined_channel.many_expanded": "{users} et {lastUser} ont **rejoint le canal**.",
|
||||
"combined_system_message.joined_channel.one": "{firstUser} a **rejoint le canal**.",
|
||||
"combined_system_message.joined_channel.one_you": "a **rejoint le canal**.",
|
||||
"combined_system_message.joined_channel.one_you": "Vous avez **rejoint le canal**.",
|
||||
"combined_system_message.joined_channel.two": "{firstUser} et {secondUser} ont **rejoint le canal**.",
|
||||
"combined_system_message.joined_team.many_expanded": "{users} et {lastUser} ont **rejoint l'équipe**.",
|
||||
"combined_system_message.joined_team.one": "{firstUser} a **rejoint l'équipe**.",
|
||||
"combined_system_message.joined_team.one_you": "a **rejoint l'équipe**.",
|
||||
"combined_system_message.joined_team.one_you": "Vous avez **rejoint l'équipe**.",
|
||||
"combined_system_message.joined_team.two": "{firstUser} et {secondUser} ont **rejoint l'équipe**.",
|
||||
"combined_system_message.left_channel.many_expanded": "{users} et {lastUser} ont **quitté le canal**.",
|
||||
"combined_system_message.left_channel.one": "{firstUser} a **quitté le canal**.",
|
||||
"combined_system_message.left_channel.one_you": "a **quitté le canal**.",
|
||||
"combined_system_message.left_channel.one_you": "Vous avez **quitté le canal**.",
|
||||
"combined_system_message.left_channel.two": "{firstUser} et {secondUser} ont **quitté le canal**.",
|
||||
"combined_system_message.left_team.many_expanded": "{users} et {lastUser} ont **quitté l'équipe**.",
|
||||
"combined_system_message.left_team.one": "{firstUser} a **quitté l'équipe**.",
|
||||
"combined_system_message.left_team.one_you": "a **quitté l'équipe**.",
|
||||
"combined_system_message.left_team.one_you": "Vous avez **quitté l'équipe**.",
|
||||
"combined_system_message.left_team.two": "{firstUser} et {secondUser} ont **quitté l'équipe**.",
|
||||
"combined_system_message.removed_from_channel.many_expanded": "{users} et {lastUser} ont été **retirés du canal**.",
|
||||
"combined_system_message.removed_from_channel.one": "{firstUser} a été **retiré du canal**.",
|
||||
@@ -70,21 +73,21 @@
|
||||
"combined_system_message.you": "Vous",
|
||||
"create_comment.addComment": "Commenter...",
|
||||
"create_post.deactivated": "Ceci est un canal de messages personnels archivé contenant une discussion avec un utilisateur désactivé.",
|
||||
"create_post.write": "Write to {channelDisplayName}",
|
||||
"create_post.write": "Écrire à {channelDisplayName}",
|
||||
"date_separator.today": "Aujourd'hui",
|
||||
"date_separator.yesterday": "Hier",
|
||||
"edit_post.editPost": "Modifier le message...",
|
||||
"edit_post.save": "Enregistrer",
|
||||
"error.team_not_found.title": "Équipe introuvable",
|
||||
"file_attachment.download": "Télécharger",
|
||||
"file_upload.fileAbove": "Le fichier plus grand que {max}Mo ne peut pas être téléchargé : {filename}",
|
||||
"get_post_link_modal.title": "Copier le lien permanent",
|
||||
"get_post_link_modal.title": "Copier le lien",
|
||||
"integrations.add": "Ajouter",
|
||||
"intro_messages.anyMember": " Tout membre peut rejoindre et lire ce canal.",
|
||||
"intro_messages.beginning": "Début de {name}",
|
||||
"intro_messages.channel": "canal",
|
||||
"intro_messages.creator": "Ceci est le début de {type} {name}, créé par {creator} le {date}.",
|
||||
"intro_messages.group": "canal privé",
|
||||
"intro_messages.creator": "Ceci est le début du canal {name}, créé par {creator} le {date}.",
|
||||
"intro_messages.creatorPrivate": "Ceci est le début du canal privé {name}, créé par {creator} le {date}.",
|
||||
"intro_messages.group_message": "Vous êtes au début de votre historique de messages de groupe avec ces utilisateurs. Les messages privés et les fichiers partagés ici ne sont pas visibles par les autres utilisateurs.",
|
||||
"intro_messages.noCreator": "Ceci est le début de {name} {type}, créé le {date}.",
|
||||
"intro_messages.noCreator": "Ceci est le début du canal {name}, créé le {date}.",
|
||||
"intro_messages.onlyInvited": " Seuls les membres invités peuvent voir ce canal privé.",
|
||||
"last_users_message.added_to_channel.type": "a été **ajouté au canal** par {actor}.",
|
||||
"last_users_message.added_to_team.type": "a été **ajouté à l'équipe** par {actor}.",
|
||||
@@ -97,10 +100,10 @@
|
||||
"last_users_message.removed_from_channel.type": "ont été **retirés de ce canal**.",
|
||||
"last_users_message.removed_from_team.type": "ont été **retirés de cette équipe**.",
|
||||
"login_mfa.enterToken": "Pour terminer le processus de connexion, veuillez spécifier le jeton apparaissant dans l'application d'authentification de votre smartphone.",
|
||||
"login_mfa.token": "Jeton MFA",
|
||||
"login_mfa.token": "Jeton d'authentification multi-facteurs (MFA)",
|
||||
"login_mfa.tokenReq": "Veuillez spécifier un jeton d'authentification multi-facteurs (MFA)",
|
||||
"login.email": "Adresse e-mail",
|
||||
"login.forgot": "Mot de passe perdu",
|
||||
"login.forgot": "J'ai perdu mon mot de passe.",
|
||||
"login.invalidPassword": "Votre mot de passe est incorrect.",
|
||||
"login.ldapUsername": "Nom d’utilisateur AD/LDAP",
|
||||
"login.ldapUsernameLower": "Nom d’utilisateur AD/LDAP",
|
||||
@@ -128,7 +131,6 @@
|
||||
"mobile.account_notifications.threads_mentions": "Mentions dans les fils de discussion",
|
||||
"mobile.account_notifications.threads_start": "Fils de discussion que je démarre",
|
||||
"mobile.account_notifications.threads_start_participate": "Fils de discussion que je démarre ou auxquels je participe",
|
||||
"mobile.account.settings.cancel": "Annuler",
|
||||
"mobile.account.settings.save": "Enregistrer",
|
||||
"mobile.action_menu.select": "Sélectionnez une option",
|
||||
"mobile.advanced_settings.clockDisplay": "Affichage de l'horloge",
|
||||
@@ -137,36 +139,44 @@
|
||||
"mobile.advanced_settings.delete_title": "Supprimer les documents et les données",
|
||||
"mobile.advanced_settings.timezone": "Fuseau horaire",
|
||||
"mobile.advanced_settings.title": "Paramètres avancés",
|
||||
"mobile.android.camera_permission_denied_description": "Pour prendre des photos et des vidéos avec votre appareil photo, veuillez modifier vos paramètres d'autorisation.",
|
||||
"mobile.android.camera_permission_denied_title": "L'accès à la caméra est requis",
|
||||
"mobile.android.permission_denied_dismiss": "Rejeter",
|
||||
"mobile.android.permission_denied_retry": "Définir les permissions",
|
||||
"mobile.android.photos_permission_denied_description": "Pour envoyer des images à partir de votre bibliothèque, veuillez modifier vos paramètres d'autorisation.",
|
||||
"mobile.android.photos_permission_denied_title": "L'accès à la bibliothèque de photos est requis",
|
||||
"mobile.android.storage_permission_denied_description": "Pour envoyer des images à partir de votre appareil Android, veuillez modifier vos permissions.",
|
||||
"mobile.android.storage_permission_denied_title": "L'accès au stockage de fichiers est requis",
|
||||
"mobile.android.videos_permission_denied_description": "Pour envoyer des vidéos à partir de votre bibliothèque, veuillez modifier vos paramètres d'autorisation.",
|
||||
"mobile.android.videos_permission_denied_title": "L'accès à la bibliothèque de vidéos est requis",
|
||||
"mobile.alert_dialog.alertCancel": "Annuler",
|
||||
"mobile.android.photos_permission_denied_description": "Utile pour envoyer des photos à votre instance Mattermost ou les sauvegarder sur votre appareil. Ouvrez les paramètres de votre appareil et accordez à Mattermost les accès de lecture et d'écriture à votre bibliothèque de photos.",
|
||||
"mobile.android.photos_permission_denied_title": "{applicationName} aimerait accéder à vos photos",
|
||||
"mobile.android.videos_permission_denied_description": "Utile pour envoyer des vidéos à votre instance Mattermost ou les sauvegarder sur votre appareil. Ouvrez les paramètres de votre appareil et accordez à Mattermost les accès de lecture et d'écriture à votre bibliothèque de vidéos.",
|
||||
"mobile.android.videos_permission_denied_title": "{applicationName} aimerait accéder à vos vidéos",
|
||||
"mobile.announcement_banner.title": "Annonce",
|
||||
"mobile.authentication_error.message": "Mattermost a rencontré un problème. Veuillez vous authentifier à nouveau pour démarrer une nouvelle session.",
|
||||
"mobile.authentication_error.title": "Erreur d'authentification",
|
||||
"mobile.calendar.dayNames": "Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi",
|
||||
"mobile.calendar.dayNamesShort": "Dim,Lun,Mar,Mer,Jeu,Ven,Sam",
|
||||
"mobile.calendar.monthNames": "Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre",
|
||||
"mobile.calendar.monthNamesShort": "Jan,Fév,Mar,Avr,Mai,Juin,Juil,Aou,Sep,Oct,Nov,Déc",
|
||||
"mobile.camera_photo_permission_denied_description": "Utile pour prendre des photos et les envoyer à votre instance Mattermost ou les sauvegarder sur votre appareil. Ouvrez les paramètres de votre appareil et accordez à Mattermost les accès de lecture et d'écriture à votre appareil photo.",
|
||||
"mobile.camera_photo_permission_denied_title": "{applicationName} aimerait accéder à votre appareil photo",
|
||||
"mobile.camera_video_permission_denied_description": "Utile pour prendre des vidéos et les envoyer à votre instance Mattermost ou les sauvegarder sur votre appareil. Ouvrez les paramètres de votre appareil et accordez à Mattermost les accès de lecture et d'écriture à votre appareil photo.",
|
||||
"mobile.camera_video_permission_denied_title": "{applicationName} aimerait accéder à votre appareil photo",
|
||||
"mobile.channel_drawer.search": "Aller à...",
|
||||
"mobile.channel_info.alertMessageConvertChannel": "Lorsque vous convertissez {displayName} en canal privé, l'historique du canal ainsi que ses membres sont préservés. Les fichiers partagés publiquement restent accessibles à toute personne qui dispose du lien. Devenir membre d'un canal privé se fait sur invitation uniquement.\n\nCe changement est permanent et ne peut pas être annulé.\n\nVoulez-vous vraiment convertir {displayName} en canal privé ?",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Voulez-vous vraiment archiver le {term} {name} ?",
|
||||
"mobile.channel_info.alertMessageLeaveChannel": "Voulez-vous vraiment quitter le {term} {name} ?",
|
||||
"mobile.channel_info.alertMessageUnarchiveChannel": "Voulez-vous vraiment archiver le {term} {name} ?",
|
||||
"mobile.channel_info.alertNo": "Non",
|
||||
"mobile.channel_info.alertTitleConvertChannel": "Convertir {displayName} en canal privé ?",
|
||||
"mobile.channel_info.alertTitleDeleteChannel": "Archiver {term}",
|
||||
"mobile.channel_info.alertTitleLeaveChannel": "Quitter {term}",
|
||||
"mobile.channel_info.alertTitleUnarchiveChannel": "Archiver {term}",
|
||||
"mobile.channel_info.alertYes": "Oui",
|
||||
"mobile.channel_info.convert": "Convertir en canal privé",
|
||||
"mobile.channel_info.convert_failed": "Impossible de convertir {displayName} en canal privé.",
|
||||
"mobile.channel_info.convert_success": "{displayName} est maintenant un canal privé.",
|
||||
"mobile.channel_info.copy_header": "Copier l'entête",
|
||||
"mobile.channel_info.copy_purpose": "Copier la description",
|
||||
"mobile.channel_info.delete_failed": "Impossible d'archiver le canal {displayName}. Veuillez vérifier votre connexion et essayer à nouveau.",
|
||||
"mobile.channel_info.edit": "Modifier le canal",
|
||||
"mobile.channel_info.privateChannel": "Canal privé",
|
||||
"mobile.channel_info.publicChannel": "Canal public",
|
||||
"mobile.channel_info.unarchive_failed": "Impossible d'archiver le canal {displayName}. Veuillez vérifier votre connexion et essayer à nouveau.",
|
||||
"mobile.channel_list.alertNo": "Non",
|
||||
"mobile.channel_list.alertYes": "Oui",
|
||||
"mobile.channel_list.archived": "ARCHIVÉ",
|
||||
"mobile.channel_list.channels": "CANAUX",
|
||||
"mobile.channel_list.closeDM": "Fermer le message personnel",
|
||||
"mobile.channel_list.closeGM": "Fermer le groupe de message",
|
||||
@@ -174,7 +184,6 @@
|
||||
"mobile.channel_list.not_member": "PAS UN MEMBRE",
|
||||
"mobile.channel_list.unreads": "NON LUS",
|
||||
"mobile.channel_members.add_members_alert": "Vous devez sélectionner au moins un membre à ajouter à ce canal.",
|
||||
"mobile.channel.markAsRead": "Marquer comme lu",
|
||||
"mobile.client_upgrade": "Mettre à jour l'application",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "Une nouvelle version est disponible au téléchargement.",
|
||||
"mobile.client_upgrade.can_upgrade_title": "Mise à jour disponible",
|
||||
@@ -183,7 +192,7 @@
|
||||
"mobile.client_upgrade.download_error.message": "Une erreur s'est produite lors du téléchargement de la nouvelle version.",
|
||||
"mobile.client_upgrade.download_error.title": "Impossible d'installer la mise à jour",
|
||||
"mobile.client_upgrade.latest_version": "Votre version : {version}",
|
||||
"mobile.client_upgrade.listener.dismiss_button": "Rejeter",
|
||||
"mobile.client_upgrade.listener.dismiss_button": "Annuler",
|
||||
"mobile.client_upgrade.listener.learn_more_button": "En savoir plus",
|
||||
"mobile.client_upgrade.listener.message": "Une mise jour du client est disponible !",
|
||||
"mobile.client_upgrade.listener.upgrade_button": "Mettre à jour",
|
||||
@@ -204,25 +213,26 @@
|
||||
"mobile.create_channel.public": "Nouveau canal public",
|
||||
"mobile.create_post.read_only": "Ce canal est en lecture seule",
|
||||
"mobile.custom_list.no_results": "Aucun résultat",
|
||||
"mobile.display_settings.sidebar": "Barre latérale",
|
||||
"mobile.display_settings.theme": "Thème",
|
||||
"mobile.document_preview.failed_description": "Une erreur s'est produite lors de l'ouverture du document. Veuillez vous assurer que vous ayez un lecteur de {fileType} installé et réessayez.\n",
|
||||
"mobile.document_preview.failed_title": "L'ouverture du document a échoué",
|
||||
"mobile.downloader.android_complete": "Téléchargement terminé",
|
||||
"mobile.downloader.android_failed": "Échec du téléchargement",
|
||||
"mobile.downloader.android_permission": "Des permissions au dossier de téléchargements sont requises pour pouvoir sauvegarder les fichiers.",
|
||||
"mobile.downloader.android_permission": "Des permissions au dossier de téléchargements sont requises pour pouvoir enregistrer des fichiers.",
|
||||
"mobile.downloader.android_started": "Téléchargement commencé",
|
||||
"mobile.downloader.android_success": "Téléchargement réussi",
|
||||
"mobile.downloader.complete": "Téléchargement terminé",
|
||||
"mobile.downloader.disabled_description": "Le téléchargement de fichiers est désactivé sur ce serveur. Veuillez contacter votre administrateur système pour en savoir plus.\n",
|
||||
"mobile.downloader.disabled_title": "Téléchargement désactivé",
|
||||
"mobile.downloader.downloading": "Téléchargement en cours...",
|
||||
"mobile.downloader.failed_description": "Une erreur s'est produite lors du téléchargement du fichier. Veuillez vérifier votre connexion internet et réessayez.\n",
|
||||
"mobile.downloader.failed_title": "Échec du téléchargement",
|
||||
"mobile.downloader.image_saved": "Image sauvegardée",
|
||||
"mobile.downloader.video_saved": "Vidéo sauvegardée",
|
||||
"mobile.downloader.image_saved": "Image enregistrée",
|
||||
"mobile.downloader.video_saved": "Vidéo enregistrée",
|
||||
"mobile.drawer.teamsTitle": "Équipes",
|
||||
"mobile.edit_channel": "Enregistrer",
|
||||
"mobile.edit_post.title": "Edition du message",
|
||||
"mobile.edit_profile.remove_profile_photo": "Supprimer la photo",
|
||||
"mobile.emoji_picker.activity": "ACTIVITÉ",
|
||||
"mobile.emoji_picker.custom": "PERSONNALISÉ",
|
||||
"mobile.emoji_picker.flags": "DRAPEAUX",
|
||||
@@ -241,17 +251,24 @@
|
||||
"mobile.extension.file_limit": "Le partage est limité à un maximum de 5 fichiers.",
|
||||
"mobile.extension.max_file_size": "Les fichiers partagés dans Mattermost doivent faire moins de {size}.",
|
||||
"mobile.extension.permission": "Mattermost requiert l'accès au stockage de l'appareil pour partager des fichiers.",
|
||||
"mobile.extension.team_required": "Vous devez appartenir à une équipe avant de pouvoir partager des fichiers.",
|
||||
"mobile.extension.title": "Partager dans Mattermost",
|
||||
"mobile.failed_network_action.description": "Il semble y avoir un problème avec votre connexion Internet. Veuillez vous assurer d'avoir une connexion active et réessayez.",
|
||||
"mobile.failed_network_action.retry": "Réessayer",
|
||||
"mobile.failed_network_action.shortDescription": "Assurez-vous d'avoir une connexion active et réessayez.",
|
||||
"mobile.failed_network_action.retry": "Essayer à nouveau",
|
||||
"mobile.failed_network_action.shortDescription": "Messages will load when you have an internet connection.",
|
||||
"mobile.failed_network_action.teams_channel_description": "Channels could not be loaded for {teamName}.",
|
||||
"mobile.failed_network_action.teams_description": "Teams could not be loaded.",
|
||||
"mobile.failed_network_action.teams_title": "Something went wrong",
|
||||
"mobile.failed_network_action.title": "Aucune connexion Internet",
|
||||
"mobile.file_upload.browse": "Parcourir les fichiers",
|
||||
"mobile.file_upload.camera_photo": "Prendre une photo",
|
||||
"mobile.file_upload.camera_video": "Enregistrer une vidéo",
|
||||
"mobile.file_upload.library": "Bibliothèque de photos",
|
||||
"mobile.file_upload.max_warning": "Envois limités à maximum 5 fichiers.",
|
||||
"mobile.file_upload.unsupportedMimeType": "Seules les images BMP, JPG ou PNG peuvent être utilisées comme photos de profil.",
|
||||
"mobile.file_upload.video": "Bibliothèque vidéo",
|
||||
"mobile.files_paste.error_description": "Une erreur s'est produite lors de l'opération de collage du(des) fichier(s). Veuillez réessayer.",
|
||||
"mobile.files_paste.error_dismiss": "Annuler",
|
||||
"mobile.files_paste.error_title": "L'opération de collage a échoué",
|
||||
"mobile.flagged_posts.empty_description": "Marquer un message est un bon moyen d'assurer le suivi. Marquer un message est personnel et ne peut être vu par les autres utilisateurs.",
|
||||
"mobile.flagged_posts.empty_title": "Aucun message marqué d'un indicateur",
|
||||
"mobile.help.title": "Aide",
|
||||
@@ -260,7 +277,8 @@
|
||||
"mobile.intro_messages.default_message": "Il s'agit du premier canal que les utilisateurs voient lorsqu'ils s'inscrivent. Utilisez‑le pour poster des informations que tout le monde devrait connaître.",
|
||||
"mobile.intro_messages.default_welcome": "Bienvenue {name} !",
|
||||
"mobile.intro_messages.DM": "Vous êtes au début de votre historique de messages avec {teammate}. Les messages personnels et les fichiers partagés ici ne sont pas visibles par les autres utilisateurs.",
|
||||
"mobile.ios.photos_permission_denied_description": "Pour sauvegarder des photos et des vidéos dans votre bibliothèque, veuillez modifier vos paramètres d'autorisation.",
|
||||
"mobile.ios.photos_permission_denied_description": "Utile pour envoyer des photos ou vidéos à votre instance Mattermost ou les sauvegarder sur votre appareil. Ouvrez les paramètres de votre appareil et accordez à Mattermost les accès de lecture et d'écriture à votre bibliothèque de photos et vidéos.",
|
||||
"mobile.ios.photos_permission_denied_title": "{applicationName} aimerait accéder à vos photos",
|
||||
"mobile.join_channel.error": "Impossible de joindre le canal {displayName}. Veuillez vérifier votre connexion et essayer à nouveau.",
|
||||
"mobile.loading_channels": "Chargement des canaux...",
|
||||
"mobile.loading_members": "Chargement des membres...",
|
||||
@@ -271,13 +289,17 @@
|
||||
"mobile.managed.blocked_by": "Bloqué par {vendor}",
|
||||
"mobile.managed.exit": "Quitter",
|
||||
"mobile.managed.jailbreak": "Les dispositifs jailbreakés ne sont pas approuvés par {vendor}, veuillez quitter l'application.",
|
||||
"mobile.managed.not_secured.android": "Cet appareil doit être sécurisé avec un verrouillage d'écran pour pouvoir utiliser Mattermost.",
|
||||
"mobile.managed.not_secured.ios": "Cet appareil doit être sécurisé avec un code pour pouvoir utiliser Mattermost.\n\nAllez dans Réglages > Face ID et code.",
|
||||
"mobile.managed.not_secured.ios.touchId": "Cet appareil doit être sécurisé avec un code pour pouvoir utiliser Mattermost.\n\nAllez dans Réglages > Touch ID et code.",
|
||||
"mobile.managed.secured_by": "Sécurisé par {vendor}",
|
||||
"mobile.managed.settings": "Aller dans les paramètres",
|
||||
"mobile.markdown.code.copy_code": "Copier le code",
|
||||
"mobile.markdown.code.plusMoreLines": "+{count, number} other {count, plural, one {ligne} other {lignes}}",
|
||||
"mobile.markdown.image.too_large": "L'image dépasse les dimensions maximales de {maxWidth} par {maxHeight} :",
|
||||
"mobile.markdown.link.copy_url": "Copier l'URL",
|
||||
"mobile.mention.copy_mention": "Copier la mention",
|
||||
"mobile.message_length.message": "Votre message courant est trop long. Nombre actuel de caractères : {max}/{count}",
|
||||
"mobile.message_length.message": "Votre message courant est trop long. Nombre actuel de caractères : {count}/{max}",
|
||||
"mobile.message_length.title": "Longueur de message",
|
||||
"mobile.more_dms.add_more": "Vous pouvez encore ajouter {remaining, number} utilisateurs",
|
||||
"mobile.more_dms.cannot_add_more": "Vous ne pouvez plus ajouter d'utilisateurs",
|
||||
@@ -323,7 +345,7 @@
|
||||
"mobile.notification_settings.modal_cancel": "ANNULER",
|
||||
"mobile.notification_settings.modal_save": "ENREGISTRER",
|
||||
"mobile.notification_settings.ooo_auto_responder": "Réponses automatiques aux messages personnels",
|
||||
"mobile.notification_settings.save_failed_description": "Les paramètres de notification n'ont pas pu être enregistrés à cause d'un problème de connexion, merci d'essayer à nouveau.",
|
||||
"mobile.notification_settings.save_failed_description": "Les paramètres de notification n'ont pas pu être enregistrés à cause d'un problème de connexion, veuillez réessayer.",
|
||||
"mobile.notification_settings.save_failed_title": "Erreur de connexion",
|
||||
"mobile.notification.in": " dans ",
|
||||
"mobile.offlineIndicator.connected": "Connecté",
|
||||
@@ -332,20 +354,28 @@
|
||||
"mobile.open_dm.error": "Impossible d'ouvrir un message personnel avec {displayName}. Veuillez vérifier votre connexion et essayer à nouveau.",
|
||||
"mobile.open_gm.error": "Impossible d'ouvrir un message de groupe avec ces utilisateurs. Veuillez vérifier votre connexion et essayer à nouveau.",
|
||||
"mobile.open_unknown_channel.error": "Impossible de rejoindre le canal. Veuillez réinitialiser le cache et réessayer.",
|
||||
"mobile.permission_denied_dismiss": "Ne pas autoriser",
|
||||
"mobile.permission_denied_retry": "Paramètres",
|
||||
"mobile.photo_library_permission_denied_description": "Pour enregistrer des photos et des vidéos dans votre bibliothèque, veuillez modifier vos paramètres de permissions.",
|
||||
"mobile.photo_library_permission_denied_title": "{applicationName} aimerait accéder à votre bibliothèque de photos",
|
||||
"mobile.pinned_posts.empty_description": "Épingle des éléments importants en maintenant appuyé sur un message, puis en sélectionnant « Épingler au canal ».",
|
||||
"mobile.pinned_posts.empty_title": "Aucun message épinglé",
|
||||
"mobile.post_info.add_reaction": "Ajouter une réaction",
|
||||
"mobile.post_info.copy_text": "Copier le texte",
|
||||
"mobile.post_info.flag": "Marquer avec un indicateur",
|
||||
"mobile.post_info.mark_unread": "Marquer comme non lu",
|
||||
"mobile.post_info.pin": "Épingler au canal",
|
||||
"mobile.post_info.reply": "Répondre",
|
||||
"mobile.post_info.unflag": "Supprimer l'indicateur",
|
||||
"mobile.post_info.unpin": "Désépingler du canal",
|
||||
"mobile.post_pre_header.flagged": "Marqué d'un indicateur",
|
||||
"mobile.post_pre_header.pinned": "Épinglé",
|
||||
"mobile.post_pre_header.pinned_flagged": "Épinglé et marqué d'un indicateur",
|
||||
"mobile.post_textbox.empty.message": "Vous êtes en train d'envoyer un message vide.\nVeuillez-vous assurer d'avoir spécifié un message ou d'avoir joint au moins un fichier.",
|
||||
"mobile.post_textbox.empty.ok": "OK",
|
||||
"mobile.post_textbox.empty.title": "Message vide",
|
||||
"mobile.post_textbox.entire_channel.cancel": "Annuler",
|
||||
"mobile.post_textbox.entire_channel.confirm": "Confirmer",
|
||||
"mobile.post_textbox.entire_channel.message": "En utilisant @all ou @channel, vous êtes sur le point d'envoyer des notifications à {totalMembers, number} {totalMembers, plural, one {utilisateur} other {utilisateurs}}. Voulez-vous vraiment continuer ?",
|
||||
"mobile.post_textbox.entire_channel.message.with_timezones": "En utilisant @all ou @channel, vous êtes sur le point d'envoyer des notifications à {totalMembers, number} {totalMembers, plural, one {utilisateur} other {utilisateurs}} dans {timezones, number} {timezones, plural, one {fuseau horaire} other {fuseaux horaires}}. Voulez-vous vraiment continuer ?",
|
||||
"mobile.post_textbox.entire_channel.title": "Confirmez l'envoi de notifications au canal en entier",
|
||||
"mobile.post_textbox.uploadFailedDesc": "Certains fichiers joints n'ont pas pu être envoyés au serveur. Voulez-vous vraiment envoyer votre message ?",
|
||||
"mobile.post_textbox.uploadFailedTitle": "Erreur de pièces jointes",
|
||||
"mobile.post.cancel": "Annuler",
|
||||
@@ -356,6 +386,11 @@
|
||||
"mobile.post.failed_title": "Impossible d'envoyer votre message",
|
||||
"mobile.post.retry": "Rafraîchir",
|
||||
"mobile.posts_view.moreMsg": "Plus de nouveaux messages au-dessus",
|
||||
"mobile.privacy_link": "Politique de respect de la vie privée",
|
||||
"mobile.push_notification_reply.button": "Envoyer",
|
||||
"mobile.push_notification_reply.placeholder": "Écrire une réponse...",
|
||||
"mobile.push_notification_reply.title": "Répondre",
|
||||
"mobile.reaction_header.all_emojis": "Toutes",
|
||||
"mobile.recent_mentions.empty_description": "Les messages qui contiennent votre nom d'utilisateur et d'autres mots qui déclenchent des mentions apparaissent ici.",
|
||||
"mobile.recent_mentions.empty_title": "Aucune mention récente",
|
||||
"mobile.rename_channel.display_name_maxLength": "Ce champ doit faire moins de {maxLength, number} caractères",
|
||||
@@ -378,6 +413,8 @@
|
||||
"mobile.routes.channelInfo.createdBy": "Créé par {creator} le ",
|
||||
"mobile.routes.channelInfo.delete_channel": "Archiver le canal",
|
||||
"mobile.routes.channelInfo.favorite": "Favoris",
|
||||
"mobile.routes.channelInfo.groupManaged": "Les membres sont gérés par groupes liés.",
|
||||
"mobile.routes.channelInfo.unarchive_channel": "Archiver le canal",
|
||||
"mobile.routes.code": "Code {language}",
|
||||
"mobile.routes.code.noLanguage": "Code",
|
||||
"mobile.routes.edit_profile": "Éditer le profil",
|
||||
@@ -393,6 +430,7 @@
|
||||
"mobile.routes.thread": "Fil de discussion de {channelName}",
|
||||
"mobile.routes.thread_dm": "Fil de discussion de messages personnels",
|
||||
"mobile.routes.user_profile": "Profil",
|
||||
"mobile.routes.user_profile.edit": "Modifier",
|
||||
"mobile.routes.user_profile.local_time": "HEURE LOCALE",
|
||||
"mobile.routes.user_profile.send_message": "Envoyer un message",
|
||||
"mobile.search.after_modifier_description": "pour trouver des messages publiés après une date spécifique",
|
||||
@@ -405,13 +443,20 @@
|
||||
"mobile.search.no_results": "Aucun résultat trouvé",
|
||||
"mobile.search.on_modifier_description": "pour trouver des messages publiés à une date spécifique",
|
||||
"mobile.search.recent_title": "Recherches récentes",
|
||||
"mobile.select_team.guest_cant_join_team": "Votre compte d'utilisateur invité n'a pas d'équipe ou de canal assigné. Veuillez contacter un administrateur.",
|
||||
"mobile.select_team.join_open": "Les autres équipes que vous pouvez rejoindre.",
|
||||
"mobile.select_team.no_teams": "Il n'y a aucune équipe disponible que vous pouvez rejoindre.",
|
||||
"mobile.server_link.error.text": "Le lien n'a pas pu être trouvé sur ce serveur.",
|
||||
"mobile.server_link.error.title": "Erreur de lien",
|
||||
"mobile.server_link.unreachable_channel.error": "Ce lien correspond à un canal supprimé ou appartenant à un canal auquel vous n'avez pas accès.",
|
||||
"mobile.server_link.unreachable_team.error": "Ce lien correspond à une équipe supprimée ou appartenant à une équipe à laquelle vous n'avez pas accès.",
|
||||
"mobile.server_ssl.error.text": "The certificate from {host} is not trusted.\n\nPlease contact your System Administrator to resolve the certificate issues and allow connections to this server.",
|
||||
"mobile.server_ssl.error.title": "Untrusted Certificate",
|
||||
"mobile.server_upgrade.button": "OK",
|
||||
"mobile.server_upgrade.description": "\nUne mise à jour du serveur est requise pour utiliser l'application Mattermost. Veuillez demander à votre administrateur système pour plus de détails.\n",
|
||||
"mobile.server_upgrade.description": "\nUne mise à jour du serveur est requise pour utiliser l'application Mattermost. Veuillez demander à votre administrateur système pour en savoir plus.\n",
|
||||
"mobile.server_upgrade.title": "Mise à jour du serveur requise",
|
||||
"mobile.server_url.invalid_format": "L'URL doit commencer par http:// ou https://",
|
||||
"mobile.session_expired": "La session a expiré. Veuillez vous connecter pour continuer à recevoir les notifications.",
|
||||
"mobile.session_expired": "La session a expiré : Veuillez vous connecter pour continuer à recevoir des notifications. Les sessions pour {siteName} sont configurées pour expirer tous les {daysCount, number} {daysCount, plural, one {jour} other {jours}}.",
|
||||
"mobile.set_status.away": "Absent",
|
||||
"mobile.set_status.dnd": "Ne pas déranger",
|
||||
"mobile.set_status.offline": "Hors ligne",
|
||||
@@ -422,22 +467,36 @@
|
||||
"mobile.share_extension.error_message": "Une erreur s'est produite lors de l'utilisation de l'extension de partage.",
|
||||
"mobile.share_extension.error_title": "Erreur d'extension",
|
||||
"mobile.share_extension.team": "Équipe",
|
||||
"mobile.share_extension.too_long_message": "Nombre de caractères : {count}/{max}",
|
||||
"mobile.share_extension.too_long_title": "Le message est trop long",
|
||||
"mobile.sidebar_settings.permanent": "Barre latérale permanente",
|
||||
"mobile.sidebar_settings.permanent_description": "Conserver la barre latérale ouverte en permanence",
|
||||
"mobile.storage_permission_denied_description": "Utile pour envoyer des fichiers à votre instance Mattermost. Ouvrez les paramètres de votre appareil et accordez à Mattermost les accès de lecture et d'écriture aux fichiers.",
|
||||
"mobile.storage_permission_denied_title": "{applicationName} aimerait accéder à vos fichiers",
|
||||
"mobile.suggestion.members": "Membres",
|
||||
"mobile.system_message.channel_archived_message": "{username} a archivé le canal",
|
||||
"mobile.system_message.channel_unarchived_message": "{username} a archivé le canal",
|
||||
"mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} à modifié le nom d'affichage du canal de : {oldDisplayName} en : {newDisplayName}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.removed": "{username} a supprimé l'entête du canal (précédemment : {oldHeader})",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username} a mis à jour l'entête du canal de : {oldHeader} en : {newHeader}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} a mis à jour l'entête du canal en : {newHeader}",
|
||||
"mobile.system_message.update_channel_purpose_message.removed": "{username} a supprimé la description du canal (précédemment: {oldPurpose})",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_from": "{username} a mis à jour la description du canal de : {oldPurpose} en : {newPurpose}",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_to": "{username} a mis à jour la description du canal en : {newPurpose}",
|
||||
"mobile.terms_of_service.alert_cancel": "Annuler",
|
||||
"mobile.terms_of_service.alert_ok": "OK",
|
||||
"mobile.terms_of_service.alert_retry": "Réessayer",
|
||||
"mobile.terms_of_service.get_terms_error_description": "Assurez-vous d'avoir une connexion internet active et réessayez. Si ce problème persiste, contactez votre administrateur système.",
|
||||
"mobile.terms_of_service.get_terms_error_title": "Impossible de charger les conditions d'utilisation.",
|
||||
"mobile.terms_of_service.terms_rejected": "Vous devez accepter les conditions d'utilisation avant de pouvoir accéder à {siteName}. Veuillez contacter votre administrateur système pour plus d'informations.",
|
||||
"mobile.terms_of_service.terms_rejected": "Vous devez accepter les conditions d'utilisation avant de pouvoir accéder à {siteName}. Veuillez contacter votre administrateur système pour en savoir plus..",
|
||||
"mobile.timezone_settings.automatically": "Définir automatiquement",
|
||||
"mobile.timezone_settings.manual": "Changer le fuseau horaire",
|
||||
"mobile.timezone_settings.select": "Sélectionner un fuseau horaire",
|
||||
"mobile.tos_link": "Conditions d'utilisation",
|
||||
"mobile.user_list.deactivated": "Désactivé",
|
||||
"mobile.user.settings.notifications.email.fifteenMinutes": "Toutes les 15 minutes",
|
||||
"mobile.video_playback.failed_description": "Une erreur s'est produite lors de la tentative de lecture de la vidéo.\n",
|
||||
"mobile.video_playback.failed_title": "La lecture de la vidéo a échoué",
|
||||
"mobile.video.save_error_message": "Pour enregistrer la vidéo, vous devez d'abord la télécharger.",
|
||||
"mobile.video.save_error_title": "Erreur lors de la sauvegarde de la vidéo",
|
||||
"mobile.video.save_error_title": "Erreur lors de l'enregistrement de la vidéo",
|
||||
"mobile.youtube_playback_error.description": "Une erreur s'est produite lors de la lecture de la vidéo YouTube.\nDétails : {details}",
|
||||
"mobile.youtube_playback_error.title": "Erreur de lecture YouTube",
|
||||
"modal.manual_status.auto_responder.message_": "Voulez-vous changer votre statut sur « {status} » et désactiver les Réponses Automatiques ?",
|
||||
@@ -445,11 +504,17 @@
|
||||
"modal.manual_status.auto_responder.message_dnd": "Voulez-vous changer votre statut sur « Ne pas déranger » et désactiver les Réponses Automatiques ?",
|
||||
"modal.manual_status.auto_responder.message_offline": "Voulez-vous changer votre statut sur « Hors ligne » et désactiver les Réponses Automatiques ?",
|
||||
"modal.manual_status.auto_responder.message_online": "Voulez-vous changer votre statut sur « En ligne » et désactiver les Réponses Automatiques ?",
|
||||
"more_channels.archivedChannels": "Canaux archivés",
|
||||
"more_channels.dropdownTitle": "Afficher",
|
||||
"more_channels.noMore": "Il n'y a plus d'autre canal que vous pouvez rejoindre",
|
||||
"more_channels.publicChannels": "Canaux publics",
|
||||
"more_channels.showArchivedChannels": "Afficher : Canaux archivés",
|
||||
"more_channels.showPublicChannels": "Afficher : Canaux publics",
|
||||
"more_channels.title": "Plus de canaux",
|
||||
"msg_typing.areTyping": "{users} et {last} sont en train d'écrire...",
|
||||
"msg_typing.isTyping": "{user} est en train d'écrire...",
|
||||
"navbar_dropdown.logout": "Se déconnecter",
|
||||
"navbar.channel_drawer.button": "Canaux et équipes",
|
||||
"navbar.channel_drawer.hint": "Ouvre le menu de canaux et d'équipes",
|
||||
"navbar.leave": "Quitter le canal",
|
||||
"password_form.title": "Réinitialisation du mot de passe",
|
||||
"password_send.checkInbox": "Veuillez vérifier votre boîte de réception.",
|
||||
@@ -458,25 +523,26 @@
|
||||
"password_send.link": "Si le compte existe, un e-mail de redéfinition de mot de passe sera envoyé à :",
|
||||
"password_send.reset": "Réinitialiser mon mot de passe",
|
||||
"permalink.error.access": "Ce lien correspond à un message supprimé ou appartenant à un canal auquel vous n'avez pas accès.",
|
||||
"permalink.error.link_not_found": "Lien introuvable",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "n'a pas été notifié par cette mention. L'utilisateur n'est pas dans le canal et ne peut pas être ajouté à ce canal, car il ne fait pas partie des groupes liés. Pour l'ajouter à ce canal, l'utilisateur doit être ajouté aux groupes liés.",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": " et ",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "ajouter à ce canal privé",
|
||||
"post_body.check_for_out_of_channel_mentions.link.public": "ajouter à ce canal",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? Ils auront alors accès à tout l'historique de messages pour ce canal.",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "ont été mentionnés, mais ne sont pas dans le canal. Voulez-vous ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "a été mentionné, mais n'est pas dans le canal. Voulez-vous ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "n'a pas été notifié par cette mention, car l'utilisateur n'est pas dans le canal. Voulez-vous ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "n'ont pas été notifiés par cette mention, car ces utilisateurs ne sont pas dans le canal. Voulez-vous ",
|
||||
"post_body.commentedOn": "a commenté le message de {name} : ",
|
||||
"post_body.deleted": "(message supprimé)",
|
||||
"post_info.auto_responder": "RÉPONSE AUTOMATIQUE",
|
||||
"post_info.bot": "BOT",
|
||||
"post_info.del": "Supprimer",
|
||||
"post_info.edit": "Éditer",
|
||||
"post_info.guest": "INVITÉ",
|
||||
"post_info.message.show_less": "Afficher moins",
|
||||
"post_info.message.show_more": "Afficher plus",
|
||||
"post_info.system": "Système",
|
||||
"post_message_view.edited": "(édité)",
|
||||
"posts_view.newMsg": "Nouveaux messages",
|
||||
"rename_channel.handleHolder": "caractères alphanumériques minuscules",
|
||||
"rename_channel.url": "URL",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "Une partie de ce fil de discussion a été supprimée à cause d'une politique de rétention de données. Vous ne pouvez plus répondre à ce fil.",
|
||||
"search_bar.search": "Rechercher",
|
||||
"search_header.results": "Résultats de la recherche",
|
||||
@@ -498,28 +564,30 @@
|
||||
"status_dropdown.set_offline": "Hors ligne",
|
||||
"status_dropdown.set_online": "En ligne",
|
||||
"status_dropdown.set_ooo": "Absent du bureau",
|
||||
"suggestion.mention.all": "ATTENTION : Ceci mentionne tout le monde dans le canal",
|
||||
"suggestion.mention.channel": "Notifier tout le monde dans le canal",
|
||||
"suggestion.mention.all": "Envoie une notification à tous les membres de ce canal",
|
||||
"suggestion.mention.channel": "Envoie une notification à tous les membres de ce canal",
|
||||
"suggestion.mention.channels": "Mes canaux",
|
||||
"suggestion.mention.here": "Notifier toutes les personnes connectées dans ce canal",
|
||||
"suggestion.mention.here": "Envoie une notification à tous les membres considérés comme en ligne de ce canal",
|
||||
"suggestion.mention.members": "Membres du canal",
|
||||
"suggestion.mention.morechannels": "Autres canaux",
|
||||
"suggestion.mention.nonmembers": "Pas dans le canal",
|
||||
"suggestion.mention.special": "Mentions spéciales",
|
||||
"suggestion.mention.you": "(vous)",
|
||||
"suggestion.search.direct": "Messages personnels",
|
||||
"suggestion.search.private": "Canaux privés",
|
||||
"suggestion.search.public": "Canaux publics",
|
||||
"terms_of_service.agreeButton": "Je suis d'accord",
|
||||
"terms_of_service.api_error": "Impossible de terminer la requête. Si ce problème persiste, contactez votre administrateur système.",
|
||||
"user.settings.display.clockDisplay": "Affichage de l'horloge",
|
||||
"user.settings.display.custom_theme": "Thème personnalisé",
|
||||
"user.settings.display.militaryClock": "Horloge 24 heures (ex. : 16:00)",
|
||||
"user.settings.display.normalClock": "Horloge 12 heures (ex. : 4:00 PM)",
|
||||
"user.settings.display.preferTime": "Choisissez la façon dont vous préférez voir les heures affichées dans l'application.",
|
||||
"user.settings.general.email": "E-mail",
|
||||
"user.settings.general.emailCantUpdate": "L'adresse e-mail ne peut être mise à jour qu'en utilisant un navigateur web ou l'application de bureau.",
|
||||
"user.settings.general.emailGitlabCantUpdate": "La connexion s'effectue par Gitlab. L'adresse e-mail ne peut pas être mise à jour. L'adresse e-mail utilisée pour les notifications par e-mail est {email}.",
|
||||
"user.settings.general.emailGoogleCantUpdate": "La connexion s'effectue par Gitlab. L'adresse e-mail ne peut pas être mise à jour. L'adresse e-mail utilisée pour les notifications par e-mail est {email} .",
|
||||
"user.settings.general.emailHelp2": "L'envoi d'e-mails a été désactivé par votre administrateur système. Aucun e-mail de notification ne peut être envoyé.",
|
||||
"user.settings.general.emailGoogleCantUpdate": "La connexion s'effectue par Google. L'adresse e-mail ne peut pas être mise à jour. L'adresse e-mail utilisée pour les notifications par e-mail est {email} .",
|
||||
"user.settings.general.emailHelp2": "L'envoi d'e-mails a été désactivé par votre administrateur système. Aucune notification par e-mail ne peut être envoyée.",
|
||||
"user.settings.general.emailLdapCantUpdate": "La connexion s'effectue par AD/LDAP. L'adresse e-mail ne peut pas être mise à jour. L'adresse e-mail utilisée pour les notifications par e-mail est {email}.",
|
||||
"user.settings.general.emailOffice365CantUpdate": "La connexion s'effectue par Office 365. L'adresse e-mail ne peut pas être mise à jour. L'adresse e-mail utilisée pour les notifications par e-mail est {email} .",
|
||||
"user.settings.general.emailSamlCantUpdate": "La connexion s'effectue via SAML. L'adresse e-mail ne peut pas être mise à jour. L'adresse e-mail utilisée pour les notifications par e-mail est {email}.",
|
||||
@@ -538,7 +606,7 @@
|
||||
"user.settings.notifications.email.immediately": "Immédiatement",
|
||||
"user.settings.notifications.email.never": "Jamais",
|
||||
"user.settings.notifications.email.send": "Envoyer des notifications de bureau",
|
||||
"user.settings.notifications.emailInfo": "Les e-mails de notification sont envoyés pour les mentions et les messages personnels reçus après que vous soyez passé hors-ligne ou absent de {siteName} pendant plus de 5 minutes.",
|
||||
"user.settings.notifications.emailInfo": "Les notifications par e-mail sont envoyées pour les mentions et les messages personnels reçus lorsque vous êtes hors-ligne ou absent pour plus de 5 minutes.",
|
||||
"user.settings.notifications.never": "Jamais",
|
||||
"user.settings.notifications.onlyMentions": "Seulement pour les mentions et messages personnels",
|
||||
"user.settings.push_notification.away": "Absent ou hors ligne",
|
||||
@@ -547,4 +615,4 @@
|
||||
"user.settings.push_notification.offline": "Hors ligne",
|
||||
"user.settings.push_notification.online": "En ligne, absent(e) ou hors ligne",
|
||||
"web.root.signup_info": "Toute la communication de votre équipe au même endroit, accessible de partout"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
"about.hashee": "Hash di compilazione EE:",
|
||||
"about.teamEditionLearn": "Entra nella comunità Mattermost su ",
|
||||
"about.teamEditionSt": "Tutte le tue comunicazioni in un posto, istantaneamente ricercabili e accessibili ovunque.",
|
||||
"about.teamEditiont0": "Edizione Gruppo",
|
||||
"about.teamEditiont0": "Edizione Squadra",
|
||||
"about.teamEditiont1": "Edizione Enterprise",
|
||||
"about.title": "Informazioni su Mattermost",
|
||||
"about.title": "Informazioni su {appTitle}",
|
||||
"announcment_banner.dont_show_again": "Non visualizzare di nuovo",
|
||||
"api.channel.add_member.added": "{addedUsername} aggiunto al canale da {username}.",
|
||||
"archivedChannelMessage": "Stai visualizzato un **canale archiviato**. Non si possono pubblicare nuovi messaggi.",
|
||||
@@ -35,72 +35,75 @@
|
||||
"channel_modal.purposeEx": "Es.: \"Un canale per segnalare bug e miglioramenti\"",
|
||||
"channel_notifications.ignoreChannelMentions.settings": "Ignora @channel, @here, @all",
|
||||
"channel_notifications.muteChannel.settings": "Silenzia canale",
|
||||
"channel.channelHasGuests": "Questo canale ha degli ospiti",
|
||||
"channel.hasGuests": "Questo messaggio di gruppo ha degli ospiti",
|
||||
"channel.isGuest": "Questa persona è un ospite",
|
||||
"combined_system_message.added_to_channel.many_expanded": "{users} e {lastUser} sono stati **aggiunti al canale** da {actor}.",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser} **aggiunto al canale** da {actor}.",
|
||||
"combined_system_message.added_to_channel.one_you": "Se stato **aggiunto al canale** da {actor}.",
|
||||
"combined_system_message.added_to_channel.two": "{firstUser} e {secondUser} **aggiunti al canale** da {actor}.",
|
||||
"combined_system_message.added_to_team.many_expanded": "{users} e {lastUser} sono stati **aggiunti al gruppo** da {actor}.",
|
||||
"combined_system_message.added_to_team.one": "{firstUser} **aggiunto al gruppo** da {actor}.",
|
||||
"combined_system_message.added_to_team.one_you": "Sei stato **aggiunto al gruppo** da {actor}.",
|
||||
"combined_system_message.added_to_team.two": "{firstUser} e {secondUser} **aggiunti al gruppo** da {actor}.",
|
||||
"combined_system_message.added_to_team.many_expanded": "{users} e {lastUser} sono stati **aggiunti alla squadra** da {actor}.",
|
||||
"combined_system_message.added_to_team.one": "{firstUser} **aggiunto alla squadra** da {actor}.",
|
||||
"combined_system_message.added_to_team.one_you": "Sei stato **aggiunto alla squadra** da {actor}.",
|
||||
"combined_system_message.added_to_team.two": "{firstUser} e {secondUser} **aggiunti alla squadra** da {actor}.",
|
||||
"combined_system_message.joined_channel.many_expanded": "{users} e {lastUser} **aggiunti al canale**.",
|
||||
"combined_system_message.joined_channel.one": "{firstUser} **aggiunto al canale**.",
|
||||
"combined_system_message.joined_channel.one_you": "**si è unito al canale**.",
|
||||
"combined_system_message.joined_channel.one_you": "**Ti sei è unito al canale**.",
|
||||
"combined_system_message.joined_channel.two": "{firstUser} e {secondUser} **aggiunto al canale**.",
|
||||
"combined_system_message.joined_team.many_expanded": "{users} e {lastUser} **aggiunti al gruppo**.",
|
||||
"combined_system_message.joined_team.one": "{firstUser} **aggiunto al gruppo**.",
|
||||
"combined_system_message.joined_team.one_you": "**si è unito al gruppo**.",
|
||||
"combined_system_message.joined_team.two": "{firstUser} e {secondUser} **aggiunto al gruppo**.",
|
||||
"combined_system_message.joined_team.many_expanded": "{users} e {lastUser} **aggiunti alla squadra**.",
|
||||
"combined_system_message.joined_team.one": "{firstUser} **aggiunto alla squadra**.",
|
||||
"combined_system_message.joined_team.one_you": "**Ti sei è unito alla squadra**.",
|
||||
"combined_system_message.joined_team.two": "{firstUser} e {secondUser} **aggiunto alla squadra**.",
|
||||
"combined_system_message.left_channel.many_expanded": "{users} e {lastUser} hanno **abbandonato il canale**.",
|
||||
"combined_system_message.left_channel.one": "{firstUser} ha **abbandonato il canale**.",
|
||||
"combined_system_message.left_channel.one_you": "**ha abbandonato il canale**.",
|
||||
"combined_system_message.left_channel.one_you": "**Hai abbandonato il canale**.",
|
||||
"combined_system_message.left_channel.two": "{firstUser} e {secondUser} hanno **abbandonato il canale**.",
|
||||
"combined_system_message.left_team.many_expanded": "{users} e {lastUser} hanno **abbandonato il canale**.",
|
||||
"combined_system_message.left_team.one": "{firstUser} ha **abbandonato il gruppo**.",
|
||||
"combined_system_message.left_team.one_you": "**ha abbandonato il gruppo**.",
|
||||
"combined_system_message.left_team.two": "{firstUser} e {secondUser} hanno **abbandonato il gruppo**.",
|
||||
"combined_system_message.left_team.many_expanded": "{users} e {lastUser} hanno **abbandonato la squadra**.",
|
||||
"combined_system_message.left_team.one": "{firstUser} ha **abbandonato la squadra**.",
|
||||
"combined_system_message.left_team.one_you": "**Hai abbandonato la squadra**.",
|
||||
"combined_system_message.left_team.two": "{firstUser} e {secondUser} hanno **abbandonato la squadra**.",
|
||||
"combined_system_message.removed_from_channel.many_expanded": "{users} e {lastUser} sono stati **rimossi dal canale**.",
|
||||
"combined_system_message.removed_from_channel.one": "{firstUser} è stato **rimosso dal canale**.",
|
||||
"combined_system_message.removed_from_channel.one_you": "Sei stato **rimosso dal canale**.",
|
||||
"combined_system_message.removed_from_channel.two": "{firstUser} e {secondUser} sono stato **rimossi dal canale**.",
|
||||
"combined_system_message.removed_from_team.many_expanded": "{users} e {lastUser} sono stati **rimossi dal gruppo**.",
|
||||
"combined_system_message.removed_from_team.one": "{firstUser} è stato **rimosso dal gruppo**.",
|
||||
"combined_system_message.removed_from_team.one_you": "Sei stato **rimosso dal gruppo**.",
|
||||
"combined_system_message.removed_from_team.two": "{firstUser} e {secondUser} sono stati **rimossi dal gruppo**.",
|
||||
"combined_system_message.removed_from_team.many_expanded": "{users} e {lastUser} sono stati **rimossi dalla squadra**.",
|
||||
"combined_system_message.removed_from_team.one": "{firstUser} è stato **rimosso dalla squadra**.",
|
||||
"combined_system_message.removed_from_team.one_you": "Sei stato **rimosso dalla squadra**.",
|
||||
"combined_system_message.removed_from_team.two": "{firstUser} e {secondUser} sono stati **rimossi dalla squadra**.",
|
||||
"combined_system_message.you": "Tu",
|
||||
"create_comment.addComment": "Aggiungi un commento...",
|
||||
"create_post.deactivated": "Stai visualizzando un canale archiviato con un utente disattivato.",
|
||||
"create_post.write": "Write to {channelDisplayName}",
|
||||
"create_post.write": "Scrivi a {channelDisplayName}",
|
||||
"date_separator.today": "Oggi",
|
||||
"date_separator.yesterday": "Ieri",
|
||||
"edit_post.editPost": "Modifica post...",
|
||||
"edit_post.save": "Salva",
|
||||
"error.team_not_found.title": "Gruppo Non Trovato",
|
||||
"file_attachment.download": "Scarica",
|
||||
"file_upload.fileAbove": "File sopra i {max}MB non possono essere caricati: {filename}",
|
||||
"get_post_link_modal.title": "Copia permalink",
|
||||
"get_post_link_modal.title": "Copia collegamento",
|
||||
"integrations.add": "Aggiungi",
|
||||
"intro_messages.anyMember": " Tutti i membri possono entrare e leggere questo canale.",
|
||||
"intro_messages.beginning": "Inizio di {name}",
|
||||
"intro_messages.channel": "canale",
|
||||
"intro_messages.creator": "Questo è l'inizio di {name} {type}, creato il {date} da {creator}.",
|
||||
"intro_messages.group": "canale privato",
|
||||
"intro_messages.creator": "Questo è l'inizio di {name}, creato da {creator} il {date}.",
|
||||
"intro_messages.creatorPrivate": "Questo è l'inizio della chat privata {name}, creato da {creator} il {date}.",
|
||||
"intro_messages.group_message": "Questo è l'inizio della tua conversazione privata con questi colleghi. Messaggi privati e file condivisi qui non sono accessibili ad altre persone.",
|
||||
"intro_messages.noCreator": "Questo è l'inizio di {name} {type}, creato il {date}.",
|
||||
"intro_messages.noCreator": "Questo è l'inizio di della chat {name}, creata il {date}.",
|
||||
"intro_messages.onlyInvited": " Invita solo i membri che possono vedere questo canale privato.",
|
||||
"last_users_message.added_to_channel.type": "sono stati **aggiunti al canale** da {actor}.",
|
||||
"last_users_message.added_to_team.type": "sono stati **aggiunti al canale** da {actor}.",
|
||||
"last_users_message.added_to_team.type": "sono stati **aggiunti alla squadra** da {actor}.",
|
||||
"last_users_message.first": "{firstUser} e ",
|
||||
"last_users_message.joined_channel.type": "**si è unito al canale**.",
|
||||
"last_users_message.joined_team.type": "**si è unito al gruppo**.",
|
||||
"last_users_message.joined_team.type": "**si è unito alla squadra**.",
|
||||
"last_users_message.left_channel.type": "**ha abbandonato il canale**.",
|
||||
"last_users_message.left_team.type": "**ha abbandonato il gruppo**.",
|
||||
"last_users_message.left_team.type": "**ha abbandonato la squadra**.",
|
||||
"last_users_message.others": "{numOthers} altri ",
|
||||
"last_users_message.removed_from_channel.type": "sono stati **rimossi dal canale**.",
|
||||
"last_users_message.removed_from_team.type": "sono stati **rimossi dal gruppo**.",
|
||||
"last_users_message.removed_from_team.type": "sono stati **rimossi dalla squadra**.",
|
||||
"login_mfa.enterToken": "Per completare il processo di accesso, inserisci un token di autenticatore dal tuo smartphone",
|
||||
"login_mfa.token": "Token MFA",
|
||||
"login_mfa.tokenReq": "Inserisci token MFA",
|
||||
"login.email": "Email",
|
||||
"login.forgot": "Password dimenticata",
|
||||
"login.forgot": "Password dimenticata.",
|
||||
"login.invalidPassword": "La password è errata.",
|
||||
"login.ldapUsername": "Nome dell'utente AD/LDAP",
|
||||
"login.ldapUsernameLower": "Nome utente AD/LDAP",
|
||||
@@ -128,7 +131,6 @@
|
||||
"mobile.account_notifications.threads_mentions": "Citazioni nelle discussioni",
|
||||
"mobile.account_notifications.threads_start": "Discussioni avviate da me",
|
||||
"mobile.account_notifications.threads_start_participate": "Discussioni alle quali ho partecipato",
|
||||
"mobile.account.settings.cancel": "Annulla",
|
||||
"mobile.account.settings.save": "Salva",
|
||||
"mobile.action_menu.select": "Seleziona un'opzione",
|
||||
"mobile.advanced_settings.clockDisplay": "Visualizza orologio",
|
||||
@@ -137,36 +139,44 @@
|
||||
"mobile.advanced_settings.delete_title": "Cancella Documenti e Dati",
|
||||
"mobile.advanced_settings.timezone": "Fuso orario",
|
||||
"mobile.advanced_settings.title": "Impostazioni Avanzate",
|
||||
"mobile.android.camera_permission_denied_description": "Per scattare foto e girare video con la videocamera, modificare i permessi nelle impostazioni.",
|
||||
"mobile.android.camera_permission_denied_title": "L'accesso alla videocamera è richiesto",
|
||||
"mobile.android.permission_denied_dismiss": "Annulla",
|
||||
"mobile.android.permission_denied_retry": "Imposta permessi",
|
||||
"mobile.android.photos_permission_denied_description": "Per caricare immagini dalla libreria modificare i permessi nelle impostazioni.",
|
||||
"mobile.android.photos_permission_denied_title": "L'accesso alla libreria delle foto è richiesto",
|
||||
"mobile.android.storage_permission_denied_description": "Per caricare immagini da dispostivi Android, modificare i permessi nelle impostazioni.",
|
||||
"mobile.android.storage_permission_denied_title": "L'accesso alla memoria file è richiesto",
|
||||
"mobile.android.videos_permission_denied_description": "Per caricare video dalla libreria modificare i permessi nelle impostazioni.",
|
||||
"mobile.android.videos_permission_denied_title": "L'accesso alla libreria dei video è richiesto",
|
||||
"mobile.alert_dialog.alertCancel": "Annulla",
|
||||
"mobile.android.photos_permission_denied_description": "Carica immagini in Mattermost o salvale sul tuo dispositivo. Aprire le Impostazioni per consentire a Mattermost di Leggere e Scrivere sulla libreria foto.",
|
||||
"mobile.android.photos_permission_denied_title": "{applicationName} vorrebbe accedere alle tue foto",
|
||||
"mobile.android.videos_permission_denied_description": "Carica video in Mattermost o salvale sul tuo dispositivo. Aprire le Impostazioni per consentire a Mattermost di Leggere e Scrivere sulla libreria video. ",
|
||||
"mobile.android.videos_permission_denied_title": "{applicationName} vorrebbe accedere ai tuoi video",
|
||||
"mobile.announcement_banner.title": "Annuncio",
|
||||
"mobile.authentication_error.message": "Mattermost ha incontrato un errore. Autenticarsi nuovamente per avviare una nuova sessione.",
|
||||
"mobile.authentication_error.title": "Errore di autenticazione",
|
||||
"mobile.calendar.dayNames": "Domenica,Lunedì,Martedì,Mercoledì,Giovedì,Venerdì,Sabato",
|
||||
"mobile.calendar.dayNamesShort": "Dom,Lun,Mar,Mer,Gio,Ven,Sab",
|
||||
"mobile.calendar.monthNames": "Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre",
|
||||
"mobile.calendar.monthNamesShort": "Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Set,Ott,Nov,Dic",
|
||||
"mobile.camera_photo_permission_denied_description": "Scatta foto e caricale in Mattermost o salvale sul tuo dispositivo. Aprire le Impostazioni per consentire a Mattermost di Leggere e Scrivere sulla tua fotocamera. ",
|
||||
"mobile.camera_photo_permission_denied_title": "{applicationName} vorrebbe accedere alla tua fotocamera ",
|
||||
"mobile.camera_video_permission_denied_description": "Registra video e caricali in Mattermost o salvali sul tuo dispositivo. Aprire le Impostazioni per consentire a Mattermost di Leggere e Scrivere sulla tua fotocamera.",
|
||||
"mobile.camera_video_permission_denied_title": "{applicationName} vorrebbe accedere alla tua fotocamera ",
|
||||
"mobile.channel_drawer.search": "Vai a...",
|
||||
"mobile.channel_info.alertMessageConvertChannel": "Se converti {displayName} in un canale privato, la cronologia e le appartenenze saranno preservate. I file condivisi pubblicamente rimarranno accessibili a chiunque possegga il collegamento. L'ingresso in un canale privato è solo su invito. \n\nLa modifica è permanente e non può essere annullata.\n\nSicuro di voler convertire {displayName} in un canale privato?",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Sei sicuro di voler archiviare {term} {name}?",
|
||||
"mobile.channel_info.alertMessageLeaveChannel": "Sei sicuro di voler tralasciare questo {term} {name}?",
|
||||
"mobile.channel_info.alertMessageUnarchiveChannel": "Sei sicuro di voler archiviare {term} {name}?",
|
||||
"mobile.channel_info.alertNo": "No",
|
||||
"mobile.channel_info.alertTitleConvertChannel": "Convertire {displayName} in canale privato?",
|
||||
"mobile.channel_info.alertTitleDeleteChannel": "Archivia {term}",
|
||||
"mobile.channel_info.alertTitleLeaveChannel": "Tralascia {term}",
|
||||
"mobile.channel_info.alertTitleUnarchiveChannel": "Archivia {term}",
|
||||
"mobile.channel_info.alertYes": "Si",
|
||||
"mobile.channel_info.convert": "Converti in Canale Privato",
|
||||
"mobile.channel_info.convert_failed": "Impossibile convertire {displayName} in un canale privato.",
|
||||
"mobile.channel_info.convert_success": "{displayName} adesso è un canale privato.",
|
||||
"mobile.channel_info.copy_header": "Copia Intestazione",
|
||||
"mobile.channel_info.copy_purpose": "Copia Scopo",
|
||||
"mobile.channel_info.delete_failed": "Impossibile archiviare il canale {displayName}. Controlla la connessione e riprova.",
|
||||
"mobile.channel_info.edit": "Modifica Canale",
|
||||
"mobile.channel_info.privateChannel": "Canale privato",
|
||||
"mobile.channel_info.publicChannel": "Canale Pubblico",
|
||||
"mobile.channel_info.unarchive_failed": "Impossibile archiviare il canale {displayName}. Controlla la connessione e riprova.",
|
||||
"mobile.channel_list.alertNo": "No",
|
||||
"mobile.channel_list.alertYes": "Si",
|
||||
"mobile.channel_list.archived": "ARCHIVIATO",
|
||||
"mobile.channel_list.channels": "CANALI",
|
||||
"mobile.channel_list.closeDM": "Chudi Messaggio Diretto",
|
||||
"mobile.channel_list.closeGM": "Chiudi Messaggio di Gruppo",
|
||||
@@ -174,7 +184,6 @@
|
||||
"mobile.channel_list.not_member": "NON UN MEMBRO",
|
||||
"mobile.channel_list.unreads": "NON LETTI",
|
||||
"mobile.channel_members.add_members_alert": "Devi selezionare almeno un membro da aggiungere al canale.",
|
||||
"mobile.channel.markAsRead": "Segna Come Letto",
|
||||
"mobile.client_upgrade": "Aggiorna app",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "Una nuova versione è disponibile per il download.",
|
||||
"mobile.client_upgrade.can_upgrade_title": "Aggiornamento disponibile",
|
||||
@@ -204,6 +213,7 @@
|
||||
"mobile.create_channel.public": "Nuovo Canale Pubblico",
|
||||
"mobile.create_post.read_only": "Questo canale è in sola lettura",
|
||||
"mobile.custom_list.no_results": "Nessun risultato",
|
||||
"mobile.display_settings.sidebar": "Barra laterale",
|
||||
"mobile.display_settings.theme": "Tema",
|
||||
"mobile.document_preview.failed_description": "Errore durante l'apertura del documento. Assicurarsi di avere installato il visualizzatore per i file di tipo {fileType} e riprovare.\n",
|
||||
"mobile.document_preview.failed_title": "Apertura Documento fallita",
|
||||
@@ -211,7 +221,6 @@
|
||||
"mobile.downloader.android_failed": "Download non riuscito",
|
||||
"mobile.downloader.android_permission": "Dobbiamo poter accedere alla cartella dei download per salvare i file.",
|
||||
"mobile.downloader.android_started": "Download avviato",
|
||||
"mobile.downloader.android_success": "download completato",
|
||||
"mobile.downloader.complete": "Download completato",
|
||||
"mobile.downloader.disabled_description": "Il download dei file è disattivato su questo server. Contattare l'Amministratore di Sistema per ulteriori informazioni.\n",
|
||||
"mobile.downloader.disabled_title": "Download disattivati",
|
||||
@@ -220,9 +229,10 @@
|
||||
"mobile.downloader.failed_title": "Download non riuscito",
|
||||
"mobile.downloader.image_saved": "Immagine Salvata",
|
||||
"mobile.downloader.video_saved": "Video Salvato",
|
||||
"mobile.drawer.teamsTitle": "Gruppi",
|
||||
"mobile.drawer.teamsTitle": "Squadre",
|
||||
"mobile.edit_channel": "Salva",
|
||||
"mobile.edit_post.title": "Modifica Messaggio",
|
||||
"mobile.edit_profile.remove_profile_photo": "Cancella foto",
|
||||
"mobile.emoji_picker.activity": "ATTIVITA'",
|
||||
"mobile.emoji_picker.custom": "PERSONALIZZATO",
|
||||
"mobile.emoji_picker.flags": "BANDIERE",
|
||||
@@ -241,17 +251,24 @@
|
||||
"mobile.extension.file_limit": "La condivisione è limitata ad un massimo di 5 file.",
|
||||
"mobile.extension.max_file_size": "I file allegati condivisi in Mattermost devono essere più piccoli di {size}.",
|
||||
"mobile.extension.permission": "Mattermost necessità di accedere alla memoria del dispositivo per condividere i file.",
|
||||
"mobile.extension.team_required": "Devi appartenere a una squadra prima di poter condividere dei file.",
|
||||
"mobile.extension.title": "Condividi in Mattermos",
|
||||
"mobile.failed_network_action.description": "Sembra esserci un problema con la tua connessione internet. Assicurati di avere una connessione attiva e riprova.",
|
||||
"mobile.failed_network_action.retry": "Riprova",
|
||||
"mobile.failed_network_action.shortDescription": "Controlla che ci sia una connessione attiva e riprovare.",
|
||||
"mobile.failed_network_action.shortDescription": "Messages will load when you have an internet connection.",
|
||||
"mobile.failed_network_action.teams_channel_description": "Channels could not be loaded for {teamName}.",
|
||||
"mobile.failed_network_action.teams_description": "Teams could not be loaded.",
|
||||
"mobile.failed_network_action.teams_title": "Something went wrong",
|
||||
"mobile.failed_network_action.title": "Nessuna connessione internet",
|
||||
"mobile.file_upload.browse": "Sfoglia File",
|
||||
"mobile.file_upload.camera_photo": "Scatta foto",
|
||||
"mobile.file_upload.camera_video": "Gira video",
|
||||
"mobile.file_upload.library": "Galleria Fotografica",
|
||||
"mobile.file_upload.max_warning": "Numero massimo di file caricabili limitato a 5.",
|
||||
"mobile.file_upload.unsupportedMimeType": "Solo immagini BMP, JPG o PNG possono essere usate come foto profilo.",
|
||||
"mobile.file_upload.video": "Libreria video",
|
||||
"mobile.files_paste.error_description": "Si è verificato un errore incollando i file. Per favore riprova.",
|
||||
"mobile.files_paste.error_dismiss": "Chiudi",
|
||||
"mobile.files_paste.error_title": "Incolla fallito",
|
||||
"mobile.flagged_posts.empty_description": "Contrassegnare i messaggi è uno strumento per seguirli. I contrassegni sono personali e non sono visibili agli altri utenti.",
|
||||
"mobile.flagged_posts.empty_title": "Nessuna pubblicazione contrassegnata",
|
||||
"mobile.help.title": "Aiuto",
|
||||
@@ -260,7 +277,8 @@
|
||||
"mobile.intro_messages.default_message": "Questo è il primo canale che i colleghi vedranno una volta effettuato l'accesso - usalo per comunicare aggiornamenti che chiunque dovrebbe conoscere.",
|
||||
"mobile.intro_messages.default_welcome": "Benvenuto a {name}!",
|
||||
"mobile.intro_messages.DM": "Questo è l'inizio della tua conversazione privata con {teammate}. Messaggi diretti e file condivisi qui non saranno accessibili ad altre persone.",
|
||||
"mobile.ios.photos_permission_denied_description": "Per salvare foto e video nella libreria, modificare i permessi nelle impostazioni.",
|
||||
"mobile.ios.photos_permission_denied_description": "Scatta foto e registra video e caricali in Mattermost o salvali sul tuo dispositivo. Aprire le Impostazioni per consentire a Mattermost di Leggere e Scrivere sulla tua fotocamera. ",
|
||||
"mobile.ios.photos_permission_denied_title": "{applicationName} vorrebbe accedere alla tua fotocamera",
|
||||
"mobile.join_channel.error": "Impossibile aggiungere il canale {displayName}. Controlla la connessione e riprova.",
|
||||
"mobile.loading_channels": "Caricamento Canali...",
|
||||
"mobile.loading_members": "Caricamento Membri...",
|
||||
@@ -271,13 +289,17 @@
|
||||
"mobile.managed.blocked_by": "Bloccati da {vendor}",
|
||||
"mobile.managed.exit": "Esci",
|
||||
"mobile.managed.jailbreak": "Dispositivi con jailbreak considerati non sicuri da {vendor}, per favore uscire dall'app.",
|
||||
"mobile.managed.not_secured.android": "Questo dispositivo deve essere protetto con un blocco schermo per utilizzare Mattermost.",
|
||||
"mobile.managed.not_secured.ios": "Questo dispositivo deve essere protetto da un codice per utilizzare Mattermost.\n\nAndare in Impostazioni > Face ID & Codice.",
|
||||
"mobile.managed.not_secured.ios.touchId": "Questo dispositivo deve essere protetto da un codice per utilizzare Mattermost.\n\nAndare in Impostazioni > Touch ID & Codice.",
|
||||
"mobile.managed.secured_by": "Verificato da {vendor}",
|
||||
"mobile.managed.settings": "Vai alle impostazioni",
|
||||
"mobile.markdown.code.copy_code": "Copia codice",
|
||||
"mobile.markdown.code.plusMoreLines": "+{count, number} oltre {count, plural, one {line} other {lines}}",
|
||||
"mobile.markdown.image.too_large": "L'immagine supera la dimensione massima consentita di {maxWidth}x{maxHeight}:",
|
||||
"mobile.markdown.link.copy_url": "Copia URL",
|
||||
"mobile.mention.copy_mention": "Copia citazione",
|
||||
"mobile.message_length.message": "Il tuo messaggio è troppo lungo. Conteggio caratteri attuale: {max}/{count}",
|
||||
"mobile.message_length.message": "Il tuo messaggio è troppo lungo. Conteggio caratteri attuale: {count}/{max}",
|
||||
"mobile.message_length.title": "Lunghezza Messaggio",
|
||||
"mobile.more_dms.add_more": "Puoi aggiungere ancora {remaining, number} utenti",
|
||||
"mobile.more_dms.cannot_add_more": "Non puoi aggiungere altri utenti",
|
||||
@@ -332,20 +354,28 @@
|
||||
"mobile.open_dm.error": "Impossibile aprire un messaggio diretto con {displayName}. Controlla la connessione e riprova.",
|
||||
"mobile.open_gm.error": "Impossibile aprire un messaggio di gruppo con questi utenti. Controlla la tua connessione e riprova.",
|
||||
"mobile.open_unknown_channel.error": "Impossibile entrare nel canale. Resettare la cache e riprovare.",
|
||||
"mobile.permission_denied_dismiss": "Non consentire",
|
||||
"mobile.permission_denied_retry": "Impostazioni",
|
||||
"mobile.photo_library_permission_denied_description": "Per salvare foto e video nella libreria, modificare i permessi nelle impostazioni.",
|
||||
"mobile.photo_library_permission_denied_title": "{applicationName} vorrebbe accedere alla tua libreria foto",
|
||||
"mobile.pinned_posts.empty_description": "Blocca gli oggetti importanti tenendo cliccato su un messaggio qualsiasi e selezionando \"Blocca al canale\".",
|
||||
"mobile.pinned_posts.empty_title": "Nessuna pubblicazione bloccata",
|
||||
"mobile.post_info.add_reaction": "Aggiungi reazione",
|
||||
"mobile.post_info.copy_text": "Copia Testo",
|
||||
"mobile.post_info.flag": "Contrassegna",
|
||||
"mobile.post_info.mark_unread": "Segna come Non letto",
|
||||
"mobile.post_info.pin": "Blocca al canale",
|
||||
"mobile.post_info.reply": "Rispondi",
|
||||
"mobile.post_info.unflag": "Togli contrassegno",
|
||||
"mobile.post_info.unpin": "Sblocca dal canale",
|
||||
"mobile.post_pre_header.flagged": "Contrassegnato",
|
||||
"mobile.post_pre_header.pinned": "Bloccato",
|
||||
"mobile.post_pre_header.pinned_flagged": "Bloccato e Contrassegnato",
|
||||
"mobile.post_textbox.empty.message": "Stai cercando di inviare un messaggio vuoto.\nAssicurati di aver scritto del testo o di aver allegato almeno un file.",
|
||||
"mobile.post_textbox.empty.ok": "OK",
|
||||
"mobile.post_textbox.empty.title": "Messaggio Vuoto",
|
||||
"mobile.post_textbox.entire_channel.cancel": "Annulla",
|
||||
"mobile.post_textbox.entire_channel.confirm": "Conferma",
|
||||
"mobile.post_textbox.entire_channel.message": "Usando @all oppure @channel si invia una notifica a {totalMembers, number} {totalMembers, plural, one {person} other {people}}. Sicuro di voler continuare?",
|
||||
"mobile.post_textbox.entire_channel.message.with_timezones": "Usando @all oppure @channel si invia una notifica a {totalMembers, number} {totalMembers, plural, one {person} other {people}} in {timezones, number} {timezones, plural, one {timezone} other {timezones}}. Sicuro di voler continuare?",
|
||||
"mobile.post_textbox.entire_channel.title": "Conferma l'invio delle notifiche a tutto il canale",
|
||||
"mobile.post_textbox.uploadFailedDesc": "Impossibile caricare alcuni allegati, sicuro di voler pubblicare il messaggio?",
|
||||
"mobile.post_textbox.uploadFailedTitle": "Allegati non caricati",
|
||||
"mobile.post.cancel": "Annulla",
|
||||
@@ -356,6 +386,11 @@
|
||||
"mobile.post.failed_title": "Impossibile inviare il messaggio",
|
||||
"mobile.post.retry": "Aggiorna",
|
||||
"mobile.posts_view.moreMsg": "Aggiungere più nuovi messaggi sopra",
|
||||
"mobile.privacy_link": "Politica sulla Privacy",
|
||||
"mobile.push_notification_reply.button": "Invia",
|
||||
"mobile.push_notification_reply.placeholder": "Scrivi una risposta...",
|
||||
"mobile.push_notification_reply.title": "Rispondi",
|
||||
"mobile.reaction_header.all_emojis": "Tutti",
|
||||
"mobile.recent_mentions.empty_description": "I messaggi contenti il tuo nome utente e altre parole che scatenano citazioni appariranno qui.",
|
||||
"mobile.recent_mentions.empty_title": "Nessuna Citazione Recente",
|
||||
"mobile.rename_channel.display_name_maxLength": "Il nome del canale deve essere al massimo di {maxLength, number} caratteri",
|
||||
@@ -378,6 +413,8 @@
|
||||
"mobile.routes.channelInfo.createdBy": "Creato da {creator} il ",
|
||||
"mobile.routes.channelInfo.delete_channel": "Archivia Canale",
|
||||
"mobile.routes.channelInfo.favorite": "Preferiti",
|
||||
"mobile.routes.channelInfo.groupManaged": "I membri sono gestiti dai gruppi collegati",
|
||||
"mobile.routes.channelInfo.unarchive_channel": "Archivia Canale",
|
||||
"mobile.routes.code": "{language} codice",
|
||||
"mobile.routes.code.noLanguage": "Codice",
|
||||
"mobile.routes.edit_profile": "Modifica Profilo",
|
||||
@@ -385,7 +422,7 @@
|
||||
"mobile.routes.loginOptions": "Selezionatore Login",
|
||||
"mobile.routes.mfa": "Forza Autenticazione Multi-fattore",
|
||||
"mobile.routes.selectChannel": "Seleziona Canale",
|
||||
"mobile.routes.selectTeam": "Seleziona gruppo",
|
||||
"mobile.routes.selectTeam": "Seleziona squadra",
|
||||
"mobile.routes.settings": "Impostazioni",
|
||||
"mobile.routes.sso": "Single SignOn",
|
||||
"mobile.routes.table": "Tabella",
|
||||
@@ -393,6 +430,7 @@
|
||||
"mobile.routes.thread": "{channelName} Discussione",
|
||||
"mobile.routes.thread_dm": "Discussione Messaggi Diretti",
|
||||
"mobile.routes.user_profile": "Profilo",
|
||||
"mobile.routes.user_profile.edit": "Modifica",
|
||||
"mobile.routes.user_profile.local_time": "ORA LOCALE",
|
||||
"mobile.routes.user_profile.send_message": "Invia messaggio",
|
||||
"mobile.search.after_modifier_description": "per trovare le pubblicazioni successive alla data specificata",
|
||||
@@ -405,13 +443,20 @@
|
||||
"mobile.search.no_results": "Nessun risultato trovato",
|
||||
"mobile.search.on_modifier_description": "per trovare le pubblicazioni di una specifica data",
|
||||
"mobile.search.recent_title": "Ricerche recenti",
|
||||
"mobile.select_team.join_open": "Gruppi aperti a cui puoi accedere",
|
||||
"mobile.select_team.no_teams": "Non ci sono gruppi disponibili.",
|
||||
"mobile.select_team.guest_cant_join_team": "I tuoi account ospite non hanno una squadra o un canale assegnato. Contatta un amministratore.",
|
||||
"mobile.select_team.join_open": "Squadre aperti a cui puoi accedere",
|
||||
"mobile.select_team.no_teams": "Non ci sono squadre disponibili.",
|
||||
"mobile.server_link.error.text": "Il collegamento non può essere trovato su questo server.",
|
||||
"mobile.server_link.error.title": "Errore collegamento",
|
||||
"mobile.server_link.unreachable_channel.error": "Collegamento appartenente a un messaggio cancellato o a un gruppo in cui non si può accedere.",
|
||||
"mobile.server_link.unreachable_team.error": "Collegamento appartenente a un messaggio cancellato o a un gruppo in cui non si può accedere.",
|
||||
"mobile.server_ssl.error.text": "The certificate from {host} is not trusted.\n\nPlease contact your System Administrator to resolve the certificate issues and allow connections to this server.",
|
||||
"mobile.server_ssl.error.title": "Untrusted Certificate",
|
||||
"mobile.server_upgrade.button": "OK",
|
||||
"mobile.server_upgrade.description": "\nE' richiesto un aggiornamento del server per usare l'app di Mattermost. Chiedi al tuo Amministratore di Sistema per i dettagli.\n",
|
||||
"mobile.server_upgrade.title": "Richiesto aggiornamento del server",
|
||||
"mobile.server_url.invalid_format": "L'URL Deve iniziare con http:// o https://",
|
||||
"mobile.session_expired": "Sessione scaduta: accedere per ricevere le notifiche.",
|
||||
"mobile.session_expired": "Sessione Scaduta: Accesi per continuare a ricevere le notifiche. Le sessioni per {siteName} sono configurate per scadere ogni {daysCount, number} {daysCount, plural, one {day} other {days}}.",
|
||||
"mobile.set_status.away": "Assente",
|
||||
"mobile.set_status.dnd": "Non disturbare",
|
||||
"mobile.set_status.offline": "Offline",
|
||||
@@ -421,17 +466,31 @@
|
||||
"mobile.share_extension.error_close": "Chiudi",
|
||||
"mobile.share_extension.error_message": "Si è verificato un errore durante l'utilizzo dell'estensione di condivisione.",
|
||||
"mobile.share_extension.error_title": "Errore Estensione",
|
||||
"mobile.share_extension.team": "Gruppo",
|
||||
"mobile.share_extension.team": "Squadra",
|
||||
"mobile.share_extension.too_long_message": "Conteggio caratteri: {count}/{max}",
|
||||
"mobile.share_extension.too_long_title": "Il messaggio è troppo lungo",
|
||||
"mobile.sidebar_settings.permanent": "Barra laterale fissa",
|
||||
"mobile.sidebar_settings.permanent_description": "Mantieni sempre aperta la barra laterale",
|
||||
"mobile.storage_permission_denied_description": "Carica file su Mattermost. Aprire le Impostazioni per consentire a Mattermost di Leggere e Scrivere sul tuo dispositivo.",
|
||||
"mobile.storage_permission_denied_title": "{applicationName} vorrebbe accedere ai tuoi file",
|
||||
"mobile.suggestion.members": "Membri",
|
||||
"mobile.system_message.channel_archived_message": "{username} ha archiviato il canale.",
|
||||
"mobile.system_message.channel_unarchived_message": "{username} ha archiviato il canale.",
|
||||
"mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} ha modificato il nome visualizzato del canale da: {oldDisplayName} a: {newDisplayName}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.removed": "{username} ha rimosso l'intestazione del canale (era: {oldHeader})",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username} ha aggiornato il titolo del canale da: {oldHeader} a: {newHeader}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} ha aggiornato il titolo del canale a: {newHeader}",
|
||||
"mobile.system_message.update_channel_purpose_message.removed": "{username} ha cancellato lo scopo del canale (era: {oldPurpose})",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_from": "{username} ha aggiornato lo scopo del canale da: {oldPurpose} a: {newPurpose}",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_to": "{username} ha aggiornato lo scopo del canale a: {newPurpose}",
|
||||
"mobile.terms_of_service.alert_cancel": "Annulla",
|
||||
"mobile.terms_of_service.alert_ok": "OK",
|
||||
"mobile.terms_of_service.alert_retry": "Riprova",
|
||||
"mobile.terms_of_service.get_terms_error_description": "Assicurarsi di avere una connessione a internet attiva e riprovare. Se il problema persiste, contattare l'Amministratore di Sistema.",
|
||||
"mobile.terms_of_service.get_terms_error_title": "Impossibile caricare i termini di servizio.",
|
||||
"mobile.terms_of_service.terms_rejected": "Devi accettare i Termini di Servizio prima di poter accedere a {siteName}. Contattare l'Amministratore di Sistema per maggiori dettagli.",
|
||||
"mobile.timezone_settings.automatically": "Imposta automaticamente",
|
||||
"mobile.timezone_settings.manual": "Cambia fuso orario",
|
||||
"mobile.timezone_settings.select": "Seleziona fuso orario",
|
||||
"mobile.tos_link": "Termini di Servizio",
|
||||
"mobile.user_list.deactivated": "Disattivato",
|
||||
"mobile.user.settings.notifications.email.fifteenMinutes": "Ogni 15 minuti",
|
||||
"mobile.video_playback.failed_description": "Si è verificato un errore durante la riproduzione del video.\n",
|
||||
@@ -445,11 +504,17 @@
|
||||
"modal.manual_status.auto_responder.message_dnd": "Vuoi modificare il tuo stato a \"Non disturbare\" e disattivare le risposte automatiche?",
|
||||
"modal.manual_status.auto_responder.message_offline": "Vuoi modificare il tuo stato a \"Non in linea\" e disattivare le risposte automatiche?",
|
||||
"modal.manual_status.auto_responder.message_online": "Vuoi modificare il tuo stato a \"In linea\" e disattivare le risposte automatiche?",
|
||||
"more_channels.archivedChannels": "Canali Archiviati",
|
||||
"more_channels.dropdownTitle": "Mostra",
|
||||
"more_channels.noMore": "Nessun altro canale in cui entrare",
|
||||
"more_channels.publicChannels": "Canali Pubblici",
|
||||
"more_channels.showArchivedChannels": "Visualizza: Canali Archiviati",
|
||||
"more_channels.showPublicChannels": "Visualizza: Canali Pubblici",
|
||||
"more_channels.title": "Più Canali",
|
||||
"msg_typing.areTyping": "{users} e {last} stanno scrivendo...",
|
||||
"msg_typing.isTyping": "{user} sta scrivendo...",
|
||||
"navbar_dropdown.logout": "Esci",
|
||||
"navbar.channel_drawer.button": "Canali e squadre",
|
||||
"navbar.channel_drawer.hint": "Apri il cassetto dei canali e delle squadre",
|
||||
"navbar.leave": "Elimina Canale",
|
||||
"password_form.title": "Reimposta Password",
|
||||
"password_send.checkInbox": "Per favore controlla la posta in arrivo.",
|
||||
@@ -458,25 +523,26 @@
|
||||
"password_send.link": "Se l'account esiste, verrà inviata un'email per reimpostare la password a:",
|
||||
"password_send.reset": "Reimposta password",
|
||||
"permalink.error.access": "Permalink appartenente a un messaggio cancellato o a un gruppo in cui non si può accedere.",
|
||||
"permalink.error.link_not_found": "Collegamento non trovato",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "non sono stati avvisati di questa citazione poiché non sono nel canale. Non possono essere aggiunti al canale poiché non sono membri dei gruppi collegati. Per aggiungerli a questo canale devono essere aggiunti a uno dei gruppi collegati.",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": " e ",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "aggiungerli a questo canale privato",
|
||||
"post_body.check_for_out_of_channel_mentions.link.public": "aggiungerli al canale",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? Avranno accesso a tutta la cronologia dei messaggi.",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "sono stati citati ma non sono nel canale. Vuoi ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "è stato citato ma non è nel canale. Vuoi ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "non sono stati avvisati di questa citazione poiché non sono nel canale. Vuoi ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "non sono stati avvisati di questa citazione poiché non sono nel canale. Vuoi ",
|
||||
"post_body.commentedOn": "Ha commentato il messaggio di {name}: ",
|
||||
"post_body.deleted": "(messaggio cancellato)",
|
||||
"post_info.auto_responder": "RISPOSTE AUTOMATICHE",
|
||||
"post_info.bot": "BOT",
|
||||
"post_info.del": "Cancella",
|
||||
"post_info.edit": "Modifica",
|
||||
"post_info.guest": "OSPITE",
|
||||
"post_info.message.show_less": "Mostra di meno",
|
||||
"post_info.message.show_more": "Mostra di più",
|
||||
"post_info.system": "Sistema",
|
||||
"post_message_view.edited": "(modificato)",
|
||||
"posts_view.newMsg": "Nuovo Messaggio",
|
||||
"rename_channel.handleHolder": "caratteri alfanumerici minuscoli",
|
||||
"rename_channel.url": "URL",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "Parte di questa discussione può essere stata eliminata a causa di un politica di ritenzione dei dati. Non puoi più rispondere in questa discussione.",
|
||||
"search_bar.search": "Ricerca",
|
||||
"search_header.results": "Risultati di Ricerca",
|
||||
@@ -498,20 +564,22 @@
|
||||
"status_dropdown.set_offline": "Offline",
|
||||
"status_dropdown.set_online": "Online",
|
||||
"status_dropdown.set_ooo": "Fuori sede",
|
||||
"suggestion.mention.all": "ATTENZIONE: Questo citerà tutti nel canale",
|
||||
"suggestion.mention.all": "Notifica tutti nel canale",
|
||||
"suggestion.mention.channel": "Notifica tutti nel canale",
|
||||
"suggestion.mention.channels": "Miei canali",
|
||||
"suggestion.mention.here": "Notifica tutti gli utenti online nel canale",
|
||||
"suggestion.mention.here": "Notifica tutti i membri in linea nel canale",
|
||||
"suggestion.mention.members": "Membri del canale",
|
||||
"suggestion.mention.morechannels": "Altri canali",
|
||||
"suggestion.mention.nonmembers": "Non nel canale",
|
||||
"suggestion.mention.special": "Citazioni speciali",
|
||||
"suggestion.mention.you": "(tu)",
|
||||
"suggestion.search.direct": "Messaggio Privato",
|
||||
"suggestion.search.private": "Canali privati",
|
||||
"suggestion.search.public": "Canali Pubblici",
|
||||
"terms_of_service.agreeButton": "Accetto",
|
||||
"terms_of_service.api_error": "Impossibile completare la richiesta. Se il problema persiste contattare l'Amministrazione di Sistema.",
|
||||
"user.settings.display.clockDisplay": "Visualizza orologio",
|
||||
"user.settings.display.custom_theme": "Tema personalizzato",
|
||||
"user.settings.display.militaryClock": "Orologio 24 ore (esempio: 16:00)",
|
||||
"user.settings.display.normalClock": "Orologio 12 ore (esempio 4:00 PM)",
|
||||
"user.settings.display.preferTime": "Seleziona come visualizzare l'ora.",
|
||||
@@ -538,7 +606,7 @@
|
||||
"user.settings.notifications.email.immediately": "Immediatamente",
|
||||
"user.settings.notifications.email.never": "Mai",
|
||||
"user.settings.notifications.email.send": "Invia notifiche email",
|
||||
"user.settings.notifications.emailInfo": "Invia le notifiche email per citazioni e messaggi diretti quando sei offline o lontano da {siteName} per più di 5 minuti.",
|
||||
"user.settings.notifications.emailInfo": "Invia le notifiche email per citazioni e messaggi diretti quando sei offline o lontano per più di 5 minuti.",
|
||||
"user.settings.notifications.never": "Mai",
|
||||
"user.settings.notifications.onlyMentions": "Solo per citazione e messaggi privati",
|
||||
"user.settings.push_notification.away": "Lontano o offline",
|
||||
@@ -547,4 +615,4 @@
|
||||
"user.settings.push_notification.offline": "Offline",
|
||||
"user.settings.push_notification.online": "Online, lontano o offline",
|
||||
"web.root.signup_info": "Tutte le tue comunicazioni in un posto, instantaneamente ricercabili e accessibili ovunque"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"about.teamEditionSt": "あなたのチームの全てのコミュニケーションを一箇所で、すぐに検索可能で、どこからでもアクセスできるものにします。",
|
||||
"about.teamEditiont0": "Team Edition",
|
||||
"about.teamEditiont1": "Enterprise Edition",
|
||||
"about.title": "Mattermostについて",
|
||||
"about.title": "{appTitle}について",
|
||||
"announcment_banner.dont_show_again": "二度と表示しない",
|
||||
"api.channel.add_member.added": "{addedUsername} は {username} によってチャンネルに追加されました。",
|
||||
"archivedChannelMessage": "**アーカイブされたチャンネル**を閲覧しています。新しいメッセージは投稿できません。",
|
||||
@@ -35,6 +35,9 @@
|
||||
"channel_modal.purposeEx": "例: \"バグや改善を取りまとめるチャンネル\"",
|
||||
"channel_notifications.ignoreChannelMentions.settings": "@channel、@here、@allを無視する",
|
||||
"channel_notifications.muteChannel.settings": "ミュートチャンネル",
|
||||
"channel.channelHasGuests": "このチャンネルにはゲストがいます",
|
||||
"channel.hasGuests": "このグループメッセージにはゲストがいます",
|
||||
"channel.isGuest": "このユーザーはゲストです",
|
||||
"combined_system_message.added_to_channel.many_expanded": "{users} と {lastUser} は {actor} によって **チャンネルに追加されました**。",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser} は {actor} によって **チャンネルに追加されました**。",
|
||||
"combined_system_message.added_to_channel.one_you": "あなたは {actor} によって **チャンネルに追加されました**。",
|
||||
@@ -70,21 +73,21 @@
|
||||
"combined_system_message.you": "あなた",
|
||||
"create_comment.addComment": "コメントを追加する...",
|
||||
"create_post.deactivated": "無効化されたユーザーのいるアーカイブされたチャンネルを見ています。",
|
||||
"create_post.write": "Write to {channelDisplayName}",
|
||||
"create_post.write": "{channelDisplayName}へ投稿する",
|
||||
"date_separator.today": "今日",
|
||||
"date_separator.yesterday": "昨日",
|
||||
"edit_post.editPost": "投稿を編集する...",
|
||||
"edit_post.save": "保存する",
|
||||
"error.team_not_found.title": "チームが見つかりません",
|
||||
"file_attachment.download": "ダウンロードする",
|
||||
"file_upload.fileAbove": "{max}MBを越えるファイルはアップロードできません: {filename}",
|
||||
"get_post_link_modal.title": "パーマリンクをコピーする",
|
||||
"get_post_link_modal.title": "リンクをコピーする",
|
||||
"integrations.add": "追加する",
|
||||
"intro_messages.anyMember": " このチャンネルには誰でも参加して投稿を閲覧することができます。",
|
||||
"intro_messages.beginning": "{name}のトップ",
|
||||
"intro_messages.channel": "チャンネル",
|
||||
"intro_messages.creator": "ここは{name} {type}のトップです。{date}に{creator}によって作成されました。",
|
||||
"intro_messages.group": "非公開チャンネル",
|
||||
"intro_messages.creator": "ここは {name} チャンネルのトップです。{date}に{creator}によって作成されました。",
|
||||
"intro_messages.creatorPrivate": "ここは非公開チャンネル {name} のトップです。{date}に{creator}によって作成されました。",
|
||||
"intro_messages.group_message": "チームメイトとのグループメッセージの履歴の最初です。メッセージとそこで共有されているファイルは、この領域の外のユーザーからは見ることができません。",
|
||||
"intro_messages.noCreator": "ここは{name} {type}のトップ画面です。{date}に作成されました。",
|
||||
"intro_messages.noCreator": "ここは {name} チャンネルのトップです。{date}に作成されました。",
|
||||
"intro_messages.onlyInvited": " 招待されたメンバーだけがこの非公開チャンネルを見ることができます。",
|
||||
"last_users_message.added_to_channel.type": "が {actor} によって **チャンネルに追加されました**。",
|
||||
"last_users_message.added_to_team.type": "が {actor} によって **チームに追加されました**。",
|
||||
@@ -128,7 +131,6 @@
|
||||
"mobile.account_notifications.threads_mentions": "スレッド内のあなたについての投稿",
|
||||
"mobile.account_notifications.threads_start": "自分で開始したスレッド",
|
||||
"mobile.account_notifications.threads_start_participate": "開始もしくは参加したスレッド",
|
||||
"mobile.account.settings.cancel": "キャンセル",
|
||||
"mobile.account.settings.save": "保存する",
|
||||
"mobile.action_menu.select": "オプションを選択してください",
|
||||
"mobile.advanced_settings.clockDisplay": "時刻表示",
|
||||
@@ -137,36 +139,44 @@
|
||||
"mobile.advanced_settings.delete_title": "ドキュメントとデータの削除",
|
||||
"mobile.advanced_settings.timezone": "タイムゾーン",
|
||||
"mobile.advanced_settings.title": "詳細設定",
|
||||
"mobile.android.camera_permission_denied_description": "カメラで写真やビデオを撮影するために権限設定を変更してください。",
|
||||
"mobile.android.camera_permission_denied_title": "カメラへのアクセスを要求しています",
|
||||
"mobile.android.permission_denied_dismiss": "破棄",
|
||||
"mobile.android.permission_denied_retry": "権限を設定する",
|
||||
"mobile.android.photos_permission_denied_description": "ライブラリから画像をアップロードするには権限設定を変更してください。",
|
||||
"mobile.android.photos_permission_denied_title": "フォトライブラリーへのアクセスを要求しています",
|
||||
"mobile.android.storage_permission_denied_description": "Androidデバイスから画像をアップロードするには権限設定を変更してください。",
|
||||
"mobile.android.storage_permission_denied_title": "ファイルストレージへのアクセスを要求しています",
|
||||
"mobile.android.videos_permission_denied_description": "ライブラリからビデオをアップロードするには権限設定を変更してください。",
|
||||
"mobile.android.videos_permission_denied_title": "ビデオライブラリーへのアクセスを要求しています",
|
||||
"mobile.alert_dialog.alertCancel": "キャンセル",
|
||||
"mobile.android.photos_permission_denied_description": "Mattermostインスタンスに写真をアップロードし、それらをあなたのデバイスに保存します。あなたのフォトライブラリへのアクセスを許可するには、設定を開いてください。",
|
||||
"mobile.android.photos_permission_denied_title": "{applicationName} があなたの写真へアクセスしようとしています",
|
||||
"mobile.android.videos_permission_denied_description": "Mattermostインスタンスへ動画をアップロードし、それらをあなたのデバイスに保存します。あなたのビデオライブラリのアクセスを許可するには、設定を開いてください。",
|
||||
"mobile.android.videos_permission_denied_title": "{applicationName} があなたの動画へアクセスしようとしています",
|
||||
"mobile.announcement_banner.title": "アナウンス",
|
||||
"mobile.authentication_error.message": "Mattermostでエラーが発生しました。新しいセッションを開始するため再度認証してください。",
|
||||
"mobile.authentication_error.title": "認証エラー",
|
||||
"mobile.calendar.dayNames": "日曜日、月曜日、火曜日、水曜日、木曜日、金曜日、土曜日",
|
||||
"mobile.calendar.dayNamesShort": "日、月、火、水、木、金、土",
|
||||
"mobile.calendar.monthNames": "1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月、12月",
|
||||
"mobile.calendar.monthNamesShort": "1月、2月、3月、4月、5月、6月、7月、8月、9月、10月、11月、12月",
|
||||
"mobile.camera_photo_permission_denied_description": "写真を撮影し、それらをMattermostインスタンスへアップロードし、デバイスへ保存します。カメラへのアクセスを許可するには、設定を開いてください。",
|
||||
"mobile.camera_photo_permission_denied_title": "{applicationName} があなたのカメラへアクセスしようとしています",
|
||||
"mobile.camera_video_permission_denied_description": "動画を撮影し、それらをMattermostインスタンスへアップロードし、デバイスへ保存します。カメラへのアクセスを許可するには、設定を開いてください。",
|
||||
"mobile.camera_video_permission_denied_title": "{applicationName} があなたのカメラへアクセスしようとしています",
|
||||
"mobile.channel_drawer.search": "移動する...",
|
||||
"mobile.channel_info.alertMessageConvertChannel": "{displayName} を非公開チャンネルに変更する際、過去の履歴やメンバーシップは保持されます。公開されていたファイルは、同じリンクで誰でもアクセス可能なままになります。非公開チャンネルへのメンバー追加は招待のみです。\n\nこの変更を取り消すことはできません。\n\n本当に {displayName} を非公開チャンネルに変更しますか?",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "{term} {name} を本当にアーカイブしますか?",
|
||||
"mobile.channel_info.alertMessageLeaveChannel": "{term} {name} から本当に脱退しますか?",
|
||||
"mobile.channel_info.alertMessageUnarchiveChannel": "{term} {name} を本当にアーカイブから復元しますか?",
|
||||
"mobile.channel_info.alertNo": "いいえ",
|
||||
"mobile.channel_info.alertTitleConvertChannel": "{displayName} を非公開チャンネルに変更しますか?",
|
||||
"mobile.channel_info.alertTitleDeleteChannel": "アーカイブ {term}",
|
||||
"mobile.channel_info.alertTitleLeaveChannel": "{term}から脱退する",
|
||||
"mobile.channel_info.alertTitleUnarchiveChannel": "アーカイブから復元 {term}",
|
||||
"mobile.channel_info.alertYes": "はい",
|
||||
"mobile.channel_info.convert": "非公開チャンネルに変更する",
|
||||
"mobile.channel_info.convert_failed": "{displayName} を非公開チャンネルに変更できませんでした。",
|
||||
"mobile.channel_info.convert_success": "{displayName} は非公開チャンネルになりました。",
|
||||
"mobile.channel_info.copy_header": "ヘッダーをコピーする",
|
||||
"mobile.channel_info.copy_purpose": "目的をコピーする",
|
||||
"mobile.channel_info.delete_failed": "チャンネル {displayName} をアーカイブできませんでした。接続を確認し、もう一度試してみてください。",
|
||||
"mobile.channel_info.edit": "チャンネルを編集する",
|
||||
"mobile.channel_info.privateChannel": "非公開チャンネル",
|
||||
"mobile.channel_info.publicChannel": "公開チャンネル",
|
||||
"mobile.channel_info.unarchive_failed": "チャンネル {displayName} をアーカイブから復元できませんでした。接続を確認し、もう一度試してみてください。",
|
||||
"mobile.channel_list.alertNo": "いいえ",
|
||||
"mobile.channel_list.alertYes": "はい",
|
||||
"mobile.channel_list.archived": "アーカイブ",
|
||||
"mobile.channel_list.channels": "チャンネル",
|
||||
"mobile.channel_list.closeDM": "ダイレクトメッセージを閉じる",
|
||||
"mobile.channel_list.closeGM": "グループメッセージを閉じる",
|
||||
@@ -174,7 +184,6 @@
|
||||
"mobile.channel_list.not_member": "非メンバー",
|
||||
"mobile.channel_list.unreads": "未読",
|
||||
"mobile.channel_members.add_members_alert": "チャンネルに追加するメンバーを少なくとも一人選択してください。",
|
||||
"mobile.channel.markAsRead": "既読にする",
|
||||
"mobile.client_upgrade": "アプリを更新する",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "新しいバージョンが利用できます",
|
||||
"mobile.client_upgrade.can_upgrade_title": "アップデートできます",
|
||||
@@ -204,6 +213,7 @@
|
||||
"mobile.create_channel.public": "新しい公開チャンネル",
|
||||
"mobile.create_post.read_only": "このチャンネルは読み取り専用です",
|
||||
"mobile.custom_list.no_results": "該当するものはありません",
|
||||
"mobile.display_settings.sidebar": "サイドバー",
|
||||
"mobile.display_settings.theme": "テーマ",
|
||||
"mobile.document_preview.failed_description": "文書を開く際にエラーが発生しました。{fileType}ビューワーがインストールされていることを確認し、再度実行してください。\n",
|
||||
"mobile.document_preview.failed_title": "文書を開けませんでした",
|
||||
@@ -211,7 +221,6 @@
|
||||
"mobile.downloader.android_failed": "ダウンロードが失敗しました",
|
||||
"mobile.downloader.android_permission": "ファイルを保存するにはダウンロードフォルダーへのアクセスが必要です。",
|
||||
"mobile.downloader.android_started": "ダウンロードが開始されました",
|
||||
"mobile.downloader.android_success": "ダウンロードが成功しました",
|
||||
"mobile.downloader.complete": "ダウンロードが完了しました",
|
||||
"mobile.downloader.disabled_description": "このサーバーではファイルのダウンロードが無効化されています。詳しくはシステム管理者に問い合わせてください。\n",
|
||||
"mobile.downloader.disabled_title": "ダウンロードは無効化されています",
|
||||
@@ -223,7 +232,8 @@
|
||||
"mobile.drawer.teamsTitle": "チーム",
|
||||
"mobile.edit_channel": "保存する",
|
||||
"mobile.edit_post.title": "メッセージ編集中",
|
||||
"mobile.emoji_picker.activity": "アクティビティ",
|
||||
"mobile.edit_profile.remove_profile_photo": "画像を削除する",
|
||||
"mobile.emoji_picker.activity": "アクティビティー",
|
||||
"mobile.emoji_picker.custom": "カスタム",
|
||||
"mobile.emoji_picker.flags": "国旗",
|
||||
"mobile.emoji_picker.foods": "食べ物",
|
||||
@@ -234,24 +244,31 @@
|
||||
"mobile.emoji_picker.recent": "最近使用したもの",
|
||||
"mobile.emoji_picker.symbols": "シンボル",
|
||||
"mobile.error_handler.button": "再起動",
|
||||
"mobile.error_handler.description": "\nアプリケーションを再開するために再起動をクリックしてください。再起動した後、設定メニューから問題を報告してください。\n",
|
||||
"mobile.error_handler.description": "\n再起動をタップしてアプリを再起動してください。再起動した後、設定メニューから問題を報告することができます。\n",
|
||||
"mobile.error_handler.title": "予期しないエラーが発生しました。",
|
||||
"mobile.extension.authentication_required": "認証エラー: このアプリを使用するには、まずログインしてください。",
|
||||
"mobile.extension.file_error": "共有ファイルに関するエラーが発生しました。\n再度実行してみてください。",
|
||||
"mobile.extension.file_limit": "共有は最大5ファイルまでに制限されています。",
|
||||
"mobile.extension.max_file_size": "Mattermostで共有される添付ファイルは {size} 以下でなくてはなりません。",
|
||||
"mobile.extension.permission": "ファイルを共有するためにMattermostがデバイスへのアクセスを要求しています。",
|
||||
"mobile.extension.team_required": "ファイルを共有するにはチームに所属している必要があります。",
|
||||
"mobile.extension.title": "Mattermostで共有する",
|
||||
"mobile.failed_network_action.description": "インターネット接続に問題があるようです。接続を確認し、再度実行してください。",
|
||||
"mobile.failed_network_action.retry": "再実行",
|
||||
"mobile.failed_network_action.shortDescription": "接続が有効であることを確認し、再度実行してください。",
|
||||
"mobile.failed_network_action.shortDescription": "メッセージはインターネットに接続した際に読み込まれます。",
|
||||
"mobile.failed_network_action.teams_channel_description": "{teamName} のチャンネルを読み込めませんでした。",
|
||||
"mobile.failed_network_action.teams_description": "チームを読み込めませんでした。",
|
||||
"mobile.failed_network_action.teams_title": "問題が発生しました",
|
||||
"mobile.failed_network_action.title": "インターネット未接続",
|
||||
"mobile.file_upload.browse": "参照",
|
||||
"mobile.file_upload.camera_photo": "写真を撮る",
|
||||
"mobile.file_upload.camera_video": "動画を撮る",
|
||||
"mobile.file_upload.library": "フォトライブラリー",
|
||||
"mobile.file_upload.max_warning": "最大5ファイルまでアップロードできます。",
|
||||
"mobile.file_upload.video": "ビデオライブラリー",
|
||||
"mobile.file_upload.unsupportedMimeType": "BMP、JPG、PNG画像だけがプロフィール画像として使用できます。",
|
||||
"mobile.file_upload.video": "動画ライブラリー",
|
||||
"mobile.files_paste.error_description": "ファイルをペーストする際にエラーが発生しました。再度実行してください。",
|
||||
"mobile.files_paste.error_dismiss": "破棄",
|
||||
"mobile.files_paste.error_title": "ペーストに失敗しました",
|
||||
"mobile.flagged_posts.empty_description": "フラグはメッセージに追跡のためのマークを付ける一つの方法です。あなたのフラグは個人のもので、他のユーザーからは見えません。",
|
||||
"mobile.flagged_posts.empty_title": "フラグの立てられた投稿はありません",
|
||||
"mobile.help.title": "ヘルプ",
|
||||
@@ -260,7 +277,8 @@
|
||||
"mobile.intro_messages.default_message": "ここはチームメイトが利用登録した際に最初に見るチャンネルです - みんなが知るべき情報を投稿してください。",
|
||||
"mobile.intro_messages.default_welcome": "{name}へようこそ!",
|
||||
"mobile.intro_messages.DM": "{teammate}とのダイレクトメッセージの履歴の最初です。ダイレクトメッセージとそこで共有されているファイルは、この領域の外のユーザーからは見ることができません。",
|
||||
"mobile.ios.photos_permission_denied_description": "写真やビデオを保存するために権限設定を変更してください。",
|
||||
"mobile.ios.photos_permission_denied_description": "Mattermostインスタンスへ写真と動画をアップロードし、それらをあなたのデバイスへ保存します。フォトライブラリとビデオライブラリへのアクセスを許可するには、設定を開いてください。",
|
||||
"mobile.ios.photos_permission_denied_title": "{applicationName} があなたの写真へアクセスしようとしています",
|
||||
"mobile.join_channel.error": "チャンネル {displayName} に参加できませんでした。接続を確認し、もう一度試してみてください。",
|
||||
"mobile.loading_channels": "チャンネルをロードしています...",
|
||||
"mobile.loading_members": "メンバーをロードしています...",
|
||||
@@ -271,13 +289,17 @@
|
||||
"mobile.managed.blocked_by": "{vendor}によりブロックされました",
|
||||
"mobile.managed.exit": "終了",
|
||||
"mobile.managed.jailbreak": "Jailbrokenデバイスは{vendor}から信頼されていません。アプリを終了してください。",
|
||||
"mobile.managed.not_secured.android": "このデバイスでMattermostを使うにはスクリーンロックを設定する必要があります。",
|
||||
"mobile.managed.not_secured.ios": "このデバイスでMattermostを使うにはパスコードを設定する必要があります。\n\n設定 > Face IDとパスコード から設定してください。",
|
||||
"mobile.managed.not_secured.ios.touchId": "このデバイスでMattermostを使うにはパスコードを設定する必要があります。\n\n設定 > Touch IDとパスコード から設定してください。",
|
||||
"mobile.managed.secured_by": "{vendor}により保護されました",
|
||||
"mobile.managed.settings": "設定へ移動する",
|
||||
"mobile.markdown.code.copy_code": "コードのコピー",
|
||||
"mobile.markdown.code.plusMoreLines": "あと {count, number} {count, plural, one {line} other {lines}} あります",
|
||||
"mobile.markdown.image.too_large": "画像が {maxWidth} x {maxHeight} の上限を超えています:",
|
||||
"mobile.markdown.link.copy_url": "URL のコピー",
|
||||
"mobile.mention.copy_mention": "あなたについての投稿のコピー",
|
||||
"mobile.message_length.message": "メッセージが長すぎます。現在の文字数: {max}/{count}",
|
||||
"mobile.message_length.message": "メッセージが長すぎます。現在の文字数: {count}/{max}",
|
||||
"mobile.message_length.title": "メッセージの長さ",
|
||||
"mobile.more_dms.add_more": "あと{remaining, number}人のユーザーを追加できます",
|
||||
"mobile.more_dms.cannot_add_more": "これ以上ユーザーを追加できません",
|
||||
@@ -332,20 +354,28 @@
|
||||
"mobile.open_dm.error": "{displayName} とのダイレクトメッセージを開くことができませんでした。接続を確認し、もう一度試してみてください。",
|
||||
"mobile.open_gm.error": "そのユーザーとのダイレクトメッセージを開くことができませんでした。接続を確認し、もう一度試してみてください。",
|
||||
"mobile.open_unknown_channel.error": "チャンネルに参加できませんでした。キャッシュをリセットし、再度実行してください。",
|
||||
"mobile.permission_denied_dismiss": "許可しない",
|
||||
"mobile.permission_denied_retry": "設定",
|
||||
"mobile.photo_library_permission_denied_description": "あなたのライブラリへ写真や動画を保存するために、権限設定を変更してください。",
|
||||
"mobile.photo_library_permission_denied_title": "{applicationName} があなたのフォトライブラリへアクセスしようとしています",
|
||||
"mobile.pinned_posts.empty_description": "メッセージを押し続けると出現するメニューで \"チャンネルにピン留め\" するを選択することで重要な項目をピン留めできます。",
|
||||
"mobile.pinned_posts.empty_title": "ピン留めされた投稿がありません",
|
||||
"mobile.post_info.add_reaction": "リアクションを追加する",
|
||||
"mobile.post_info.copy_text": "テキストをコピーする",
|
||||
"mobile.post_info.flag": "フラグ",
|
||||
"mobile.post_info.pin": "チャンネルにピン留めする",
|
||||
"mobile.post_info.mark_unread": "未読としてマークする",
|
||||
"mobile.post_info.pin": "チャンネルにピン留め",
|
||||
"mobile.post_info.reply": "返信する",
|
||||
"mobile.post_info.unflag": "フラグを消す",
|
||||
"mobile.post_info.unpin": "チャンネルへのピン留めをやめる",
|
||||
"mobile.post_pre_header.flagged": "フラグ済み",
|
||||
"mobile.post_pre_header.pinned": "ピン留め済み",
|
||||
"mobile.post_pre_header.pinned_flagged": "ピン留めとフラグ済み",
|
||||
"mobile.post_textbox.empty.message": "空のメッセージを送信しようとしています。\n何かメッセージか少なくとも一つの添付ファイルがあることを確認してください。",
|
||||
"mobile.post_textbox.empty.ok": "OK",
|
||||
"mobile.post_textbox.empty.title": "空のメッセージ",
|
||||
"mobile.post_textbox.entire_channel.cancel": "キャンセル",
|
||||
"mobile.post_textbox.entire_channel.confirm": "確認",
|
||||
"mobile.post_textbox.entire_channel.message": "@allや@channelを利用すると {totalMembers, number} {totalMembers, plural, one {人} other {人}} へ通知を送信することになります。本当にこの操作を行いますか?",
|
||||
"mobile.post_textbox.entire_channel.message.with_timezones": "@allや@channelを利用すると {timezones, number} {timezones, plural, one {タイムゾーン} other {タイムゾーン}} の {totalMembers, number} {totalMembers, plural, one {人} other {人}}へ通知を送信することになります。本当にこの操作を行いますか?",
|
||||
"mobile.post_textbox.entire_channel.title": "チャンネル全体へ通知を行う",
|
||||
"mobile.post_textbox.uploadFailedDesc": "サーバーへの添付ファイルのアップロードが失敗しました。メッセージを投稿しますか?",
|
||||
"mobile.post_textbox.uploadFailedTitle": "添付エラー",
|
||||
"mobile.post.cancel": "キャンセル",
|
||||
@@ -356,6 +386,11 @@
|
||||
"mobile.post.failed_title": "メッセージを送信できませんでした",
|
||||
"mobile.post.retry": "更新",
|
||||
"mobile.posts_view.moreMsg": "さらに新しいメッセージがあります",
|
||||
"mobile.privacy_link": "プライバシーポリシー",
|
||||
"mobile.push_notification_reply.button": "送信する",
|
||||
"mobile.push_notification_reply.placeholder": "返信を記述してください...",
|
||||
"mobile.push_notification_reply.title": "返信する",
|
||||
"mobile.reaction_header.all_emojis": "すべて",
|
||||
"mobile.recent_mentions.empty_description": "あなたのユーザー名やあなたについての投稿となる単語が含まれた投稿は、ここに表示されます。",
|
||||
"mobile.recent_mentions.empty_title": "あなたについての投稿はありません",
|
||||
"mobile.rename_channel.display_name_maxLength": "チャンネル名は {maxLength, number} 文字未満でなくてはなりません",
|
||||
@@ -378,6 +413,8 @@
|
||||
"mobile.routes.channelInfo.createdBy": "{creator} によって作成 ",
|
||||
"mobile.routes.channelInfo.delete_channel": "チャンネルをアーカイブする",
|
||||
"mobile.routes.channelInfo.favorite": "お気に入り",
|
||||
"mobile.routes.channelInfo.groupManaged": "メンバーはリンクされたグループにより管理されています",
|
||||
"mobile.routes.channelInfo.unarchive_channel": "チャンネルをアーカイブから復元する",
|
||||
"mobile.routes.code": "{language} コード",
|
||||
"mobile.routes.code.noLanguage": "コード",
|
||||
"mobile.routes.edit_profile": "プロフィールを編集する",
|
||||
@@ -393,6 +430,7 @@
|
||||
"mobile.routes.thread": "{channelName} スレッド",
|
||||
"mobile.routes.thread_dm": "ダイレクトメッセージスレッド",
|
||||
"mobile.routes.user_profile": "プロフィール",
|
||||
"mobile.routes.user_profile.edit": "編集する",
|
||||
"mobile.routes.user_profile.local_time": "ローカルタイム",
|
||||
"mobile.routes.user_profile.send_message": "メッセージを送信する",
|
||||
"mobile.search.after_modifier_description": "指定された日付以降の投稿を探す",
|
||||
@@ -405,13 +443,20 @@
|
||||
"mobile.search.no_results": "結果が見付かりません",
|
||||
"mobile.search.on_modifier_description": "指定された日付の投稿を探す",
|
||||
"mobile.search.recent_title": "最近検索したエントリ",
|
||||
"mobile.select_team.guest_cant_join_team": "あなたのゲストアカウントにはどのチームにもチャンネルにもアサインされていません。管理者に連絡してください。",
|
||||
"mobile.select_team.join_open": "参加可能なチームを開く",
|
||||
"mobile.select_team.no_teams": "あなたが参加できるチームはありません。",
|
||||
"mobile.server_link.error.text": "このリンクはサーバーには存在しません。",
|
||||
"mobile.server_link.error.title": "リンクエラー",
|
||||
"mobile.server_link.unreachable_channel.error": "削除されたチャンネル、もしくはアクセス権限のないチャンネルへのリンクです。",
|
||||
"mobile.server_link.unreachable_team.error": "削除されたチーム、もしくはアクセス権限のないチームへのパーマリンクです。",
|
||||
"mobile.server_ssl.error.text": "{host}からの証明書は信頼されていません。\n\n証明書の問題を解決し、このサーバーへ接続するにはシステム管理者に連絡してください。",
|
||||
"mobile.server_ssl.error.title": "信頼されていない証明書",
|
||||
"mobile.server_upgrade.button": "OK",
|
||||
"mobile.server_upgrade.description": "\nMattermostアプリケーションを利用するにはサーバーをアップグレードする必要があります。詳細についてはシステム管理者に問い合わせてください。\n",
|
||||
"mobile.server_upgrade.title": "サーバーのアップグレードが必要です",
|
||||
"mobile.server_url.invalid_format": "URLはhttp://またはhttps://から始まらなくてはいけません",
|
||||
"mobile.session_expired": "セッション有効期限切れ: 通知を受け取るためにログインしてください。",
|
||||
"mobile.session_expired": "セッション期限切れ: 通知を受け取るにはログインしてください。{siteName} へのセッションは {daysCount, number} {daysCount, plural, one {日} other {日}} 毎に期限切れになるよう設定されています。",
|
||||
"mobile.set_status.away": "離席中",
|
||||
"mobile.set_status.dnd": "取り込み中",
|
||||
"mobile.set_status.offline": "オフライン",
|
||||
@@ -422,34 +467,54 @@
|
||||
"mobile.share_extension.error_message": "共有の拡張機能を使用する際にエラーが発生しました。",
|
||||
"mobile.share_extension.error_title": "拡張機能エラー",
|
||||
"mobile.share_extension.team": "チーム",
|
||||
"mobile.share_extension.too_long_message": "文字数: {count}/{max}",
|
||||
"mobile.share_extension.too_long_title": "メッセージが長すぎます",
|
||||
"mobile.sidebar_settings.permanent": "サイドバーを常に表示する",
|
||||
"mobile.sidebar_settings.permanent_description": "サイドバーを常に開いた状態にします",
|
||||
"mobile.storage_permission_denied_description": "Mattermostインスタンスにファイルをアップロードします。このデバイスのファイルへのアクセスを許可するには、設定を開いてください。",
|
||||
"mobile.storage_permission_denied_title": "{applicationName} があなたのファイルへアクセスしようとしています",
|
||||
"mobile.suggestion.members": "メンバー",
|
||||
"mobile.system_message.channel_archived_message": "{username} がチャンネルをアーカイブしました。",
|
||||
"mobile.system_message.channel_unarchived_message": "{username} がチャンネルをアーカイブから復元しました。",
|
||||
"mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} がチャンネル表示名を {oldDisplayName} から {newDisplayName} に更新しました。",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.removed": "{username} がチャンネルヘッダー({oldHeader})を削除しました",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username}がチャンネルヘッダーを {oldHeader} から {newHeader} へ更新しました",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} がチャンネルヘッダーを {newHeader} に更新しました",
|
||||
"mobile.system_message.update_channel_purpose_message.removed": "{username} がチャンネルの目的({oldPurpose})を削除しました",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_from": "{username} がチャンネルの目的を {oldPurpose} から {newPurpose} へ更新しました",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_to": "{username} がチャンネルの目的を {newPurpose} へ更新しました",
|
||||
"mobile.terms_of_service.alert_cancel": "キャンセル",
|
||||
"mobile.terms_of_service.alert_ok": "OK",
|
||||
"mobile.terms_of_service.alert_retry": "再実行",
|
||||
"mobile.terms_of_service.get_terms_error_description": "有効なインターネット接続があるか確認し、再度実行してください。この問題が続くようならば、システム管理者に連絡してください。",
|
||||
"mobile.terms_of_service.get_terms_error_title": "利用規約を読み込めませんでした。",
|
||||
"mobile.terms_of_service.terms_rejected": "{siteName} にアクセスする前に利用規約に同意する必要があります。詳しくはシステム管理者に問い合わせてください。",
|
||||
"mobile.timezone_settings.automatically": "自動検出",
|
||||
"mobile.timezone_settings.manual": "タイムゾーンを変更",
|
||||
"mobile.timezone_settings.select": "タイムゾーンを選択",
|
||||
"mobile.tos_link": "利用規約",
|
||||
"mobile.user_list.deactivated": "無効にする",
|
||||
"mobile.user.settings.notifications.email.fifteenMinutes": "15 分毎",
|
||||
"mobile.video_playback.failed_description": "動画を再生する際にエラーが発生しました。\n",
|
||||
"mobile.video_playback.failed_title": "動画の再生に失敗しました",
|
||||
"mobile.video.save_error_message": "動画ファイルを保存するには、まずダウンロードする必要があります。",
|
||||
"mobile.video.save_error_title": "動画保存エラー",
|
||||
"mobile.youtube_playback_error.description": "YouTubeビデオを再生する際にエラーが発生しました。\n詳細: {details}",
|
||||
"mobile.youtube_playback_error.description": "YouTube動画を再生する際にエラーが発生しました。\n詳細: {details}",
|
||||
"mobile.youtube_playback_error.title": "YouTube再生エラー",
|
||||
"modal.manual_status.auto_responder.message_": "あなたのステータスを \"{status}\" に変更し、自動返信を無効化してもよろしいですか?",
|
||||
"modal.manual_status.auto_responder.message_away": "あなたのステータスを \"離席中\" に変更し、自動返信を無効化してもよろしいですか?",
|
||||
"modal.manual_status.auto_responder.message_dnd": "あなたのステータスを \"取り込み中\" に変更し、自動返信を無効化してもよろしいですか?",
|
||||
"modal.manual_status.auto_responder.message_offline": "あなたのステータスを \"オフライン\" に変更し、自動返信を無効化してもよろしいですか?",
|
||||
"modal.manual_status.auto_responder.message_online": "あなたのステータスを \"オンライン\" に変更し、自動返信を無効化してもよろしいですか?",
|
||||
"more_channels.archivedChannels": "アーカイブチャンネル",
|
||||
"more_channels.dropdownTitle": "表示する",
|
||||
"more_channels.noMore": "参加できるチャンネルがありません",
|
||||
"more_channels.publicChannels": "公開チャンネル",
|
||||
"more_channels.showArchivedChannels": "表示: アーカイブチャンネル",
|
||||
"more_channels.showPublicChannels": "表示: 公開チャンネル",
|
||||
"more_channels.title": "他のチャンネル",
|
||||
"msg_typing.areTyping": "{users}と{last}が入力しています...",
|
||||
"msg_typing.isTyping": "{user}が入力しています...",
|
||||
"navbar_dropdown.logout": "ログアウト",
|
||||
"navbar.channel_drawer.button": "チャンネルとチーム",
|
||||
"navbar.channel_drawer.hint": "チャンネルとチームのドロワーメニューを開く",
|
||||
"navbar.leave": "チャンネルから脱退する",
|
||||
"password_form.title": "パスワードの初期化",
|
||||
"password_send.checkInbox": "受信ボックスを確認してください。",
|
||||
@@ -457,26 +522,27 @@
|
||||
"password_send.error": "有効な電子メールアドレスを入力してください。",
|
||||
"password_send.link": "アカウントが存在する場合、パスワード初期化メールが送信されます:",
|
||||
"password_send.reset": "自分のパスワードを初期化する",
|
||||
"permalink.error.access": "削除されたメッセージまたはアクセス権限のないチャンネルへのパーマリンクです。",
|
||||
"permalink.error.access": "削除されたメッセージ、もしくはアクセス権限のないチャンネルへのパーマリンクです。",
|
||||
"permalink.error.link_not_found": "リンクが見つかりません",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "彼らはチャンネルにいないため、このメンションによる通知は行われませんでした。また、彼らはリンクされたグループのメンバーではないため、チャンネルに追加することもできません。彼らをこのチャンネルに追加するには、リンクされたグループに追加しなければなりません。",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": " と ",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "彼らを非公開チャンネルに追加しますか",
|
||||
"post_body.check_for_out_of_channel_mentions.link.public": "彼らをチャンネルに追加しますか",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? 彼らは全ての会話履歴にアクセスできます。",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "についての投稿が行われましたが、彼らはチャンネルにいません。 ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "についての投稿が行われましたが、彼はチャンネルにいません。 ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "彼らはチャンネルにいないため、このメンションによる通知は行われませんでした。以下の対処を行いますか? ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "彼らはチャンネルにいないため、このメンションによる通知は行われませんでした。以下の対処を行いますか? ",
|
||||
"post_body.commentedOn": "{name}のメッセージへのコメント: ",
|
||||
"post_body.deleted": "(メッセージは削除されています)",
|
||||
"post_info.auto_responder": "自動返信",
|
||||
"post_info.bot": "BOT",
|
||||
"post_info.del": "削除する",
|
||||
"post_info.edit": "編集する",
|
||||
"post_info.guest": "ゲスト",
|
||||
"post_info.message.show_less": "表示を少なくする",
|
||||
"post_info.message.show_more": "さらに表示",
|
||||
"post_info.system": "システム",
|
||||
"post_message_view.edited": "(編集済)",
|
||||
"posts_view.newMsg": "新しいメッセージ",
|
||||
"rename_channel.handleHolder": "小文字の英数字にしてください",
|
||||
"rename_channel.url": "URL",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "このスレッドの一部はデータ保持ポリシーによって削除されました。このスレッドに返信することはできません。",
|
||||
"search_bar.search": "検索する",
|
||||
"search_header.results": "検索結果",
|
||||
@@ -490,7 +556,7 @@
|
||||
"sidebar.favorite": "お気に入りチャンネル",
|
||||
"sidebar.pg": "非公開チャンネル",
|
||||
"sidebar.types.recent": "最近活動があったもの",
|
||||
"sidebar.unreads": "未読",
|
||||
"sidebar.unreads": "未読をもっと見る",
|
||||
"signup.email": "電子メールアドレスとパスワード",
|
||||
"signup.office365": "Office 365",
|
||||
"status_dropdown.set_away": "離席中",
|
||||
@@ -498,20 +564,22 @@
|
||||
"status_dropdown.set_offline": "オフライン",
|
||||
"status_dropdown.set_online": "オンライン",
|
||||
"status_dropdown.set_ooo": "外出中",
|
||||
"suggestion.mention.all": "注意: チャンネル内の全員に対して投稿します",
|
||||
"suggestion.mention.channel": "チャンネルの全員に通知します。",
|
||||
"suggestion.mention.all": "このチャンネルの全員に通知",
|
||||
"suggestion.mention.channel": "このチャンネルの全員に通知",
|
||||
"suggestion.mention.channels": "自分のチャンネル",
|
||||
"suggestion.mention.here": "チャンネル内のオンラインな全員へ通知します",
|
||||
"suggestion.mention.here": "このチャンネルの現在オンラインの人に通知",
|
||||
"suggestion.mention.members": "チャンネルのメンバー",
|
||||
"suggestion.mention.morechannels": "他のチャンネル",
|
||||
"suggestion.mention.nonmembers": "チャンネルにいません",
|
||||
"suggestion.mention.special": "特殊な誰かについての投稿",
|
||||
"suggestion.mention.you": "(あなた)",
|
||||
"suggestion.search.direct": "ダイレクトメッセージ",
|
||||
"suggestion.search.private": "非公開チャンネル",
|
||||
"suggestion.search.public": "公開チャンネル",
|
||||
"terms_of_service.agreeButton": "同意する",
|
||||
"terms_of_service.api_error": "リクエストを完了できませんでした。問題が続くようならば、システム管理者に連絡してください。",
|
||||
"user.settings.display.clockDisplay": "時計表示",
|
||||
"user.settings.display.custom_theme": "カスタムテーマ",
|
||||
"user.settings.display.militaryClock": "時計の24時間表示(例: 16:00)",
|
||||
"user.settings.display.normalClock": "時計の12時間表示(例: 4:00 PM)",
|
||||
"user.settings.display.preferTime": "時刻の表示形式を選択します。",
|
||||
@@ -538,13 +606,13 @@
|
||||
"user.settings.notifications.email.immediately": "すぐに",
|
||||
"user.settings.notifications.email.never": "通知しない",
|
||||
"user.settings.notifications.email.send": "電子メール通知を送信する",
|
||||
"user.settings.notifications.emailInfo": "あなたについての投稿とダイレクトメッセージに関して、電子メール通知を送ります。{siteName}から5分間以上離れている場合に送信されます。",
|
||||
"user.settings.notifications.emailInfo": "あなたについての投稿とダイレクトメッセージに関して、5分間以上オフラインまたは離席中の場合に電子メール通知が送信されます。",
|
||||
"user.settings.notifications.never": "通知しない",
|
||||
"user.settings.notifications.onlyMentions": "あなたについての投稿とダイレクトメッセージに関してのみ",
|
||||
"user.settings.notifications.onlyMentions": "あなたについての投稿とダイレクトメッセージのみ",
|
||||
"user.settings.push_notification.away": "離席中もしくはオフライン",
|
||||
"user.settings.push_notification.disabled": "プッシュ通知は有効化されていません",
|
||||
"user.settings.push_notification.disabled_long": "プッシュ通知はシステム管理者によって有効化されていません。",
|
||||
"user.settings.push_notification.offline": "オフライン",
|
||||
"user.settings.push_notification.online": "オンライン、離席中もしくはオフライン",
|
||||
"web.root.signup_info": "チームの全てのコミュニケーションを一箇所で、検索可能で、どこからでもアクセスできるものにします"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
"about.teamEditionSt": "모든 팀 커뮤니케이션을 한 곳에 모아 빠르게 찾고, 공유하세요.",
|
||||
"about.teamEditiont0": "팀 에디션",
|
||||
"about.teamEditiont1": "엔터프라이즈 에디션",
|
||||
"about.title": "Mattermost에 대하여",
|
||||
"announcment_banner.dont_show_again": "Don't show again",
|
||||
"about.title": "{appTitle} 정보",
|
||||
"announcment_banner.dont_show_again": "다시 보지 않기",
|
||||
"api.channel.add_member.added": "{username}님이 {addedUsername}님을 채널에 초대했습니다.",
|
||||
"archivedChannelMessage": "**보존 처리 된 채널**을 보고계십니다. 새 메시지를 게시 할 수 없습니다.",
|
||||
"center_panel.archived.closeChannel": "채널 닫기",
|
||||
"channel_header.addMembers": "멤버 추가",
|
||||
"channel_header.directchannel.you": "{displayname} (you) ",
|
||||
"channel_header.directchannel.you": "{displayname} (당신) ",
|
||||
"channel_header.manageMembers": "회원 관리",
|
||||
"channel_header.pinnedPosts": "포스트 고정",
|
||||
"channel_header.viewMembers": "회원 보기",
|
||||
@@ -33,16 +33,19 @@
|
||||
"channel_modal.optional": "(선택사항)",
|
||||
"channel_modal.purpose": "설명",
|
||||
"channel_modal.purposeEx": "예시: \"버그 수정과 품질 개선을 위한 채널입니다.\"",
|
||||
"channel_notifications.ignoreChannelMentions.settings": "Ignore @channel, @here, @all",
|
||||
"channel_notifications.ignoreChannelMentions.settings": "@channel, @here, @all 알림 끄기",
|
||||
"channel_notifications.muteChannel.settings": "채널 알림 끄기",
|
||||
"channel.channelHasGuests": "이 채널에는 게스트가 있습니다.",
|
||||
"channel.hasGuests": "이 그룹 메시지는 게스트가 있습니다.",
|
||||
"channel.isGuest": "이 사람은 게스트입니다.",
|
||||
"combined_system_message.added_to_channel.many_expanded": "{users}님과 {lastUser}님이 {actor}님에 의해 **채널에 추가되었습니다**.",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser}님이 {actor}님에 의해 **채널에 추가되었습니다**.",
|
||||
"combined_system_message.added_to_channel.one_you": "{actor}님에 의해 당신은 **채널에 추가되었습니다**.",
|
||||
"combined_system_message.added_to_channel.two": "{firstUser}님과 {secondUser}님이 {actor}님에 의해 **채널에 추가되었습니다**.",
|
||||
"combined_system_message.added_to_team.many_expanded": "{users}님과 {lastUser}님이 {actor}님에 의해 **팀에 추가되었습니다**.",
|
||||
"combined_system_message.added_to_team.one": "{firstUser}님이 {actor}님에 의해 **팀에 추가되었습니다**.",
|
||||
"combined_system_message.added_to_team.one_you": "{actor}님에 의해 당신은 **팀에 추가되었습니다**.",
|
||||
"combined_system_message.added_to_team.two": "{firstUser}님과 {secondUser}님이 {actor}님에 의해 **팀에 추가되었습니다**.",
|
||||
"combined_system_message.added_to_channel.one_you": "{actor}님이 당신을 **채널에 추가하였습니다**.",
|
||||
"combined_system_message.added_to_channel.two": "{actor}님이 {firstUser}님과 {secondUser}님을 **채널에 추가하였습니다**.",
|
||||
"combined_system_message.added_to_team.many_expanded": "{actor}님이 {users}님과 {lastUser}님을 **팀에 추가하였습니다**.",
|
||||
"combined_system_message.added_to_team.one": "{actor}님이 {firstUser}을 **팀에 추가하였습니다**.",
|
||||
"combined_system_message.added_to_team.one_you": "{actor}님이 당신을 **팀에 추가하였습니다**.",
|
||||
"combined_system_message.added_to_team.two": "{actor}님이 {firstUser}님과 {secondUser}님을 **팀에 추가하였습니다**.",
|
||||
"combined_system_message.joined_channel.many_expanded": "{users}님과 {lastUser}님이 **채널에 들어왔습니다**.",
|
||||
"combined_system_message.joined_channel.one": "{firstUser}님이 **채널에 들어왔습니다**.",
|
||||
"combined_system_message.joined_channel.one_you": "**채널에 들어왔습니다**.",
|
||||
@@ -69,22 +72,22 @@
|
||||
"combined_system_message.removed_from_team.two": "{firstUser}님과 {secondUser}님이 **팀에서 제외되었습니다**.",
|
||||
"combined_system_message.you": "당신",
|
||||
"create_comment.addComment": "답글 달기...",
|
||||
"create_post.deactivated": "You are viewing an archived channel with a deactivated user.",
|
||||
"create_post.write": "Write to {channelDisplayName}",
|
||||
"create_post.deactivated": "비활성화된 사용자와 함께 보관된 채널을 보고 계십니다.",
|
||||
"create_post.write": "{channelDisplayName}에 글쓰기",
|
||||
"date_separator.today": "오늘",
|
||||
"date_separator.yesterday": "어제",
|
||||
"edit_post.editPost": "글 편집하기...",
|
||||
"edit_post.save": "저장",
|
||||
"error.team_not_found.title": "Team Not Found",
|
||||
"file_attachment.download": "다운로드",
|
||||
"file_upload.fileAbove": "File above {max}MB cannot be uploaded: {filename}",
|
||||
"get_post_link_modal.title": "바로가기 링크 복사",
|
||||
"file_upload.fileAbove": "{max}MB 이상인 파일을 업로드하지 못했습니다: {filename}",
|
||||
"get_post_link_modal.title": "링크 복사",
|
||||
"integrations.add": "추가",
|
||||
"intro_messages.anyMember": " 모든 회원이 채널에 가입하고 글을 읽을 수 있습니다.",
|
||||
"intro_messages.beginning": "{name}의 시작",
|
||||
"intro_messages.channel": "채널",
|
||||
"intro_messages.creator": "이것은 {date}에 {creator} 님이 작성한 {name} {type}의 시작입니다.",
|
||||
"intro_messages.group": "비공개 채널",
|
||||
"intro_messages.creator": "이것은 {date}에 {creator} 님이 작성한 {name} 채널의 시작입니다.",
|
||||
"intro_messages.creatorPrivate": "{date}에 {name} 비공개 채널을 {creator} 님이 생성하였습니다.",
|
||||
"intro_messages.group_message": "This is the start of your direct message history with this teammate. Direct messages and files shared here are not shown to people outside this area.",
|
||||
"intro_messages.noCreator": "{name} {type}입니다. 만들어진 날짜: {date}.",
|
||||
"intro_messages.noCreator": "이것은 {date}에 생성된 {name} 채널의 시작입니다.",
|
||||
"intro_messages.onlyInvited": " 초대받은 회원만 이 비공개 그룹을 볼 수 있습니다.",
|
||||
"last_users_message.added_to_channel.type": "{actor}님이 **채널에 추가했습니다**.",
|
||||
"last_users_message.added_to_team.type": "{actor}님이 **팀에 추가했습니다**.",
|
||||
@@ -96,18 +99,18 @@
|
||||
"last_users_message.others": "{numOthers} 명이 ",
|
||||
"last_users_message.removed_from_channel.type": "**채널에서 삭제되었습니다**.",
|
||||
"last_users_message.removed_from_team.type": "**팀에서 삭제되었습니다**.",
|
||||
"login_mfa.enterToken": "To complete the sign in process, please enter a token from your smartphone's authenticator",
|
||||
"login_mfa.enterToken": "인증을 완료하시려면 스마트폰앱 인증앱에 표시된 토큰정보를 입력해주세요",
|
||||
"login_mfa.token": "MFA 토큰",
|
||||
"login_mfa.tokenReq": "MFA 토큰을 입력하세요.",
|
||||
"login.email": "이메일",
|
||||
"login.email": "전자우편",
|
||||
"login.forgot": "패스워드를 잊어버리셨나요?",
|
||||
"login.invalidPassword": "패스워드가 일치하지 않습니다.",
|
||||
"login.ldapUsername": "AD/LDAP 사용자명",
|
||||
"login.ldapUsernameLower": "AD/LDAP 사용자명",
|
||||
"login.noEmail": "이메일을 입력하세요.",
|
||||
"login.noEmailLdapUsername": "이메일 또는 {ldapUsername}을 입력하세요.",
|
||||
"login.noEmailUsername": "이메일 또는 사용자명을 입력하세요.",
|
||||
"login.noEmailUsernameLdapUsername": "이메일, 사용자명 또는 {ldapUsername}을 입력하세요.",
|
||||
"login.noEmail": "전자우편 주소를 입력하세요",
|
||||
"login.noEmailLdapUsername": "전자우편 주소 또는 {ldapUsername}을 입력하세요",
|
||||
"login.noEmailUsername": "전자우편 주소 또는 사용자 이름을 입력하세요",
|
||||
"login.noEmailUsernameLdapUsername": "전자우편 주소, 사용자 이름 또는 {ldapUsername}을 입력하세요",
|
||||
"login.noLdapUsername": "{ldapUsername}을 입력하세요.",
|
||||
"login.noPassword": "패스워드를 입력하세요.",
|
||||
"login.noUsername": "사용자명을 입력하세요.",
|
||||
@@ -118,113 +121,120 @@
|
||||
"login.username": "사용자명",
|
||||
"login.userNotFound": "입력된 계정과 일치하는 사용자 정보를 찾을 수 없습니다.",
|
||||
"mobile.about.appVersion": "App Version: {version} (Build {number})",
|
||||
"mobile.about.copyright": "Copyright 2015-{currentYear} Mattermost, Inc. All rights reserved",
|
||||
"mobile.about.copyright": "저작권 2015-{currentYear} Mattermost, Inc. 무단 전쟁와 무단 복제를 금합니다.",
|
||||
"mobile.about.database": "데이터베이스: {type}",
|
||||
"mobile.about.licensed": "다음 사용자에게 허가되었습니다: {company}",
|
||||
"mobile.about.powered_by": "{site} is powered by Mattermost",
|
||||
"mobile.about.powered_by": "{site}은(는) Mattermost에 의해 구동됩니다.",
|
||||
"mobile.about.serverVersion": "Server Version: {version} (Build {number})",
|
||||
"mobile.about.serverVersionNoBuild": "Server Version: {version}",
|
||||
"mobile.about.serverVersionNoBuild": "귀하의 버전: {version}",
|
||||
"mobile.account_notifications.reply.header": "댓글에 대한 알림 설정",
|
||||
"mobile.account_notifications.threads_mentions": "Mentions in threads",
|
||||
"mobile.account_notifications.threads_mentions": "쓰레드 멘션만",
|
||||
"mobile.account_notifications.threads_start": "등록한 모든 스레드의 답변에 대해 알림",
|
||||
"mobile.account_notifications.threads_start_participate": "등록하거나 답변했던 모든 스레드의 답변에 대해 알림",
|
||||
"mobile.account.settings.cancel": "취소",
|
||||
"mobile.account.settings.save": "저장",
|
||||
"mobile.action_menu.select": "Select an option",
|
||||
"mobile.action_menu.select": "옵션을 선택",
|
||||
"mobile.advanced_settings.clockDisplay": "시간 표시",
|
||||
"mobile.advanced_settings.delete": "삭제",
|
||||
"mobile.advanced_settings.delete_message": "\nThis will reset all offline data and restart the app. You will be automatically logged back in once the app restarts.\n",
|
||||
"mobile.advanced_settings.delete_title": "Delete Documents & Data",
|
||||
"mobile.advanced_settings.delete_message": "\n모든 오프라인 데이터가 초기화되고 앱이 다시 시작됩니다. 앱이 다시 시작되면 자동으로 다시 로그인됩니다.\n",
|
||||
"mobile.advanced_settings.delete_title": "데이터 및 캐시삭제",
|
||||
"mobile.advanced_settings.timezone": "표준 시간대",
|
||||
"mobile.advanced_settings.title": "고급 설정",
|
||||
"mobile.android.camera_permission_denied_description": "사진이나 비디오를 촬영 하려면, 권한 설정을 변경해 주세요.",
|
||||
"mobile.android.camera_permission_denied_title": "카메라 접근이 필요합니다.",
|
||||
"mobile.android.permission_denied_dismiss": "Dismiss",
|
||||
"mobile.android.permission_denied_retry": "Set permission",
|
||||
"mobile.android.photos_permission_denied_description": "사진이나 비디오를 촬영 하려면, 권한 설정을 변경해 주세요.",
|
||||
"mobile.android.photos_permission_denied_title": "Photo library access is required",
|
||||
"mobile.android.storage_permission_denied_description": "사진이나 비디오를 촬영 하려면, 권한 설정을 변경해 주세요.",
|
||||
"mobile.android.storage_permission_denied_title": "File Storage access is required",
|
||||
"mobile.android.videos_permission_denied_description": "사진이나 비디오를 촬영 하려면, 권한 설정을 변경해 주세요.",
|
||||
"mobile.android.videos_permission_denied_title": "Video library access is required",
|
||||
"mobile.announcement_banner.title": "Announcement",
|
||||
"mobile.authentication_error.message": "Mattermost has encountered an error. Please re-authenticate to start a new session.",
|
||||
"mobile.authentication_error.title": "Authentication Error",
|
||||
"mobile.calendar.dayNames": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",
|
||||
"mobile.calendar.dayNamesShort": "Sun,Mon,Tue,Wed,Thu,Fri,Sat",
|
||||
"mobile.calendar.monthNames": "January,February,March,April,May,June,July,August,September,October,November,December",
|
||||
"mobile.alert_dialog.alertCancel": "취소",
|
||||
"mobile.android.photos_permission_denied_description": "Upload photos to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your photo library.",
|
||||
"mobile.android.photos_permission_denied_title": "{applicationName}이(가) 사진에 접근하려고 합니다.",
|
||||
"mobile.android.videos_permission_denied_description": "Upload videos to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your video library.",
|
||||
"mobile.android.videos_permission_denied_title": "{applicationName}이(가) 파일에 접근하려고 합니다.",
|
||||
"mobile.announcement_banner.title": "공고",
|
||||
"mobile.calendar.dayNames": "일요일,월요일,화요일,수요일,목요일,금요일,토요일",
|
||||
"mobile.calendar.dayNamesShort": "일,월,화,수,목,금,토",
|
||||
"mobile.calendar.monthNames": "1월, 2월, 3월, 4월, 5월, 6월, 7월, 8월, 9월, 10월, 11월, 12월",
|
||||
"mobile.calendar.monthNamesShort": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",
|
||||
"mobile.channel_drawer.search": "Jump to...",
|
||||
"mobile.camera_photo_permission_denied_description": "Take photos and upload them to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your camera.",
|
||||
"mobile.camera_photo_permission_denied_title": "{applicationName}이(가) 카메라에 접근하려고 합니다.",
|
||||
"mobile.camera_video_permission_denied_description": "Take videos and upload them to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your camera.",
|
||||
"mobile.camera_video_permission_denied_title": "{applicationName}이(가) 카메라에 접근하려고 합니다.",
|
||||
"mobile.channel_drawer.search": "이동...",
|
||||
"mobile.channel_info.alertMessageConvertChannel": "{displayName}을(를) 비공개 채널로 변환하면 기록과 구성원이 보존됩니다. 공개 공유 파일은 링크가 있는 사람이면 누구나 액세스할 수 있습니다. 개인 채널의 회원 자격은 초대에 의해서만 이루어집니다.\n\n그 변화는 영구적이어서 돌이킬 수 없습니다.\n\n{displayName}을(를) 비공개 채널로 변환하시겠습니까?",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "{term} {name}을 (를) 종료 하시겠습니까?",
|
||||
"mobile.channel_info.alertMessageLeaveChannel": "{term} {name}에서 나가시겠습니까?",
|
||||
"mobile.channel_info.alertMessageUnarchiveChannel": "{term} {name}을 (를) 종료 하시겠습니까?",
|
||||
"mobile.channel_info.alertNo": "아니요",
|
||||
"mobile.channel_info.alertTitleConvertChannel": "{displayName} 채널을 비공개 채널로 전환하시겠습니까?",
|
||||
"mobile.channel_info.alertTitleDeleteChannel": "Archive {term}",
|
||||
"mobile.channel_info.alertTitleLeaveChannel": "{term} 나가기",
|
||||
"mobile.channel_info.alertTitleUnarchiveChannel": "Unarchive {term}",
|
||||
"mobile.channel_info.alertYes": "네",
|
||||
"mobile.channel_info.delete_failed": "We couldn't archive the channel {displayName}. Please check your connection and try again.",
|
||||
"mobile.channel_info.convert": "비공개 채널로 전환",
|
||||
"mobile.channel_info.convert_failed": "We were unable to convert {displayName} to a private channel.",
|
||||
"mobile.channel_info.convert_success": "{displayName} is now a private channel.",
|
||||
"mobile.channel_info.copy_header": "헤더복사",
|
||||
"mobile.channel_info.copy_purpose": "Copy Purpose",
|
||||
"mobile.channel_info.delete_failed": "{displayName} (으)로 다이렉트 메시지를 열 수 없습니다. 연결을 확인하고 다시 시도하십시오.",
|
||||
"mobile.channel_info.edit": "채널 편집",
|
||||
"mobile.channel_info.privateChannel": "비공개 채널",
|
||||
"mobile.channel_info.publicChannel": "공개 채널",
|
||||
"mobile.channel_info.unarchive_failed": "{displayName} (으)로 다이렉트 메시지를 열 수 없습니다. 연결을 확인하고 다시 시도하십시오.",
|
||||
"mobile.channel_list.alertNo": "아니요",
|
||||
"mobile.channel_list.alertYes": "네",
|
||||
"mobile.channel_list.channels": "CHANNELS",
|
||||
"mobile.channel_list.closeDM": "Close Direct Message",
|
||||
"mobile.channel_list.closeGM": "Close Group Message",
|
||||
"mobile.channel_list.archived": "보관됨",
|
||||
"mobile.channel_list.channels": "채널",
|
||||
"mobile.channel_list.closeDM": "그룹 메시지 닫기",
|
||||
"mobile.channel_list.closeGM": "그룹 메시지 닫기",
|
||||
"mobile.channel_list.members": "MEMBERS",
|
||||
"mobile.channel_list.not_member": "NOT A MEMBER",
|
||||
"mobile.channel_list.unreads": "읽지 않음",
|
||||
"mobile.channel_members.add_members_alert": "You must select at least one member to add to the channel.",
|
||||
"mobile.channel.markAsRead": "읽음으로 표시",
|
||||
"mobile.client_upgrade": "Update App",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "A new version is available for download.",
|
||||
"mobile.channel_members.add_members_alert": "채널에 추가할 최소 한명의 멤버를 선택해야합니다.",
|
||||
"mobile.client_upgrade": "업데이트 앱",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "새로운 버전을 다운로드 받을 수 있습니다.",
|
||||
"mobile.client_upgrade.can_upgrade_title": "Update Available",
|
||||
"mobile.client_upgrade.close": "Update Later",
|
||||
"mobile.client_upgrade.current_version": "Latest Version: {version}",
|
||||
"mobile.client_upgrade.download_error.message": "An error occurred downloading the new version.",
|
||||
"mobile.client_upgrade.download_error.title": "Unable to Install Update",
|
||||
"mobile.client_upgrade.latest_version": "Your Version: {version}",
|
||||
"mobile.client_upgrade.current_version": "귀하의 버전: {version}",
|
||||
"mobile.client_upgrade.download_error.message": "새 버전을 다운로드 하는 동안 오류가 발생했습니다.",
|
||||
"mobile.client_upgrade.download_error.title": "업데이트를 설치할 수 없습니다.",
|
||||
"mobile.client_upgrade.latest_version": "귀하의 버전: {version}",
|
||||
"mobile.client_upgrade.listener.dismiss_button": "Dismiss",
|
||||
"mobile.client_upgrade.listener.learn_more_button": "Learn More",
|
||||
"mobile.client_upgrade.listener.learn_more_button": "더 알아보기",
|
||||
"mobile.client_upgrade.listener.message": "A client upgrade is available!",
|
||||
"mobile.client_upgrade.listener.upgrade_button": "Upgrade",
|
||||
"mobile.client_upgrade.must_upgrade_subtitle": "Please update the app to continue.",
|
||||
"mobile.client_upgrade.must_upgrade_title": "Update Required",
|
||||
"mobile.client_upgrade.no_upgrade_subtitle": "You already have the latest version.",
|
||||
"mobile.client_upgrade.no_upgrade_title": "Your App Is Up to Date",
|
||||
"mobile.client_upgrade.upgrade": "Update",
|
||||
"mobile.client_upgrade.listener.upgrade_button": "업그레이드",
|
||||
"mobile.client_upgrade.must_upgrade_subtitle": "계속하기 위해서 앱을 업데이트 해주세요.",
|
||||
"mobile.client_upgrade.must_upgrade_title": "업데이트가 필요합니다.",
|
||||
"mobile.client_upgrade.no_upgrade_subtitle": "이미 최신 버전입니다.",
|
||||
"mobile.client_upgrade.no_upgrade_title": "최신 앱 입니다.",
|
||||
"mobile.client_upgrade.upgrade": "업데이트",
|
||||
"mobile.commands.error_title": "Error Executing Command",
|
||||
"mobile.components.error_list.dismiss_all": "Dismiss All",
|
||||
"mobile.components.select_server_view.connect": "연결 되었습니다.",
|
||||
"mobile.components.select_server_view.connect": "연결",
|
||||
"mobile.components.select_server_view.connecting": "연결 중...",
|
||||
"mobile.components.select_server_view.enterServerUrl": "Enter Server URL",
|
||||
"mobile.components.select_server_view.proceed": "Proceed",
|
||||
"mobile.components.select_server_view.proceed": "진행",
|
||||
"mobile.components.select_server_view.siteUrlPlaceholder": "https://mattermost.example.com",
|
||||
"mobile.create_channel": "Create",
|
||||
"mobile.create_channel.private": "새 비공개 채널",
|
||||
"mobile.create_channel.public": "새 공개 채널",
|
||||
"mobile.create_post.read_only": "이 채널은 읽기 전용입니다.",
|
||||
"mobile.custom_list.no_results": "결과가 없습니다.",
|
||||
"mobile.display_settings.sidebar": "사이드바",
|
||||
"mobile.display_settings.theme": "테마",
|
||||
"mobile.document_preview.failed_description": "An error occurred while opening the document. Please make sure you have a {fileType} viewer installed and try again.\n",
|
||||
"mobile.document_preview.failed_title": "Open Document failed",
|
||||
"mobile.downloader.android_complete": "Download complete",
|
||||
"mobile.downloader.android_failed": "Download failed",
|
||||
"mobile.downloader.android_permission": "We need access to the downloads folder to save files.",
|
||||
"mobile.downloader.android_started": "Download started",
|
||||
"mobile.downloader.android_success": "download successful",
|
||||
"mobile.downloader.complete": "Download complete",
|
||||
"mobile.downloader.disabled_description": "File downloads are disabled on this server. Please contact your System Admin for more details.\n",
|
||||
"mobile.downloader.disabled_title": "Download disabled",
|
||||
"mobile.downloader.downloading": "Downloading...",
|
||||
"mobile.downloader.failed_description": "An error occurred while downloading the file. Please check your internet connection and try again.\n",
|
||||
"mobile.downloader.failed_title": "Download failed",
|
||||
"mobile.downloader.image_saved": "Image Saved",
|
||||
"mobile.downloader.video_saved": "Video Saved",
|
||||
"mobile.drawer.teamsTitle": "서비스 약관",
|
||||
"mobile.document_preview.failed_description": "문서를 여는 중에 에러가 발생했습니다. {fileType} 뷰어를 설치한 후에 다시 시도해 주십시오.\n",
|
||||
"mobile.document_preview.failed_title": "문서 열기를 실패했습니다.",
|
||||
"mobile.downloader.android_complete": "다운로드 완료",
|
||||
"mobile.downloader.android_failed": "다운로드 실패",
|
||||
"mobile.downloader.android_permission": "파일 저장을 위해 다운로드 폴더 접근 권한이 필요합니다.",
|
||||
"mobile.downloader.android_started": "다운로드 시작",
|
||||
"mobile.downloader.complete": "다운로드 완료",
|
||||
"mobile.downloader.disabled_description": "이 서버에 파일을 다운로드할 수 없습니다. 자세한 사항은 시스템 관리자에게 문의하세요.\n",
|
||||
"mobile.downloader.disabled_title": "다운로드 실패",
|
||||
"mobile.downloader.downloading": "다운로드중...",
|
||||
"mobile.downloader.failed_description": "파일을 다운로드 하는 중 오류가 발생했습니다. 인터넷 연결 상태를 확인하고 다시 시도해 주세요.\n",
|
||||
"mobile.downloader.failed_title": "다운로드 실패",
|
||||
"mobile.downloader.image_saved": "이미지 저장 완료",
|
||||
"mobile.downloader.video_saved": "비디오 저장 완료",
|
||||
"mobile.drawer.teamsTitle": "팀",
|
||||
"mobile.edit_channel": "저장",
|
||||
"mobile.edit_post.title": "Editing Message",
|
||||
"mobile.edit_post.title": "메시지 수정",
|
||||
"mobile.edit_profile.remove_profile_photo": "사진 삭제",
|
||||
"mobile.emoji_picker.activity": "활동",
|
||||
"mobile.emoji_picker.custom": "CUSTOM",
|
||||
"mobile.emoji_picker.custom": "커스텀",
|
||||
"mobile.emoji_picker.flags": "FLAGS",
|
||||
"mobile.emoji_picker.foods": "FOODS",
|
||||
"mobile.emoji_picker.nature": "NATURE",
|
||||
@@ -233,167 +243,195 @@
|
||||
"mobile.emoji_picker.places": "PLACES",
|
||||
"mobile.emoji_picker.recent": "RECENTLY USED",
|
||||
"mobile.emoji_picker.symbols": "SYMBOLS",
|
||||
"mobile.error_handler.button": "Relaunch",
|
||||
"mobile.error_handler.description": "\nClick relaunch to open the app again. After restart, you can report the problem from the settings menu.\n",
|
||||
"mobile.error_handler.title": "Unexpected error occurred",
|
||||
"mobile.extension.authentication_required": "Authentication required: Please first login using the app.",
|
||||
"mobile.error_handler.button": "재실행",
|
||||
"mobile.error_handler.description": "\nTap relaunch to open the app again. After restart, you can report the problem from the settings menu.\n",
|
||||
"mobile.error_handler.title": "예상치 못한 오류가 발생했습니다.",
|
||||
"mobile.extension.authentication_required": "인증 필요: 먼저 앱을 사용하여 로그인하십시오.",
|
||||
"mobile.extension.file_error": "There was an error reading the file to be shared.\nPlease try again.",
|
||||
"mobile.extension.file_limit": "Sharing is limited to a maximum of 5 files.",
|
||||
"mobile.extension.file_limit": "파일 공유는 최대 5개의 파일로 제한됩니다.",
|
||||
"mobile.extension.max_file_size": "File attachments shared in Mattermost must be less than {size}.",
|
||||
"mobile.extension.permission": "Mattermost needs access to the device storage to share files.",
|
||||
"mobile.extension.team_required": "파일을 공유하려면 먼저 팀에 소속해 있어야 합니다.",
|
||||
"mobile.extension.title": "Share in Mattermost",
|
||||
"mobile.failed_network_action.description": "There seems to be a problem with your internet connection. Make sure you have an active connection and try again.",
|
||||
"mobile.failed_network_action.retry": "다시 시도",
|
||||
"mobile.failed_network_action.shortDescription": "Make sure you have an active connection and try again.",
|
||||
"mobile.failed_network_action.shortDescription": "Messages will load when you have an internet connection.",
|
||||
"mobile.failed_network_action.teams_channel_description": "Channels could not be loaded for {teamName}.",
|
||||
"mobile.failed_network_action.teams_description": "Teams could not be loaded.",
|
||||
"mobile.failed_network_action.teams_title": "Something went wrong",
|
||||
"mobile.failed_network_action.title": "인터넷 연결 안 됨",
|
||||
"mobile.file_upload.browse": "Browse Files",
|
||||
"mobile.file_upload.camera_photo": "Take Photo",
|
||||
"mobile.file_upload.camera_video": "Take Video",
|
||||
"mobile.file_upload.library": "Photo Library",
|
||||
"mobile.file_upload.max_warning": "Uploads limited to 5 files maximum.",
|
||||
"mobile.file_upload.video": "Video Library",
|
||||
"mobile.file_upload.camera_photo": "사진 촬영",
|
||||
"mobile.file_upload.camera_video": "비디오 촬영",
|
||||
"mobile.file_upload.library": "사진 라이브러리",
|
||||
"mobile.file_upload.max_warning": "최대 5개의 파일을 업로드 가능.",
|
||||
"mobile.file_upload.unsupportedMimeType": "JPG 또는 PNG 이미지만 프로필 사진으로 사용할 수 있습니다.",
|
||||
"mobile.file_upload.video": "비디오 라이브러리",
|
||||
"mobile.files_paste.error_description": "An error occurred while pasting the file(s). Please try again.",
|
||||
"mobile.files_paste.error_dismiss": "Dismiss",
|
||||
"mobile.files_paste.error_title": "Paste failed",
|
||||
"mobile.flagged_posts.empty_description": "중요한 메시지를 따로 모아 확인할 수 있습니다. 중요 메시지는 개인별로 표시되며 다른 사람이 볼 수 없습니다.",
|
||||
"mobile.flagged_posts.empty_title": "중요 메세지 없음",
|
||||
"mobile.flagged_posts.empty_title": "중요 메시지 없음",
|
||||
"mobile.help.title": "도움말",
|
||||
"mobile.image_preview.save": "Save Image",
|
||||
"mobile.image_preview.save_video": "Save Video",
|
||||
"mobile.image_preview.save": "이미지 저장",
|
||||
"mobile.image_preview.save_video": "비디오 저장",
|
||||
"mobile.intro_messages.default_message": "팀원들이 가입할 때 처음으로 보게 되는 채널입니다. 모두가 알아야 할 업데이트를 게시할 때 사용하십시오.",
|
||||
"mobile.intro_messages.default_welcome": "{name}에 오신걸 환영합니다!",
|
||||
"mobile.intro_messages.DM": "{teammate}와 개인 메시지의 시작입니다. 개인 메시지나 여기서 공유된 파일들은 외부에서 보여지지 않습니다.",
|
||||
"mobile.ios.photos_permission_denied_description": "사진이나 비디오를 촬영 하려면, 권한 설정을 변경해 주세요.",
|
||||
"mobile.join_channel.error": "We couldn't join the channel {displayName}. Please check your connection and try again.",
|
||||
"mobile.loading_channels": "Loading Channels...",
|
||||
"mobile.loading_members": "Loading Members...",
|
||||
"mobile.loading_options": "Loading Options...",
|
||||
"mobile.intro_messages.DM": "{teammate} 님과의 개인 메시지가 시작되었습니다. 개인 메시지나 여기서 공유된 파일들은 외부에서 볼 수 없습니다.",
|
||||
"mobile.ios.photos_permission_denied_description": "Upload photos and videos to your Mattermost instance or save them to your device. Open Settings to grant Mattermost Read and Write access to your photo and video library.",
|
||||
"mobile.ios.photos_permission_denied_title": "{applicationName}이(가) 사진에 접근하려고 합니다.",
|
||||
"mobile.join_channel.error": "{displayName} (으)로 다이렉트 메시지를 열 수 없습니다. 연결을 확인하고 다시 시도하십시오.",
|
||||
"mobile.loading_channels": "채널 불러오는 중...",
|
||||
"mobile.loading_members": "멤버 불러오는 중...",
|
||||
"mobile.loading_options": "옵션 로딩중...",
|
||||
"mobile.loading_posts": "메시지 불러오는 중...",
|
||||
"mobile.login_options.choose_title": "Choose your login method",
|
||||
"mobile.long_post_title": "{channelName} - Post",
|
||||
"mobile.long_post_title": "{channelName} - 메시지",
|
||||
"mobile.managed.blocked_by": "Blocked by {vendor}",
|
||||
"mobile.managed.exit": "종료",
|
||||
"mobile.managed.jailbreak": "Jailbroken devices are not trusted by {vendor}, please exit the app.",
|
||||
"mobile.managed.jailbreak": "탈옥 기기는 {vendor}에 의해 신뢰되지 않습니다. 앱을 종료하십시오.",
|
||||
"mobile.managed.not_secured.android": "This device must be secured with a screen lock to use Mattermost.",
|
||||
"mobile.managed.not_secured.ios": "이 장치는 Matttermost가 사용하려면 Passcode와 함께 보호해야 합니다.\n\n셋팅 > Touch ID & Passcode",
|
||||
"mobile.managed.not_secured.ios.touchId": "이 장치는 Matttermost가 사용하려면 Passcode와 함께 보호해야 합니다.\n\n셋팅 > Touch ID & Passcode",
|
||||
"mobile.managed.secured_by": "Secured by {vendor}",
|
||||
"mobile.managed.settings": "설정으로 이동",
|
||||
"mobile.markdown.code.copy_code": "Copy Code",
|
||||
"mobile.markdown.code.plusMoreLines": "+{count, number} more {count, plural, one {line} other {lines}}",
|
||||
"mobile.markdown.image.too_large": "Image exceeds max dimensions of {maxWidth} by {maxHeight}:",
|
||||
"mobile.markdown.link.copy_url": "Copy URL",
|
||||
"mobile.markdown.link.copy_url": "URL 복사",
|
||||
"mobile.mention.copy_mention": "Copy Mention",
|
||||
"mobile.message_length.message": "Your current message is too long. Current character count: {max}/{count}",
|
||||
"mobile.message_length.title": "Message Length",
|
||||
"mobile.message_length.message": "현재 메시지가 너무 깁니다. 현재 글자 수: {count}/{max}",
|
||||
"mobile.message_length.title": "메시지 길이",
|
||||
"mobile.more_dms.add_more": "You can add {remaining, number} more users",
|
||||
"mobile.more_dms.cannot_add_more": "You cannot add more users",
|
||||
"mobile.more_dms.one_more": "You can add 1 more user",
|
||||
"mobile.more_dms.start": "Start",
|
||||
"mobile.more_dms.title": "New Conversation",
|
||||
"mobile.more_dms.you": "@{username} - you",
|
||||
"mobile.notice_mobile_link": "mobile apps",
|
||||
"mobile.notice_platform_link": "server",
|
||||
"mobile.notice_text": "Mattermost is made possible by the open source software used in our {platform} and {mobile}.",
|
||||
"mobile.more_dms.cannot_add_more": "더 이상 사용자를 추가 할 수 없습니다.",
|
||||
"mobile.more_dms.one_more": "더 이상 사용자를 추가 할 수 없습니다.",
|
||||
"mobile.more_dms.start": "시작",
|
||||
"mobile.more_dms.title": "새로운 대화",
|
||||
"mobile.more_dms.you": "@{username} - 당신",
|
||||
"mobile.notice_mobile_link": "모바일 앱",
|
||||
"mobile.notice_platform_link": "서버",
|
||||
"mobile.notice_text": "{platform} 및 {mobile}에서 사용되는 오픈소스 소프트웨어를 통해 Mattermost를 만들 수 있습니다.",
|
||||
"mobile.notification_settings_mentions.keywords": "키워드",
|
||||
"mobile.notification_settings_mentions.keywordsDescription": "Other words that trigger a mention",
|
||||
"mobile.notification_settings_mentions.keywordsHelp": "Keywords are non-case sensitive and should be separated by a comma.",
|
||||
"mobile.notification_settings_mentions.wordsTrigger": "WORDS THAT TRIGGER MENTIONS",
|
||||
"mobile.notification_settings_mobile.default_sound": "Default ({sound})",
|
||||
"mobile.notification_settings_mobile.default_sound": "기본 ({sound})",
|
||||
"mobile.notification_settings_mobile.light": "Light",
|
||||
"mobile.notification_settings_mobile.no_sound": "None",
|
||||
"mobile.notification_settings_mobile.push_activity": "SEND NOTIFICATIONS",
|
||||
"mobile.notification_settings_mobile.push_activity": "알림 수신 설정",
|
||||
"mobile.notification_settings_mobile.push_activity_android": "답글 알림",
|
||||
"mobile.notification_settings_mobile.push_status": "TRIGGER PUSH NOTIFICATIONS WHEN",
|
||||
"mobile.notification_settings_mobile.push_status_android": "지정한 상태일 때 모바일 푸시 알림",
|
||||
"mobile.notification_settings_mobile.sound": "Sound",
|
||||
"mobile.notification_settings_mobile.sound": "소리",
|
||||
"mobile.notification_settings_mobile.sounds_title": "알림음",
|
||||
"mobile.notification_settings_mobile.test": "Send me a test notification",
|
||||
"mobile.notification_settings_mobile.test_push": "This is a test push notification",
|
||||
"mobile.notification_settings_mobile.vibrate": "Vibrate",
|
||||
"mobile.notification_settings_mobile.test": "나에게 테스트용 푸시 알림 보내기",
|
||||
"mobile.notification_settings_mobile.test_push": "이것은 테스트 푸시 알림입니다.",
|
||||
"mobile.notification_settings_mobile.vibrate": "진동",
|
||||
"mobile.notification_settings.auto_responder_short": "Automatic Replies",
|
||||
"mobile.notification_settings.auto_responder.default_message": "Hello, I am out of office and unable to respond to messages.",
|
||||
"mobile.notification_settings.auto_responder.enabled": "Enabled",
|
||||
"mobile.notification_settings.auto_responder.footer_message": "개인 메시지에 대한 응답을 자동으로 전송되는 사용자 지정 메시지를 설정합니다. 공개, 비공개 채널의 멘션은 자동 응답 기능이 실행되지 않습니다. 자동 응답을 사용하면 상태가 부재중으로 설정되고 이메일 알림, 푸쉬 알림은 해제됩니다.",
|
||||
"mobile.notification_settings.auto_responder.default_message": "안녕하세요. 저는 지금 부재중이라서 메시지에 응답할 수 없습니다.",
|
||||
"mobile.notification_settings.auto_responder.enabled": "활성화",
|
||||
"mobile.notification_settings.auto_responder.footer_message": "개인 메시지에 대한 응답을 자동으로 전송되는 사용자 지정 메시지를 설정합니다. 공개, 비공개 채널의 멘션은 자동 응답 기능이 실행되지 않습니다. 자동 응답을 사용하면 상태가 부재 중으로 설정되고 전자우편 알림, 푸시 알림은 해제됩니다.",
|
||||
"mobile.notification_settings.auto_responder.message_placeholder": "메시지",
|
||||
"mobile.notification_settings.auto_responder.message_title": "CUSTOM MESSAGE",
|
||||
"mobile.notification_settings.email": "이메일",
|
||||
"mobile.notification_settings.email_title": "이메일 알림",
|
||||
"mobile.notification_settings.email.send": "SEND EMAIL NOTIFICATIONS",
|
||||
"mobile.notification_settings.mentions_replies": "Mentions and Replies",
|
||||
"mobile.notification_settings.email": "전자우편",
|
||||
"mobile.notification_settings.email_title": "전자우편 알림",
|
||||
"mobile.notification_settings.email.send": "알림 수신 설정",
|
||||
"mobile.notification_settings.mentions_replies": "멘션과 댓글",
|
||||
"mobile.notification_settings.mentions.channelWide": "Channel-wide mentions",
|
||||
"mobile.notification_settings.mentions.reply_title": "댓글에 대한 알림 설정",
|
||||
"mobile.notification_settings.mentions.sensitiveName": "Your case sensitive first name",
|
||||
"mobile.notification_settings.mentions.sensitiveUsername": "Your non-case sensitive username",
|
||||
"mobile.notification_settings.mobile": "Mobile",
|
||||
"mobile.notification_settings.mentions.sensitiveUsername": "대소문자를 구분하지 않는 사용자 명",
|
||||
"mobile.notification_settings.mobile": "모바일",
|
||||
"mobile.notification_settings.mobile_title": "모바일 푸시 알림",
|
||||
"mobile.notification_settings.modal_cancel": "CANCEL",
|
||||
"mobile.notification_settings.modal_save": "SAVE",
|
||||
"mobile.notification_settings.modal_cancel": "취소",
|
||||
"mobile.notification_settings.modal_save": "저장",
|
||||
"mobile.notification_settings.ooo_auto_responder": "개인 메시지 자동 응답",
|
||||
"mobile.notification_settings.save_failed_description": "The notification settings failed to save due to a connection issue, please try again.",
|
||||
"mobile.notification_settings.save_failed_title": "Connection issue",
|
||||
"mobile.notification_settings.save_failed_title": "연결 문제",
|
||||
"mobile.notification.in": " in ",
|
||||
"mobile.offlineIndicator.connected": "연결 되었습니다.",
|
||||
"mobile.offlineIndicator.connecting": "연결 중...",
|
||||
"mobile.offlineIndicator.offline": "인터넷 연결 안 됨",
|
||||
"mobile.open_dm.error": "We couldn't open a direct message with {displayName}. Please check your connection and try again.",
|
||||
"mobile.open_gm.error": "We couldn't open a group message with those users. Please check your connection and try again.",
|
||||
"mobile.open_unknown_channel.error": "Unable to join the channel. Please reset the cache and try again.",
|
||||
"mobile.open_dm.error": "{displayName} (으)로 다이렉트 메시지를 열 수 없습니다. 연결을 확인하고 다시 시도하십시오.",
|
||||
"mobile.open_gm.error": "해당 사용자와 그룹 메시지를 열 수 없습니다. 연결을 확인하고 다시 시도하십시오.",
|
||||
"mobile.open_unknown_channel.error": "채널에 접속할 수 없습니다. cache 를 리셋하고 다시 시도하세요.",
|
||||
"mobile.permission_denied_dismiss": "Don't Allow",
|
||||
"mobile.permission_denied_retry": "설정",
|
||||
"mobile.photo_library_permission_denied_description": "사진이나 비디오를 촬영 하려면, 권한 설정을 변경해 주세요.",
|
||||
"mobile.photo_library_permission_denied_title": "{applicationName}이(가) 사진 라이브러리에 접근하려고 합니다.",
|
||||
"mobile.pinned_posts.empty_description": "Pin important items by holding down on any message and selecting \"Pin to Channel\".",
|
||||
"mobile.pinned_posts.empty_title": "포스트 고정",
|
||||
"mobile.post_info.add_reaction": "Add Reaction",
|
||||
"mobile.post_info.copy_text": "Copy Text",
|
||||
"mobile.post_info.add_reaction": "반응 추가",
|
||||
"mobile.post_info.copy_text": "내용 복사",
|
||||
"mobile.post_info.flag": "중요 지정",
|
||||
"mobile.post_info.mark_unread": "안 읽음 표시",
|
||||
"mobile.post_info.pin": "공지하기",
|
||||
"mobile.post_info.reply": "답글",
|
||||
"mobile.post_info.unflag": "중요 메시지 해제",
|
||||
"mobile.post_info.unpin": "공지 해제하기",
|
||||
"mobile.post_pre_header.flagged": "Flagged",
|
||||
"mobile.post_pre_header.pinned": "공지사항",
|
||||
"mobile.post_pre_header.pinned_flagged": "Pinned and Flagged",
|
||||
"mobile.post_textbox.empty.message": "You are trying to send an empty message.\nPlease make sure you have a message or at least one attached file.",
|
||||
"mobile.post_textbox.empty.ok": "확인",
|
||||
"mobile.post_textbox.empty.title": "Empty Message",
|
||||
"mobile.post_textbox.entire_channel.cancel": "취소",
|
||||
"mobile.post_textbox.entire_channel.confirm": "확인",
|
||||
"mobile.post_textbox.entire_channel.message": "By using @all or @channel you are about to send notifications to {totalMembers, number} {totalMembers, plural, one {person} other {people}}. Are you sure you want to do this?",
|
||||
"mobile.post_textbox.entire_channel.message.with_timezones": "By using @all or @channel you are about to send notifications to {totalMembers, number} {totalMembers, plural, one {person} other {people}} in {timezones, number} {timezones, plural, one {timezone} other {timezones}}. Are you sure you want to do this?",
|
||||
"mobile.post_textbox.entire_channel.title": "Confirm sending notifications to entire channel",
|
||||
"mobile.post_textbox.uploadFailedDesc": "Some attachments failed to upload to the server. Are you sure you want to post the message?",
|
||||
"mobile.post_textbox.uploadFailedTitle": "Attachment failure",
|
||||
"mobile.post_textbox.uploadFailedTitle": "첨부 실패",
|
||||
"mobile.post.cancel": "취소",
|
||||
"mobile.post.delete_question": "정말 게시물을 삭제하시겠습니까?",
|
||||
"mobile.post.delete_title": "Delete Post",
|
||||
"mobile.post.failed_delete": "Delete Message",
|
||||
"mobile.post.delete_title": "게시글 삭제",
|
||||
"mobile.post.failed_delete": "메시지 삭제",
|
||||
"mobile.post.failed_retry": "다시 시도",
|
||||
"mobile.post.failed_title": "Unable to send your message",
|
||||
"mobile.post.retry": "Refresh",
|
||||
"mobile.post.failed_title": "메시지를 보낼 수 없습니다",
|
||||
"mobile.post.retry": "새로 고침",
|
||||
"mobile.posts_view.moreMsg": "More New Messages Above",
|
||||
"mobile.privacy_link": "개인정보처리방침",
|
||||
"mobile.push_notification_reply.button": "보내기",
|
||||
"mobile.push_notification_reply.placeholder": "댓글을 쓰세요...",
|
||||
"mobile.push_notification_reply.title": "답글",
|
||||
"mobile.reaction_header.all_emojis": "모두",
|
||||
"mobile.recent_mentions.empty_description": "Messages containing your username and other words that trigger mentions will appear here.",
|
||||
"mobile.recent_mentions.empty_title": "최근 멘션",
|
||||
"mobile.rename_channel.display_name_maxLength": "Channel name must be less than {maxLength, number} characters",
|
||||
"mobile.rename_channel.display_name_minLength": "Channel name must be {minLength, number} or more characters",
|
||||
"mobile.rename_channel.display_name_required": "Channel name is required",
|
||||
"mobile.rename_channel.name_lowercase": "Must be lowercase alphanumeric characters",
|
||||
"mobile.rename_channel.name_maxLength": "URL must be less than {maxLength, number} characters",
|
||||
"mobile.rename_channel.name_minLength": "URL must be {minLength, number} or more characters",
|
||||
"mobile.rename_channel.name_required": "URL is required",
|
||||
"mobile.reply_post.failed": "Message failed to send.",
|
||||
"mobile.rename_channel.display_name_maxLength": "이 필드는 {maxLength, number} 자보다 작아야 합니다.",
|
||||
"mobile.rename_channel.display_name_minLength": "URL은 {minLength, number}자 이상이어야 합니다.",
|
||||
"mobile.rename_channel.display_name_required": "채널명은 필수입니다",
|
||||
"mobile.rename_channel.name_lowercase": "알파벳 소문자로 작성 가능",
|
||||
"mobile.rename_channel.name_maxLength": "이 필드는 {maxLength, number} 자보다 작아야 합니다.",
|
||||
"mobile.rename_channel.name_minLength": "URL은 {minLength, number}자 이상이어야 합니다.",
|
||||
"mobile.rename_channel.name_required": "URL이 필요합니다.",
|
||||
"mobile.reply_post.failed": "메시지 전송이 실패했습니다.",
|
||||
"mobile.request.invalid_response": "Received invalid response from the server.",
|
||||
"mobile.reset_status.alert_cancel": "취소",
|
||||
"mobile.reset_status.alert_ok": "Ok",
|
||||
"mobile.reset_status.title_ooo": "Disable \"Out Of Office\"?",
|
||||
"mobile.retry_message": "메세지를 새로 고침 하는데 실패하였습니다. 당겨 올려서 다시 시도해 보세요.",
|
||||
"mobile.retry_message": "메시지를 새로 불러오지 못했습니다. 당겨 올려서 다시 시도해 보세요.",
|
||||
"mobile.routes.channel_members.action": "팀에서 제거하기",
|
||||
"mobile.routes.channel_members.action_message": "You must select at least one member to remove from the channel.",
|
||||
"mobile.routes.channel_members.action_message_confirm": "Are you sure you want to remove the selected members from the channel?",
|
||||
"mobile.routes.channelInfo": "Info",
|
||||
"mobile.routes.channel_members.action_message": "채널에 추가할 최소 한명의 멤버를 선택해야합니다.",
|
||||
"mobile.routes.channel_members.action_message_confirm": "채널에서 선택한 멤버를 삭제하시겠습니까?",
|
||||
"mobile.routes.channelInfo": "정보",
|
||||
"mobile.routes.channelInfo.createdBy": "Created by {creator} on ",
|
||||
"mobile.routes.channelInfo.delete_channel": "Archive Channel",
|
||||
"mobile.routes.channelInfo.delete_channel": "보관 채널",
|
||||
"mobile.routes.channelInfo.favorite": "즐겨찾기",
|
||||
"mobile.routes.channelInfo.groupManaged": "연결된 그룹에 의해 관리되는 구성원",
|
||||
"mobile.routes.channelInfo.unarchive_channel": "채널 보관",
|
||||
"mobile.routes.code": "{language} Code",
|
||||
"mobile.routes.code.noLanguage": "Code",
|
||||
"mobile.routes.edit_profile": "Edit Profile",
|
||||
"mobile.routes.code.noLanguage": "코드",
|
||||
"mobile.routes.edit_profile": "프로필 수정",
|
||||
"mobile.routes.login": "로그인",
|
||||
"mobile.routes.loginOptions": "Login Chooser",
|
||||
"mobile.routes.mfa": "Enable Multi-factor Authentication:",
|
||||
"mobile.routes.selectChannel": "채널 삭제",
|
||||
"mobile.routes.selectTeam": "팀 선택",
|
||||
"mobile.routes.settings": "설정",
|
||||
"mobile.routes.sso": "Single Sign-On",
|
||||
"mobile.routes.table": "Table",
|
||||
"mobile.routes.sso": "싱글 사인온",
|
||||
"mobile.routes.table": "표",
|
||||
"mobile.routes.tableImage": "이미지",
|
||||
"mobile.routes.thread": "{channelName} Thread",
|
||||
"mobile.routes.thread_dm": "Direct Message Thread",
|
||||
"mobile.routes.user_profile": "Profile",
|
||||
"mobile.routes.user_profile.local_time": "LOCAL TIME",
|
||||
"mobile.routes.thread_dm": "다이렉트 메시지 스레드",
|
||||
"mobile.routes.user_profile": "프로필",
|
||||
"mobile.routes.user_profile.edit": "편집",
|
||||
"mobile.routes.user_profile.local_time": "현지 시간",
|
||||
"mobile.routes.user_profile.send_message": "메시지 보내기",
|
||||
"mobile.search.after_modifier_description": "to find posts after a specific date",
|
||||
"mobile.search.before_modifier_description": "to find posts before a specific date",
|
||||
@@ -401,17 +439,24 @@
|
||||
"mobile.search.from_modifier_title": "사용자명",
|
||||
"mobile.search.in_modifier_description": "to find posts in specific channels",
|
||||
"mobile.search.in_modifier_title": "channel-name",
|
||||
"mobile.search.jump": "Jump to recent messages",
|
||||
"mobile.search.no_results": "No Results Found",
|
||||
"mobile.search.jump": "최근 메세지로 이동",
|
||||
"mobile.search.no_results": "검색 결과가 없습니다.",
|
||||
"mobile.search.on_modifier_description": "to find posts on a specific date",
|
||||
"mobile.search.recent_title": "Recent Searches",
|
||||
"mobile.select_team.guest_cant_join_team": "Your guest account has no teams or channels assigned. Please contact an administrator.",
|
||||
"mobile.select_team.join_open": "참가 가능한 공개 팀",
|
||||
"mobile.select_team.no_teams": "There are no available teams for you to join.",
|
||||
"mobile.select_team.no_teams": "참여 할 수있는 팀이 없습니다.",
|
||||
"mobile.server_link.error.text": "이 서버에서 링크를 찾을 수 없습니다.",
|
||||
"mobile.server_link.error.title": "링크 에러",
|
||||
"mobile.server_link.unreachable_channel.error": "Permalink belongs to a deleted message or to a channel to which you do not have access.",
|
||||
"mobile.server_link.unreachable_team.error": "Permalink belongs to a deleted message or to a channel to which you do not have access.",
|
||||
"mobile.server_ssl.error.text": "The certificate from {host} is not trusted.\n\nPlease contact your System Administrator to resolve the certificate issues and allow connections to this server.",
|
||||
"mobile.server_ssl.error.title": "Untrusted Certificate",
|
||||
"mobile.server_upgrade.button": "확인",
|
||||
"mobile.server_upgrade.description": "\nA server upgrade is required to use the Mattermost app. Please ask your System Administrator for details.\n",
|
||||
"mobile.server_upgrade.title": "Server upgrade required",
|
||||
"mobile.server_upgrade.description": "\nMattermost앱을 사용하려면 서버 업그레이드가 필요합니다. 자세한 내용은 시스템 관리자에게 문의하십시오. \n",
|
||||
"mobile.server_upgrade.title": "서버 업그레이드 필수",
|
||||
"mobile.server_url.invalid_format": "URL은 http:// 또는 https://로 시작해야 합니다",
|
||||
"mobile.session_expired": "Session Expired: Please log in to continue receiving notifications.",
|
||||
"mobile.session_expired": "Session Expired: Please log in to continue receiving notifications. Sessions for {siteName} are configured to expire every {daysCount, number} {daysCount, plural, one {day} other {days}}.",
|
||||
"mobile.set_status.away": "다른 용무 중",
|
||||
"mobile.set_status.dnd": "방해 금지",
|
||||
"mobile.set_status.offline": "오프라인",
|
||||
@@ -421,130 +466,153 @@
|
||||
"mobile.share_extension.error_close": "닫기",
|
||||
"mobile.share_extension.error_message": "An error has occurred while using the share extension.",
|
||||
"mobile.share_extension.error_title": "Extension Error",
|
||||
"mobile.share_extension.team": "서비스 약관",
|
||||
"mobile.share_extension.team": "팀",
|
||||
"mobile.share_extension.too_long_message": "글자 수: {count}/{max}",
|
||||
"mobile.share_extension.too_long_title": "메세지가 너무 깁니다.",
|
||||
"mobile.sidebar_settings.permanent": "Permanent Sidebar",
|
||||
"mobile.sidebar_settings.permanent_description": "사이드바를 영구적으로 열어 두십시오.",
|
||||
"mobile.storage_permission_denied_description": "Upload files to your Mattermost instance. Open Settings to grant Mattermost Read and Write access to files on this device.",
|
||||
"mobile.storage_permission_denied_title": "{applicationName}이(가) 파일에 접근하려고 합니다.",
|
||||
"mobile.suggestion.members": "멤버",
|
||||
"mobile.system_message.channel_archived_message": "{username}님이 채널을 보존 처리 하였습니다.",
|
||||
"mobile.system_message.channel_unarchived_message": "{username}님이 채널을 보존 처리 하였습니다.",
|
||||
"mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username}이(가) 채널 표시 이름을 {oldDisplayName}에서 {newDisplayName}(으)로 업데이트했습니다.",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.removed": "{username}님이 채널 헤더를 제거했습니다. (이전: {oldHeader})",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username}님이 채널 헤더를 {oldHeader}에서 {newHeader}(으)로 변경했습니다.",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username}님이 채널 헤더를 {newHeader}(으)로 변경했습니다.",
|
||||
"mobile.system_message.update_channel_purpose_message.removed": "{username}님이 채널 설명을 제거했습니다. (이전: {oldPurpose})",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_from": "{username}님이 채널 설명을 {oldPurpose}에서 {newPurpose}(으)로 변경했습니다.",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_to": "{username}님이 채널 설명을 {newPurpose}(으)로 변경했습니다.",
|
||||
"mobile.terms_of_service.alert_cancel": "취소",
|
||||
"mobile.terms_of_service.alert_ok": "확인",
|
||||
"mobile.terms_of_service.alert_retry": "다시 시도",
|
||||
"mobile.terms_of_service.get_terms_error_description": "Make sure you have an active internet connection and try again. If this issue persists, contact your System Administrator.",
|
||||
"mobile.terms_of_service.get_terms_error_title": "Unable to load terms of service.",
|
||||
"mobile.terms_of_service.terms_rejected": "You must agree to the terms of service before accessing {siteName}. Please contact your System Administrator for more details.",
|
||||
"mobile.terms_of_service.terms_rejected": "{siteName}에 접속하기 전에 서비스 약관을 동의해야 합니다. 더 자세한 내용은 시스템 관리자한테 문의하세요.",
|
||||
"mobile.timezone_settings.automatically": "자동으로 설정",
|
||||
"mobile.timezone_settings.manual": "타임존 변경",
|
||||
"mobile.timezone_settings.select": "Select Timezone",
|
||||
"mobile.timezone_settings.select": "타임존 선택",
|
||||
"mobile.tos_link": "이용약관",
|
||||
"mobile.user_list.deactivated": "비활성화",
|
||||
"mobile.user.settings.notifications.email.fifteenMinutes": "Every 15 minutes",
|
||||
"mobile.video_playback.failed_description": "An error occurred while trying to play the video.\n",
|
||||
"mobile.video_playback.failed_title": "Video playback failed",
|
||||
"mobile.video.save_error_message": "To save the video file you need to download it first.",
|
||||
"mobile.video.save_error_title": "Save Video Error",
|
||||
"mobile.youtube_playback_error.description": "An error occurred while trying to play the YouTube video.\nDetails: {details}",
|
||||
"mobile.youtube_playback_error.title": "YouTube playback error",
|
||||
"modal.manual_status.auto_responder.message_": "Would you like to switch your status to \"{status}\" and disable Automatic Replies?",
|
||||
"modal.manual_status.auto_responder.message_away": "Would you like to switch your status to \"Away\" and disable Automatic Replies?",
|
||||
"modal.manual_status.auto_responder.message_dnd": "Would you like to switch your status to \"Do Not Disturb\" and disable Automatic Replies?",
|
||||
"modal.manual_status.auto_responder.message_offline": "Would you like to switch your status to \"Offline\" and disable Automatic Replies?",
|
||||
"modal.manual_status.auto_responder.message_online": "Would you like to switch your status to \"Online\" and disable Automatic Replies?",
|
||||
"mobile.video_playback.failed_title": "비디오 재생이 실패했습니다.",
|
||||
"mobile.video.save_error_message": "비디오 파일을 저장하려면 먼저 다운로드해야 합니다.",
|
||||
"mobile.video.save_error_title": "비디오 저장 에러",
|
||||
"mobile.youtube_playback_error.description": "YouTube 동영상을 재생하는 중에 오류가 발생했습니다.\n세부 정보: {details}",
|
||||
"mobile.youtube_playback_error.title": "유튜브 재생 오류",
|
||||
"modal.manual_status.auto_responder.message_": "상태를 \"{status}\"(으)로 전환하고 자동 회신을 비활성화하시겠습니까?",
|
||||
"modal.manual_status.auto_responder.message_away": "상태를 \"방해 금지\"로 전환하고 자동 회신을 비활성화 하시겠습니까?",
|
||||
"modal.manual_status.auto_responder.message_dnd": "상태를 \"방해 금지\"로 전환하고 자동 회신을 비활성화 하시겠습니까?",
|
||||
"modal.manual_status.auto_responder.message_offline": "상태를 \"방해 금지\"로 전환하고 자동 회신을 비활성화 하시겠습니까?",
|
||||
"modal.manual_status.auto_responder.message_online": "상태를 \"방해 금지\"로 전환하고 자동 회신을 비활성화 하시겠습니까?",
|
||||
"more_channels.archivedChannels": "보관 채널",
|
||||
"more_channels.dropdownTitle": "보기",
|
||||
"more_channels.noMore": "가입할 수 있는 채널이 없습니다",
|
||||
"more_channels.publicChannels": "공개 채널",
|
||||
"more_channels.showArchivedChannels": "표시: 보관 된 채널",
|
||||
"more_channels.showPublicChannels": "새 공개 채널",
|
||||
"more_channels.title": "채널 더보기",
|
||||
"msg_typing.areTyping": "{users}, {last}(이)가 입력중입니다...",
|
||||
"msg_typing.isTyping": "{user}(이)가 입력중입니다...",
|
||||
"navbar_dropdown.logout": "로그아웃",
|
||||
"navbar.channel_drawer.button": "채널와 팀",
|
||||
"navbar.channel_drawer.hint": "Opens the channels and teams drawer",
|
||||
"navbar.leave": "채널 떠나기",
|
||||
"password_form.title": "패스워드 재설정",
|
||||
"password_send.checkInbox": "이메일을 확인하세요.",
|
||||
"password_send.description": "To reset your password, enter the email address you used to sign up",
|
||||
"password_send.error": "유효한 이메일 주소를 입력하세요.",
|
||||
"password_send.checkInbox": "받은 편지함을 확인하세요.",
|
||||
"password_send.description": "비밀번호 재설정을 위해 등록한 전자우편 주소를 입력하세요.",
|
||||
"password_send.error": "유효한 전자우편 주소를 입력하세요.",
|
||||
"password_send.link": "If the account exists, a password reset email will be sent to:",
|
||||
"password_send.reset": "Reset my password",
|
||||
"permalink.error.access": "Permalink belongs to a deleted message or to a channel to which you do not have access.",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": " and ",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "add them to this private channel",
|
||||
"permalink.error.link_not_found": "Link Not Found",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "did not get notified by this mention because they are not in the channel. They cannot be added to the channel because they are not a member of the linked groups. To add them to this channel, they must be added to the linked groups.",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": "그리고",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "팀에 사용자 초대하기",
|
||||
"post_body.check_for_out_of_channel_mentions.link.public": "add them to the channel",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? They will have access to all message history.",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "were mentioned but they are not in the channel. Would you like to ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "was mentioned but is not in the channel. Would you like to ",
|
||||
"post_body.commentedOn": "Commented on {name}'s message: ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "did not get notified by this mention because they are not in the channel. Would you like to ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "did not get notified by this mention because they are not in the channel. Would you like to ",
|
||||
"post_body.commentedOn": "{name}님의 메시지에 대한 댓글 ",
|
||||
"post_body.deleted": "(삭제된 메시지)",
|
||||
"post_info.auto_responder": "AUTOMATIC REPLY",
|
||||
"post_info.bot": "BOT",
|
||||
"post_info.auto_responder": "자동 회신",
|
||||
"post_info.bot": "봇",
|
||||
"post_info.del": "삭제",
|
||||
"post_info.edit": "편집",
|
||||
"post_info.message.show_less": "Show Less",
|
||||
"post_info.message.show_more": "Show More",
|
||||
"post_info.guest": "게스트",
|
||||
"post_info.message.show_less": "감추기",
|
||||
"post_info.message.show_more": "더보기",
|
||||
"post_info.system": "시스템",
|
||||
"post_message_view.edited": "(edited)",
|
||||
"post_message_view.edited": "(수정됨)",
|
||||
"posts_view.newMsg": "새로운 메시지",
|
||||
"rename_channel.handleHolder": "Must be lowercase alphanumeric characters",
|
||||
"rename_channel.url": "URL",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "Part of this thread has been deleted due to a data retention policy. You can no longer reply to this thread.",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "이 스레드의 일부는 데이터 보존 정책으로 인해 삭제되었습니다. 더 이상 이 스레드에 응답 할 수 없습니다.",
|
||||
"search_bar.search": "검색",
|
||||
"search_header.results": "검색 결과",
|
||||
"search_header.title2": "최근 멘션",
|
||||
"search_header.title3": "중요 메시지",
|
||||
"search_item.channelArchived": "Archived",
|
||||
"search_item.channelArchived": "보관됨",
|
||||
"sidebar_right_menu.logout": "로그아웃",
|
||||
"sidebar_right_menu.report": "문제 보고",
|
||||
"sidebar.channels": "공개 채널",
|
||||
"sidebar.direct": "개인 메시지",
|
||||
"sidebar.favorite": "즐겨찾는 채널",
|
||||
"sidebar.pg": "비공개 채널",
|
||||
"sidebar.types.recent": "RECENT ACTIVITY",
|
||||
"sidebar.types.recent": "최근 활동",
|
||||
"sidebar.unreads": "읽지 않은 글 더보기",
|
||||
"signup.email": "이메일과 패스워드",
|
||||
"signup.email": "전자우편과 비밀번호",
|
||||
"signup.office365": "Office 365",
|
||||
"status_dropdown.set_away": "다른 용무 중",
|
||||
"status_dropdown.set_dnd": "방해 금지",
|
||||
"status_dropdown.set_offline": "오프라인",
|
||||
"status_dropdown.set_online": "온라인",
|
||||
"status_dropdown.set_ooo": "Out of Office",
|
||||
"suggestion.mention.all": "CAUTION: This mentions everyone in channel",
|
||||
"suggestion.mention.all": "모든 채널 회원들에게 알림을 보냅니다",
|
||||
"suggestion.mention.channel": "모든 채널 회원들에게 알림을 보냅니다",
|
||||
"suggestion.mention.channels": "채널 더보기",
|
||||
"suggestion.mention.here": "채널에 접속 중인 회원들에게 알림을 보냅니다",
|
||||
"suggestion.mention.here": "모든 채널 회원들에게 알림을 보냅니다",
|
||||
"suggestion.mention.members": "채널 회원",
|
||||
"suggestion.mention.morechannels": "Other Channels",
|
||||
"suggestion.mention.nonmembers": "Not in Channel",
|
||||
"suggestion.mention.special": "Special Mentions",
|
||||
"suggestion.mention.you": "(당신)",
|
||||
"suggestion.search.direct": "개인 메시지",
|
||||
"suggestion.search.private": "비공개 채널",
|
||||
"suggestion.search.public": "공개 채널",
|
||||
"terms_of_service.agreeButton": "I Agree",
|
||||
"terms_of_service.api_error": "Unable to complete the request. If this issue persists, contact your System Administrator.",
|
||||
"terms_of_service.agreeButton": "동의함",
|
||||
"terms_of_service.api_error": "요청을 완료할 수 없습니다. 이 문제가 지속되면 시스템 관리자에게 문의하십시오.",
|
||||
"user.settings.display.clockDisplay": "시간 표시",
|
||||
"user.settings.display.custom_theme": "커스텀 테마",
|
||||
"user.settings.display.militaryClock": "24시간으로 보이기 (예: 16:00)",
|
||||
"user.settings.display.normalClock": "12시간으로 보이기 (예: 4:00 PM)",
|
||||
"user.settings.display.preferTime": "시간이 어떻게 표시될지 선택하세요.",
|
||||
"user.settings.general.email": "이메일",
|
||||
"user.settings.general.emailCantUpdate": "Email must be updated using a web client or desktop application.",
|
||||
"user.settings.general.email": "전자우편",
|
||||
"user.settings.general.emailCantUpdate": "전자우편은 웹 클라이언트 또는 데스크톱 애플리케이션을 사용하여 업데이트해야 합니다.",
|
||||
"user.settings.general.emailGitlabCantUpdate": "Login occurs through GitLab. Email cannot be updated. Email address used for notifications is {email}.",
|
||||
"user.settings.general.emailGoogleCantUpdate": "Login occurs through GitLab. Email cannot be updated. Email address used for notifications is {email}.",
|
||||
"user.settings.general.emailHelp2": "이메일 기능이 시스템 관리자에 의해 비활성화 되었습니다. 활성화 되기 전까진 알림 메일이 발송되지 않습니다.",
|
||||
"user.settings.general.emailHelp2": "전자우편 기능이 시스템 관리자에 의해 비활성화 되었습니다. 활성화되기 전까진 알림 전자우편이 발송되지 않습니다.",
|
||||
"user.settings.general.emailLdapCantUpdate": "Login occurs through LDAP. Email cannot be updated. Email address used for notifications is {email}.",
|
||||
"user.settings.general.emailOffice365CantUpdate": "Login occurs through GitLab. Email cannot be updated. Email address used for notifications is {email}.",
|
||||
"user.settings.general.emailSamlCantUpdate": "SAML을 통해 로그인 하였기에 이메일을 업데이트 할 수 없습니다. 알림에 사용되는 이메일 주소는 {email} 입니다.",
|
||||
"user.settings.general.emailOffice365CantUpdate": "Office 365를 통해 로그인합니다. 전자우편을 업데이트할 수 없습니다. 알림 용도로 사용되는 전자우편 주소는 {email}입니다.",
|
||||
"user.settings.general.emailSamlCantUpdate": "SAML을 통해 로그인 하였기에 전자우편을 업데이트할 수 없습니다. 알림에 사용되는 전자우편 주소는 {email} 입니다.",
|
||||
"user.settings.general.field_handled_externally": "이 필드는 로그인 제공자를 통해 처리됩니다. 변경하려는 경우 로그인 제공자를 통해 변경해야 합니다.",
|
||||
"user.settings.general.firstName": "이름",
|
||||
"user.settings.general.lastName": "성",
|
||||
"user.settings.general.nickname": "별명",
|
||||
"user.settings.general.position": "부서",
|
||||
"user.settings.general.position": "직책",
|
||||
"user.settings.general.username": "사용자명",
|
||||
"user.settings.modal.display": "화면",
|
||||
"user.settings.modal.notifications": "알림",
|
||||
"user.settings.notifications.allActivity": "모든 활동",
|
||||
"user.settings.notifications.comments": "답글 알림",
|
||||
"user.settings.notifications.email.disabled": "이메일 알림이 활성화되지 않았습니다",
|
||||
"user.settings.notifications.email.disabled": "전자우편 알림이 활성화되지 않았습니다",
|
||||
"user.settings.notifications.email.everyHour": "매 시간마다",
|
||||
"user.settings.notifications.email.immediately": "바로",
|
||||
"user.settings.notifications.email.immediately": "즉시 ",
|
||||
"user.settings.notifications.email.never": "사용 안함",
|
||||
"user.settings.notifications.email.send": "알림 받기",
|
||||
"user.settings.notifications.emailInfo": "이메일 알림은 멘션 혹은 개인 메세지를 받았을때, 당신이 {siteName}로부터 오프라인 상태로 60초가 지났거나 자리비움상태로 5분 이상 지났을때 알림이 갑니다.",
|
||||
"user.settings.notifications.emailInfo": "전자우편 알림은 멘션 혹은 개인 메시지를 받았을 때, 오프라인 상태로 60초가 지났거나 자리비움 상태로 5분 이상 지났을 때 발생합니다.",
|
||||
"user.settings.notifications.never": "사용 안함",
|
||||
"user.settings.notifications.onlyMentions": "개인 메시지와 멘션",
|
||||
"user.settings.push_notification.away": "오프라인이거나 자리비움",
|
||||
"user.settings.push_notification.disabled": "이메일 알림이 활성화되지 않았습니다",
|
||||
"user.settings.push_notification.disabled": "전자우편 알림이 활성화되지 않았습니다",
|
||||
"user.settings.push_notification.disabled_long": "시스템 관리자가 메일알림을 비활성화하였습니다.",
|
||||
"user.settings.push_notification.offline": "오프라인",
|
||||
"user.settings.push_notification.online": "온라인, 오프라인, 자리비움",
|
||||
"web.root.signup_info": "모든 팀 커뮤니케이션 활동을 한 곳에 모아 빠르게 찾고 공유할 수 있습니다."
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,8 +8,8 @@
|
||||
"about.teamEditionLearn": "Dołącz do społeczności Mattermost na ",
|
||||
"about.teamEditionSt": "Cała komunikacja Twojego zespołu w jednym miejscu, z natychmiastowym przeszukiwaniem i dostępna z każdego miejsca.",
|
||||
"about.teamEditiont0": "Edycja Zespołowa",
|
||||
"about.teamEditiont1": "Wydanie Enterprise",
|
||||
"about.title": "O Mattermost",
|
||||
"about.teamEditiont1": "Edycja Enterprise",
|
||||
"about.title": "O {appTitle}",
|
||||
"announcment_banner.dont_show_again": "Nie pokazuj ponownie",
|
||||
"api.channel.add_member.added": "{addedUsername} został dodany do kanału przez {username}",
|
||||
"archivedChannelMessage": "Przeglądasz **zarchiwizowany kanał**. Nowe wiadomości nie mogą być wysłane.",
|
||||
@@ -35,6 +35,9 @@
|
||||
"channel_modal.purposeEx": "Np: \"Kanał do zgłaszania bugów i usprawnień\"",
|
||||
"channel_notifications.ignoreChannelMentions.settings": "Ignoruj @channel, @here, @all",
|
||||
"channel_notifications.muteChannel.settings": "Wycisz kanał",
|
||||
"channel.channelHasGuests": "Ten kanał zawiera gości",
|
||||
"channel.hasGuests": "Ten czat grupowy zawiera gości",
|
||||
"channel.isGuest": "Ta osoba jest gościem",
|
||||
"combined_system_message.added_to_channel.many_expanded": "{users} i {lastUser} zostali **dodani do kanału** przez {actor}.",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser} został **dodany do kanału** przez {actor}.",
|
||||
"combined_system_message.added_to_channel.one_you": "Zostałeś **dodany do kanału** przez {actor}.",
|
||||
@@ -45,19 +48,19 @@
|
||||
"combined_system_message.added_to_team.two": "{firstUser} i {secondUser} zostali **dodani do zespołu** przez {actor}.",
|
||||
"combined_system_message.joined_channel.many_expanded": "{users} i {lastUser} **dołączyli do kanału**.",
|
||||
"combined_system_message.joined_channel.one": "{firstUser} **dołączył do kanału**.",
|
||||
"combined_system_message.joined_channel.one_you": "**dołączył do kanału**.",
|
||||
"combined_system_message.joined_channel.one_you": "Ty **dołączyłeś do kanału**.",
|
||||
"combined_system_message.joined_channel.two": "{firstUser} i {secondUser} **dołączyli do kanału**.",
|
||||
"combined_system_message.joined_team.many_expanded": "{users} i {lastUser} **dołączyli do zespołu**.",
|
||||
"combined_system_message.joined_team.one": "{firstUser} **dołączył do zespołu**.",
|
||||
"combined_system_message.joined_team.one_you": "**dołączył do zespołu**.",
|
||||
"combined_system_message.joined_team.one_you": "Ty **dołączyłeś do zespołu**.",
|
||||
"combined_system_message.joined_team.two": "{firstUser} i {secondUser} **dołączyli do zespołu**.",
|
||||
"combined_system_message.left_channel.many_expanded": "{users} i {lastUser} **opuścili kanał**.",
|
||||
"combined_system_message.left_channel.one": "{firstUser} **opuścił kanał**.",
|
||||
"combined_system_message.left_channel.one_you": "**opuścił kanał**.",
|
||||
"combined_system_message.left_channel.one_you": "Ty **opuściłeś kanał**.",
|
||||
"combined_system_message.left_channel.two": "{firstUser} i {secondUser} **opuścili kanał**.",
|
||||
"combined_system_message.left_team.many_expanded": "{users} i {lastUser} **opuścili zespół**.",
|
||||
"combined_system_message.left_team.one": "{firstUser} **opuścił zespół**.",
|
||||
"combined_system_message.left_team.one_you": "**opuścił zespół**.",
|
||||
"combined_system_message.left_team.one_you": "Ty **opuściłeś zespół**.",
|
||||
"combined_system_message.left_team.two": "{firstUser} i {secondUser} **opuścili zespół**.",
|
||||
"combined_system_message.removed_from_channel.many_expanded": "{users} i {lastUser} zostali **usunięci z kanału**.",
|
||||
"combined_system_message.removed_from_channel.one": "{firstUser} został **usunięty z kanału**.",
|
||||
@@ -70,21 +73,21 @@
|
||||
"combined_system_message.you": "Ty",
|
||||
"create_comment.addComment": "Dodaj komentarz...",
|
||||
"create_post.deactivated": "Przeglądasz zarchiwizowany kanał z deaktywowanym użytkownikiem.",
|
||||
"create_post.write": "Write to {channelDisplayName}",
|
||||
"create_post.write": "Napisz na {channelDisplayName}",
|
||||
"date_separator.today": "Dzisiaj",
|
||||
"date_separator.yesterday": "Wczoraj",
|
||||
"edit_post.editPost": "Edytuj post...",
|
||||
"edit_post.save": "Zapisz",
|
||||
"error.team_not_found.title": "Zespół Nie Znaleziony",
|
||||
"file_attachment.download": "Pobierz",
|
||||
"file_upload.fileAbove": "Plik powyżej {max} MB nie może zostać wysłany: {filename}",
|
||||
"get_post_link_modal.title": "Kopiuj link bezpośredni ",
|
||||
"get_post_link_modal.title": "Kopiuj odnośnik",
|
||||
"integrations.add": "Dodaj",
|
||||
"intro_messages.anyMember": " Każdy użytkownik może dołączyć i przeczytać ten kanał.",
|
||||
"intro_messages.beginning": "Początek {name}",
|
||||
"intro_messages.channel": "kanału",
|
||||
"intro_messages.creator": "To jest początek {type} {name}, stworzonego/ej przez {creator} dnia {date}.",
|
||||
"intro_messages.group": "kanał prywatny",
|
||||
"intro_messages.creator": "To jest początek kanału {name}, stworzonego przez {creator} dnia {date}.",
|
||||
"intro_messages.creatorPrivate": "To jest początek prywatnego kanału {name}, stworzonego przez {creator} dnia {date}.",
|
||||
"intro_messages.group_message": "To jest początek historii wiadomości grupowych z tymi zespołami. Wiadomości i pliki udostępnione w tym miejscu nie są wyświetlane osobom spoza tego obszaru.",
|
||||
"intro_messages.noCreator": "To początek {type} {name}, utworzony {date}.",
|
||||
"intro_messages.noCreator": "To początek kanału {name}, utworzony dnia {date}.",
|
||||
"intro_messages.onlyInvited": " Tylko zaproszeni użytkownicy mogą zobaczyć ten prywatny kanał.",
|
||||
"last_users_message.added_to_channel.type": "zostało **dodanych do kanału** przez {actor}.",
|
||||
"last_users_message.added_to_team.type": "zostało **dodanych do zespołu** przez {actor}.",
|
||||
@@ -128,7 +131,6 @@
|
||||
"mobile.account_notifications.threads_mentions": "Wzmianki w wątkach",
|
||||
"mobile.account_notifications.threads_start": "Wątki, które rozpocząłem",
|
||||
"mobile.account_notifications.threads_start_participate": "Wątki, które rozpocząłem lub w których uczestniczę",
|
||||
"mobile.account.settings.cancel": "Anuluj",
|
||||
"mobile.account.settings.save": "Zapisz",
|
||||
"mobile.action_menu.select": "Wybierz opcję",
|
||||
"mobile.advanced_settings.clockDisplay": "Wyświetlanie czasu",
|
||||
@@ -137,36 +139,44 @@
|
||||
"mobile.advanced_settings.delete_title": "Usuń dokumenty i dane",
|
||||
"mobile.advanced_settings.timezone": "Strefa czasowa",
|
||||
"mobile.advanced_settings.title": "Zaawansowane Ustawienia",
|
||||
"mobile.android.camera_permission_denied_description": "Aby robić zdjęcia i filmy używając aparatu, proszę zmień swoje ustawienia uprawnień.",
|
||||
"mobile.android.camera_permission_denied_title": "Wymagane są uprawnienia Aparatu",
|
||||
"mobile.android.permission_denied_dismiss": "Odrzuć",
|
||||
"mobile.android.permission_denied_retry": "Ustaw uprawienia",
|
||||
"mobile.android.photos_permission_denied_description": "Aby wgrywać obrazy i filmy z twojej biblioteki, proszę zmień swoje ustawienia uprawnień.",
|
||||
"mobile.android.photos_permission_denied_title": "Dostęp do biblioteki zdjęć jest wymagany",
|
||||
"mobile.android.storage_permission_denied_description": "Aby wgrywać obrazy i filmy z twojego urządzenia Android, proszę zmień swoje ustawienia uprawnień.",
|
||||
"mobile.android.storage_permission_denied_title": "Dostęp do plików jest wymagany",
|
||||
"mobile.android.videos_permission_denied_description": "Aby wgrywać obrazy i filmy z twojej biblioteki, proszę zmień swoje ustawienia uprawnień.",
|
||||
"mobile.android.videos_permission_denied_title": "Dostęp do biblioteki filmów jest wymagany",
|
||||
"mobile.alert_dialog.alertCancel": "Anuluj",
|
||||
"mobile.android.photos_permission_denied_description": "Prześlij zdjęcia do instancji Mattermost lub zapisz je w swoim urządzeniu. Otwórz ustawienia, aby przyznać dostęp do biblioteki zdjęć w trybie Mattermost Read i Write.",
|
||||
"mobile.android.photos_permission_denied_title": "{applicationName} chce uzyskać dostęp do twoich zdjęć",
|
||||
"mobile.android.videos_permission_denied_description": "Przesyłanie filmów wideo do instancji Mattermost lub zapisywanie ich w urządzeniu. Otwórz ustawienia, aby umożliwić dostęp do biblioteki wideo w trybie Mattermost Read and Write.",
|
||||
"mobile.android.videos_permission_denied_title": "{applicationName} chce uzyskać dostęp do twoich filmów wideo",
|
||||
"mobile.announcement_banner.title": "Ogłoszenie",
|
||||
"mobile.authentication_error.message": "Mattermost napotkał błąd. Proszę autoryzuj się ponownie aby rozpocząć nową sesję.",
|
||||
"mobile.authentication_error.title": "Błąd autoryzacji",
|
||||
"mobile.calendar.dayNames": "Niedziela,Poniedziałek,Wtorek,Środa,Czwartek,Piątek,Sobota",
|
||||
"mobile.calendar.dayNamesShort": "Nd,Pn,Wt,Śr,Czw,Pt,Sob",
|
||||
"mobile.calendar.monthNames": "Styczeń,Luty,Marzec,Kwiecień,Maj,Czerwiec,Lipiec,Sierpień,Wrzesień,Październik,Listopad,Grudzień",
|
||||
"mobile.calendar.monthNamesShort": "Sty,Lut,Mar,Kwi,Lip,Sie,Wrz,Paź,Lis,Gru",
|
||||
"mobile.camera_photo_permission_denied_description": "Zrób zdjęcia i prześlij je do swojej instancji Mattermost lub zapisz je w swoim urządzeniu. Otwórz Ustawienia, aby przyznać dostęp do funkcji Mattermost Read and Write do aparatu.",
|
||||
"mobile.camera_photo_permission_denied_title": "{applicationName} chce uzyskać dostęp do aparatu",
|
||||
"mobile.camera_video_permission_denied_description": "Nagrywaj filmy i prześlij je na swoją instancję Mattermost lub zapisz je na swoim urządzeniu. Otwórz Ustawienia, aby przyznać dostęp do funkcji Mattermost Read and Write do aparatu.",
|
||||
"mobile.camera_video_permission_denied_title": "{applicationName} chce uzyskać dostęp do aparatu",
|
||||
"mobile.channel_drawer.search": "Przejdź do...",
|
||||
"mobile.channel_info.alertMessageConvertChannel": "Kiedy konwertujesz {displayName} na kanał prywatny, historia i członkostwo są zachowane. Publicznie udostępniane pliki pozostają dostępne dla każdego, kto posiada link. Członkostwo w kanale prywatnym odbywa się wyłącznie na podstawie zaproszenia.\n\nZmiana jest trwała i nie może zostać cofnięta.\n\nJesteś pewien, że chcesz przekonwertować {displayName} na kanał prywatny?",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Jesteś pewien, że chcesz zarchiwizować {term} {name}?",
|
||||
"mobile.channel_info.alertMessageLeaveChannel": "Jesteś pewien, że chcesz opuścić {term} {name}?",
|
||||
"mobile.channel_info.alertMessageUnarchiveChannel": "Jesteś pewien, że chcesz zarchiwizować {term} {name}?",
|
||||
"mobile.channel_info.alertNo": "Nie",
|
||||
"mobile.channel_info.alertTitleConvertChannel": "Wykonać konwersję kanału {displayName} do kanału prywatnego? ",
|
||||
"mobile.channel_info.alertTitleDeleteChannel": "Archiwizuj {term}",
|
||||
"mobile.channel_info.alertTitleLeaveChannel": "Opuść {term}",
|
||||
"mobile.channel_info.alertTitleUnarchiveChannel": "Archiwizuj {term}",
|
||||
"mobile.channel_info.alertYes": "Tak",
|
||||
"mobile.channel_info.convert": "Konwersja do kanału prywatnego",
|
||||
"mobile.channel_info.convert_failed": "Nie byliśmy w stanie przekonwertować {displayName} na kanał prywatny.",
|
||||
"mobile.channel_info.convert_success": "{displayName} jest teraz prywatnym kanałem.",
|
||||
"mobile.channel_info.copy_header": "Kopiuj nagłówek",
|
||||
"mobile.channel_info.copy_purpose": "Kopiuj cel",
|
||||
"mobile.channel_info.delete_failed": "Nie można zarchiwizować kanału {displayName}. Sprawdź swoje połączenie i spróbuj ponownie.",
|
||||
"mobile.channel_info.edit": "Edytuj Kanał",
|
||||
"mobile.channel_info.privateChannel": "Prywatny kanał",
|
||||
"mobile.channel_info.publicChannel": "Kanał publiczny",
|
||||
"mobile.channel_info.unarchive_failed": "Nie można zarchiwizować kanału {displayName}. Sprawdź swoje połączenie i spróbuj ponownie.",
|
||||
"mobile.channel_list.alertNo": "Nie",
|
||||
"mobile.channel_list.alertYes": "Tak",
|
||||
"mobile.channel_list.archived": "ZARCHIWIZOWANY",
|
||||
"mobile.channel_list.channels": "KANAŁY",
|
||||
"mobile.channel_list.closeDM": "Zamknij Wiadomość Bezpośrednią",
|
||||
"mobile.channel_list.closeGM": "Zamknij Wiadomość Grupową",
|
||||
@@ -174,7 +184,6 @@
|
||||
"mobile.channel_list.not_member": "NIE JEST UŻYTKOWNIKIEM",
|
||||
"mobile.channel_list.unreads": "NIEPRZECZYTANE",
|
||||
"mobile.channel_members.add_members_alert": "Musisz wybrać co najmniej jednego użytkownika, który ma zostać dodany kanału.",
|
||||
"mobile.channel.markAsRead": "Oznacz Jako Przeczytane",
|
||||
"mobile.client_upgrade": "Zaktualizuj Aplikacje",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "Nowa wersja jest dostępna do pobrania.",
|
||||
"mobile.client_upgrade.can_upgrade_title": "Dostępna Aktualizacja",
|
||||
@@ -204,6 +213,7 @@
|
||||
"mobile.create_channel.public": "Nowy kanał publiczny",
|
||||
"mobile.create_post.read_only": "Ten kanał jest tylko-do-odczytu",
|
||||
"mobile.custom_list.no_results": "Brak wyników",
|
||||
"mobile.display_settings.sidebar": "Pasek boczny",
|
||||
"mobile.display_settings.theme": "Motyw",
|
||||
"mobile.document_preview.failed_description": "Wystąpił błąd podczas otwierania dokumentu. Proszę, upewnij się, że zainstalowałeś przeglądarkę {fileType} i spróbuj ponownie.\n",
|
||||
"mobile.document_preview.failed_title": "Otwieranie dokumentu się nie powiodło.",
|
||||
@@ -211,7 +221,6 @@
|
||||
"mobile.downloader.android_failed": "Pobieranie nie udane",
|
||||
"mobile.downloader.android_permission": "Potrzebujemy dostępu do folderu downloads aby zapisać pliki.",
|
||||
"mobile.downloader.android_started": "Pobieranie rozpoczęte",
|
||||
"mobile.downloader.android_success": "pobieranie udane",
|
||||
"mobile.downloader.complete": "Pobieranie zakończone",
|
||||
"mobile.downloader.disabled_description": "Pobieranie plików zostało wyłączone na tym serwerze. Proszę skontaktować się ze swoim Administratorem Systemu aby uzyskać więcej szczegółów.\n",
|
||||
"mobile.downloader.disabled_title": "Pobieranie wyłączone",
|
||||
@@ -223,6 +232,7 @@
|
||||
"mobile.drawer.teamsTitle": "Zespoły",
|
||||
"mobile.edit_channel": "Zapisz",
|
||||
"mobile.edit_post.title": "Edycja Wiadomości",
|
||||
"mobile.edit_profile.remove_profile_photo": "Usuń zdjęcie",
|
||||
"mobile.emoji_picker.activity": "AKTYWNOŚCI",
|
||||
"mobile.emoji_picker.custom": "NIESTANDARDOWE",
|
||||
"mobile.emoji_picker.flags": "FLAGI",
|
||||
@@ -241,17 +251,24 @@
|
||||
"mobile.extension.file_limit": "Udostępnianie jest limitowane do maksymalnie 5 plików.",
|
||||
"mobile.extension.max_file_size": "Załączniki udostępniane w Mattermost muszą być mniejsze niż {size}.",
|
||||
"mobile.extension.permission": "Mattermost potrzebuje dostępu do pamięci urządzenia aby udostępniać pliki.",
|
||||
"mobile.extension.team_required": "You must belong to a team before you can share files.",
|
||||
"mobile.extension.title": "Udostępnij w Mattermost",
|
||||
"mobile.failed_network_action.description": "Wygląda to na problem z twoim połączenie internetowym. Sprawdź czy masz aktywne połączenie i spróbuj ponownie.",
|
||||
"mobile.failed_network_action.retry": "Spróbuj Ponownie",
|
||||
"mobile.failed_network_action.shortDescription": "Upewnij się, że masz aktywne połączenie i spróbuj ponownie.",
|
||||
"mobile.failed_network_action.retry": "Spróbuj ponownie",
|
||||
"mobile.failed_network_action.shortDescription": "Messages will load when you have an internet connection.",
|
||||
"mobile.failed_network_action.teams_channel_description": "Channels could not be loaded for {teamName}.",
|
||||
"mobile.failed_network_action.teams_description": "Teams could not be loaded.",
|
||||
"mobile.failed_network_action.teams_title": "Something went wrong",
|
||||
"mobile.failed_network_action.title": "Brak połączenia z internetem",
|
||||
"mobile.file_upload.browse": "Przeglądaj Pliki",
|
||||
"mobile.file_upload.camera_photo": "Zrób Zdjęcie",
|
||||
"mobile.file_upload.camera_video": "Wrzuć wideo",
|
||||
"mobile.file_upload.library": "Biblioteka Zdjęć",
|
||||
"mobile.file_upload.max_warning": "Wrzucanie jest limitowane do 5 plików maksymalnie.",
|
||||
"mobile.file_upload.unsupportedMimeType": "Tylko pliki BMP, JPG lub PNG mogą zostać wykorzystane jako zdjęcia profilowe",
|
||||
"mobile.file_upload.video": "Biblioteka wideo",
|
||||
"mobile.files_paste.error_description": "Podczas wklejania pliku(ów) wystąpił błąd. Spróbuj ponownie.",
|
||||
"mobile.files_paste.error_dismiss": "Odrzuć",
|
||||
"mobile.files_paste.error_title": "Wklejenie nie powiodło się",
|
||||
"mobile.flagged_posts.empty_description": "Oznaczanie wiadomości stanowi sposób ich zapisywania \"na później\". Twoje flagi są poufne i nie są widoczne dla innych użytkowników.",
|
||||
"mobile.flagged_posts.empty_title": "Brak Oznaczonych Postów",
|
||||
"mobile.help.title": "Pomoc",
|
||||
@@ -260,7 +277,8 @@
|
||||
"mobile.intro_messages.default_message": "To jest pierwszy kanał, który zobaczą członkowie zespołu po zarejestrowaniu się - używaj go do publikowania informacji, o których wszyscy muszą wiedzieć.",
|
||||
"mobile.intro_messages.default_welcome": "Witaj w {name}!",
|
||||
"mobile.intro_messages.DM": "To początek historii wiadomości z użytkownikiem {teammate}. Bezpośrednie wiadomości i wysłane w nich pliki nie są widoczne dla osób spoza tego obszaru.",
|
||||
"mobile.ios.photos_permission_denied_description": "Aby zapisać obrazy i filmy do biblioteki, proszę zmień swoje ustawienia uprawnień.",
|
||||
"mobile.ios.photos_permission_denied_description": "Prześlij zdjęcia i filmy wideo na swoją instancję Mattermost lub zapisz je w swoim urządzeniu. Otwórz Ustawienia, aby przyznać dostęp do biblioteki zdjęć i filmów w formacie Mattermost Read and Write.",
|
||||
"mobile.ios.photos_permission_denied_title": "{applicationName} chciałaby uzyskać dostęp do twoich zdjęć.",
|
||||
"mobile.join_channel.error": "Nie można dołączyć do kanału {displayName}. Sprawdź swoje połączenie i spróbuj ponownie.",
|
||||
"mobile.loading_channels": "Wczytuję Kanały...",
|
||||
"mobile.loading_members": "Wczytuję Członków...",
|
||||
@@ -271,7 +289,11 @@
|
||||
"mobile.managed.blocked_by": "Zablokowany przez {vendor}",
|
||||
"mobile.managed.exit": "Wyjście",
|
||||
"mobile.managed.jailbreak": "Urządzenia z Jailbreakiem nie są zaufane przez {vendor}, proszę wyjść z aplikacji.",
|
||||
"mobile.managed.not_secured.android": "To urządzenie musi zostać zabezpieczone blokadą ekranu, aby użyć Mattermost.",
|
||||
"mobile.managed.not_secured.ios": "To urządzenie musi zostać zabezpieczone hasłem, aby używać Mattermost.\n\nIdz do Ustawienia > Identyfikacja twarzy i hasło.",
|
||||
"mobile.managed.not_secured.ios.touchId": "To urządzenie musi zostać zabezpieczone hasłem, aby używać Mattermost.\n\nPrzejdź do Ustawienia > Touch ID i Hasło.",
|
||||
"mobile.managed.secured_by": "Zabezpieczony przez {vendor}",
|
||||
"mobile.managed.settings": "Idz do ustawień",
|
||||
"mobile.markdown.code.copy_code": "Skopiuj Kod",
|
||||
"mobile.markdown.code.plusMoreLines": "+{count, number} więcej {count, plural, one {line} other {lines}}",
|
||||
"mobile.markdown.image.too_large": "Obrazek przekracza maksymalne rozmiary szerokości {maxWidth} oraz {maxHeight} wysokości:",
|
||||
@@ -332,20 +354,28 @@
|
||||
"mobile.open_dm.error": "Nie można otworzyć bezpośredniej wiadomości z {displayName}. Sprawdź swoje połączenie i spróbuj ponownie.",
|
||||
"mobile.open_gm.error": "Nie możemy otworzyć wiadomości grupowej z tymi użytkownikami. Sprawdź połączenie i spróbuj ponownie.",
|
||||
"mobile.open_unknown_channel.error": "Nie można dołączyć do kanału. Zresetuj pamięć podręczną i spróbuj ponownie.",
|
||||
"mobile.permission_denied_dismiss": "Nie pozwalaj",
|
||||
"mobile.permission_denied_retry": "Ustawienia",
|
||||
"mobile.photo_library_permission_denied_description": "Aby zapisać zdjęcia i filmy w swojej bibliotece, należy zmienić ustawienia uprawnień.",
|
||||
"mobile.photo_library_permission_denied_title": "{applicationName} chciałaby uzyskać dostęp do twojej biblioteki zdjęć.",
|
||||
"mobile.pinned_posts.empty_description": "Przypinaj ważne rzeczy, przytrzymując dowolną wiadomość i wybierając \"Przypnij do kanału\".",
|
||||
"mobile.pinned_posts.empty_title": "Brak Przypiętych Wiadomości",
|
||||
"mobile.post_info.add_reaction": "Dodaj reakcję",
|
||||
"mobile.post_info.copy_text": "Kopiuj Tekst",
|
||||
"mobile.post_info.flag": "Oflaguj",
|
||||
"mobile.post_info.mark_unread": "Oznaczyć jako nieprzeczytane",
|
||||
"mobile.post_info.pin": "Przypnij do kanału",
|
||||
"mobile.post_info.reply": "Odpowiedz",
|
||||
"mobile.post_info.unflag": "Usuń flagę",
|
||||
"mobile.post_info.unpin": "Odepnij od kanału",
|
||||
"mobile.post_pre_header.flagged": "Oflagowany",
|
||||
"mobile.post_pre_header.pinned": "Przypięty",
|
||||
"mobile.post_pre_header.pinned_flagged": "Przypięty i oflagowany",
|
||||
"mobile.post_textbox.empty.message": "Próbujesz wysłać pustą wiadomość.\nUpewnij się, że masz wiadomość lub co najmniej jeden załączony plik.",
|
||||
"mobile.post_textbox.empty.ok": "OK",
|
||||
"mobile.post_textbox.empty.title": "Pusta Wiadomość",
|
||||
"mobile.post_textbox.entire_channel.cancel": "Anuluj",
|
||||
"mobile.post_textbox.entire_channel.confirm": "Potwierdź",
|
||||
"mobile.post_textbox.entire_channel.message": "Z pomocą @all lub @channel, zamierzasz wysyłać powiadomienia do {totalMembers, number} {totalMembers, plural, one {person} other {people}}. Jesteś pewien, że chcesz to zrobić?",
|
||||
"mobile.post_textbox.entire_channel.message.with_timezones": "Z pomocą @all lub @channel, który zamierzasz wysyłać powiadomienia do {totalMembers, number} {totalMembers, plural, one {person} other {people}} in {timezones, number} {timezones, plural, one {timezone} other {timezones}}.. Jesteś pewien, że chcesz to zrobić?",
|
||||
"mobile.post_textbox.entire_channel.title": "Potwierdź wysyłanie powiadomień do całego kanału",
|
||||
"mobile.post_textbox.uploadFailedDesc": "Niektórych załączników nie udało się przesłać na serwer. Czy na pewno chcesz opublikować wiadomość?",
|
||||
"mobile.post_textbox.uploadFailedTitle": "Błąd załącznika",
|
||||
"mobile.post.cancel": "Anuluj",
|
||||
@@ -356,6 +386,11 @@
|
||||
"mobile.post.failed_title": "Nie można wysłać wiadomości",
|
||||
"mobile.post.retry": "Odśwież",
|
||||
"mobile.posts_view.moreMsg": "Więcej Nowych Wiadomości Powyżej",
|
||||
"mobile.privacy_link": "Polityka prywatności",
|
||||
"mobile.push_notification_reply.button": "Wyślij",
|
||||
"mobile.push_notification_reply.placeholder": "Napisz odpowiedź...",
|
||||
"mobile.push_notification_reply.title": "Odpowiedz",
|
||||
"mobile.reaction_header.all_emojis": "Wszystko",
|
||||
"mobile.recent_mentions.empty_description": "W tym miejscu pojawią się wiadomości zawierające Twoją nazwę użytkownika i inne słowa, które będą wyzwalać wzmianki.",
|
||||
"mobile.recent_mentions.empty_title": "Brak Ostatnich Wzmianek",
|
||||
"mobile.rename_channel.display_name_maxLength": "Nazwa kanału musi posiadać mniej niż {maxLength, number} znaków",
|
||||
@@ -378,6 +413,8 @@
|
||||
"mobile.routes.channelInfo.createdBy": "Utworzono przez {creator}, dnia ",
|
||||
"mobile.routes.channelInfo.delete_channel": "Archiwizuj kanał",
|
||||
"mobile.routes.channelInfo.favorite": "Ulubiony",
|
||||
"mobile.routes.channelInfo.groupManaged": "Członkowie są zarządzani przez grupy połączone",
|
||||
"mobile.routes.channelInfo.unarchive_channel": "Archiwizuj kanał",
|
||||
"mobile.routes.code": "{language} Kod",
|
||||
"mobile.routes.code.noLanguage": "Kod",
|
||||
"mobile.routes.edit_profile": "Edytuj Profil",
|
||||
@@ -393,6 +430,7 @@
|
||||
"mobile.routes.thread": "Wątek {channelName}",
|
||||
"mobile.routes.thread_dm": "Wątek bezpośredniej wiadomości",
|
||||
"mobile.routes.user_profile": "Profil",
|
||||
"mobile.routes.user_profile.edit": "Edytuj",
|
||||
"mobile.routes.user_profile.local_time": "CZAS LOKALNY",
|
||||
"mobile.routes.user_profile.send_message": "Wyślij Wiadomość",
|
||||
"mobile.search.after_modifier_description": "aby znaleźć posty po określonej dacie",
|
||||
@@ -405,13 +443,20 @@
|
||||
"mobile.search.no_results": "Niczego nie znaleziono",
|
||||
"mobile.search.on_modifier_description": "aby znaleźć posty na konkretną datę",
|
||||
"mobile.search.recent_title": "Ostatnie wyszukiwania",
|
||||
"mobile.select_team.guest_cant_join_team": "Twoje konto gościa nie ma przypisanych zespołów ani kanałów. Prosimy o kontakt z administratorem.",
|
||||
"mobile.select_team.join_open": "Inne zespoły, do których możesz dołączyć.",
|
||||
"mobile.select_team.no_teams": "Brak dostępnych zespołów, do których możesz dołączyć.",
|
||||
"mobile.server_link.error.text": "The link could not be found on this server.",
|
||||
"mobile.server_link.error.title": "Link Error",
|
||||
"mobile.server_link.unreachable_channel.error": "Permalink należy do usuniętych wiadomości lub do kanału, do którego nie masz dostępu.",
|
||||
"mobile.server_link.unreachable_team.error": "Permalink należy do usuniętych wiadomości lub do kanału, do którego nie masz dostępu.",
|
||||
"mobile.server_ssl.error.text": "The certificate from {host} is not trusted.\n\nPlease contact your System Administrator to resolve the certificate issues and allow connections to this server.",
|
||||
"mobile.server_ssl.error.title": "Untrusted Certificate",
|
||||
"mobile.server_upgrade.button": "OK",
|
||||
"mobile.server_upgrade.description": "\nDo korzystania z aplikacji Mattermost wymagane jest uaktualnienie serwera. Proszę zapytać administratora systemu o szczegóły.\n",
|
||||
"mobile.server_upgrade.title": "Wymagane uaktualnienie serwera",
|
||||
"mobile.server_url.invalid_format": "Adres musi zaczynać się od http:// lub https://",
|
||||
"mobile.session_expired": "Sesja wygasła: zaloguj się, aby kontynuować otrzymywanie powiadomień.",
|
||||
"mobile.session_expired": "Sesja wygasła: Zaloguj się, aby kontynuować otrzymywanie powiadomień. Sesje dla {siteName} są skonfigurowane tak, aby wygasały co {daysCount, number} {daysCount, plural, one {day} other {days}}.",
|
||||
"mobile.set_status.away": "Nieobecny",
|
||||
"mobile.set_status.dnd": "Nie przeszkadzać",
|
||||
"mobile.set_status.offline": "Offline",
|
||||
@@ -422,16 +467,30 @@
|
||||
"mobile.share_extension.error_message": "Wystąpił błąd podczas korzystania z rozszerzenia udziału.",
|
||||
"mobile.share_extension.error_title": "Błąd Rozszerzenia",
|
||||
"mobile.share_extension.team": "Zespół",
|
||||
"mobile.share_extension.too_long_message": "Liczba znaków: {count}/{max}",
|
||||
"mobile.share_extension.too_long_title": "Wiadomość jest zbyt długa.",
|
||||
"mobile.sidebar_settings.permanent": "Stały pasek boczny",
|
||||
"mobile.sidebar_settings.permanent_description": "Zatrzymaj pasek boczny otwarty cały czas",
|
||||
"mobile.storage_permission_denied_description": "Prześlij pliki do swojej instancji Mattermost. Otwórz ustawienia, aby przyznać dostęp do plików na tym urządzeniu w trybie Mattermost Read i Write.",
|
||||
"mobile.storage_permission_denied_title": "{applicationName} chce otrzymać dostęp do twoich plików",
|
||||
"mobile.suggestion.members": "Użytkownicy",
|
||||
"mobile.system_message.channel_archived_message": "{username} zarchiwizował kanał.",
|
||||
"mobile.system_message.channel_unarchived_message": "{username} zarchiwizował kanał.",
|
||||
"mobile.system_message.update_channel_displayname_message_and_forget.updated_from": "{username} zaktualizowała nazwę wyświetlaną kanału z: {oldDisplayName} do: {newDisplayName}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.removed": "{username} usunął nagłówek kanału (był: : {oldHeader})",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_from": "{username} zaktualizował nagłówek kanału z: {oldHeader} na: {newHeader}",
|
||||
"mobile.system_message.update_channel_header_message_and_forget.updated_to": "{username} zaktualizował nagłówek kanału na: {newHeader}",
|
||||
"mobile.system_message.update_channel_purpose_message.removed": "{username} usunął cel kanału (było: {oldPurpose})",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_from": "{username} zaktualizował cel kanału z: {oldPurpose} na: {newPurpose}",
|
||||
"mobile.system_message.update_channel_purpose_message.updated_to": "{username} zaktualizował cel kanału na: {newPurpose}",
|
||||
"mobile.terms_of_service.alert_cancel": "Anuluj",
|
||||
"mobile.terms_of_service.alert_ok": "OK",
|
||||
"mobile.terms_of_service.alert_retry": "Spróbuj Ponownie",
|
||||
"mobile.terms_of_service.get_terms_error_description": "Upewnij się, że masz aktywne połączenie internetowe i spróbuj ponownie. Jeśli ten problem będzie się powtarzał, skontaktuj się z administratorem systemu.",
|
||||
"mobile.terms_of_service.get_terms_error_title": "Nie można załadować warunków korzystania z usługi.",
|
||||
"mobile.terms_of_service.terms_rejected": "Przed uzyskaniem dostępu do witryny {siteName} musisz zaakceptować warunki korzystania z usługi. Skontaktuj się z administratorem systemu, aby uzyskać więcej informacji.",
|
||||
"mobile.timezone_settings.automatically": "Ustaw automatycznie",
|
||||
"mobile.timezone_settings.manual": "Zmień strefę czasową",
|
||||
"mobile.timezone_settings.select": "Wybierz Strefę Czasową",
|
||||
"mobile.tos_link": "Warunki korzystania z usługi",
|
||||
"mobile.user_list.deactivated": "Dezaktywowany",
|
||||
"mobile.user.settings.notifications.email.fifteenMinutes": "Co 15 minut",
|
||||
"mobile.video_playback.failed_description": "Wystąpił błąd podczas próby odtworzenia filmu. \n",
|
||||
@@ -445,11 +504,17 @@
|
||||
"modal.manual_status.auto_responder.message_dnd": "Czy chcesz zmienić swój status na \"Nie przeszkadzać\" i wyłączyć automatyczne odpowiedzi?",
|
||||
"modal.manual_status.auto_responder.message_offline": "Czy chcesz zmienić swój status na \"Offline\" i wyłączyć automatyczne odpowiedzi?",
|
||||
"modal.manual_status.auto_responder.message_online": "Czy chcesz zmienić swój status na \"Online\" i wyłączyć automatyczne odpowiedzi?",
|
||||
"more_channels.archivedChannels": "Zarchiwizowane kanały",
|
||||
"more_channels.dropdownTitle": "Pokaż",
|
||||
"more_channels.noMore": "Brak kanałów",
|
||||
"more_channels.publicChannels": "Kanały publiczne",
|
||||
"more_channels.showArchivedChannels": "Pokaż: Archiwizowane kanały",
|
||||
"more_channels.showPublicChannels": "Pokaż: Publiczne kanały",
|
||||
"more_channels.title": "Więcej Kanałów",
|
||||
"msg_typing.areTyping": "{users} i {last} piszą...",
|
||||
"msg_typing.isTyping": "{user} pisze...",
|
||||
"navbar_dropdown.logout": "Wyloguj",
|
||||
"navbar.channel_drawer.button": "Kanały i zespoły",
|
||||
"navbar.channel_drawer.hint": "Otwiera kanały i szufladę zespołów.",
|
||||
"navbar.leave": "Opuść kanał",
|
||||
"password_form.title": "Resetowanie hasła",
|
||||
"password_send.checkInbox": "Sprawdź swoją pocztę.",
|
||||
@@ -458,25 +523,26 @@
|
||||
"password_send.link": "Jeśli konto istnieje, wiadomość e-mail dotycząca resetowania hasła zostanie wysłana na adres:",
|
||||
"password_send.reset": "Zresetuj hasło",
|
||||
"permalink.error.access": "Permalink należy do usuniętych wiadomości lub do kanału, do którego nie masz dostępu.",
|
||||
"permalink.error.link_not_found": "Link Not Found",
|
||||
"post_body.check_for_out_of_channel_groups_mentions.message": "nie zostali powiadomieni poprzez tą wzmiankę, ponieważ nie są na kanale. Nie można ich dodać do kanału, ponieważ nie są członkami grup połączonych. Aby dodać je do tego kanału, muszą zostać dodane do połączonych grup.",
|
||||
"post_body.check_for_out_of_channel_mentions.link.and": " i ",
|
||||
"post_body.check_for_out_of_channel_mentions.link.private": "dodaj je do tego prywatnego kanału",
|
||||
"post_body.check_for_out_of_channel_mentions.link.public": "dodaj je do kanału",
|
||||
"post_body.check_for_out_of_channel_mentions.message_last": "? Będą mieć dostęp do całej historii wiadomości.",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "zostały wspomniane, ale nie są w kanale. Czy chciałbyś ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "został wspomniany, ale nie ma go w kanale. Czy chciałbyś ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.multiple": "nie zostali powiadomieni poprzez tą wzmiankę, ponieważ nie są na kanale. Czy chciałbyś ",
|
||||
"post_body.check_for_out_of_channel_mentions.message.one": "nie zostali powiadomieni poprzez tą wzmiankę, ponieważ nie są na kanale. Czy chciałbyś ",
|
||||
"post_body.commentedOn": "skomentował wiadomość {name}: ",
|
||||
"post_body.deleted": "(wiadomość usunięta)",
|
||||
"post_info.auto_responder": "AUTOMATYCZNA ODPOWIEDŹ",
|
||||
"post_info.bot": "BOT",
|
||||
"post_info.del": "Usuń",
|
||||
"post_info.edit": "Edytuj",
|
||||
"post_info.guest": "GOŚĆ",
|
||||
"post_info.message.show_less": "Pokaż Mniej",
|
||||
"post_info.message.show_more": "Pokaż Więcej",
|
||||
"post_info.system": "System",
|
||||
"post_message_view.edited": "(edytowany)",
|
||||
"posts_view.newMsg": "Nowe Wiadomości",
|
||||
"rename_channel.handleHolder": "alfanumeryczne znaki z małej litery",
|
||||
"rename_channel.url": "URL:",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "Część tego wątku została usunięta z powodu zasady retencji danych. Nie możesz już odpowiadać na ten wątek.",
|
||||
"search_bar.search": "Szukaj",
|
||||
"search_header.results": "Wyniki wyszukiwania",
|
||||
@@ -498,20 +564,22 @@
|
||||
"status_dropdown.set_offline": "Offline",
|
||||
"status_dropdown.set_online": "Dostępny",
|
||||
"status_dropdown.set_ooo": "Poza Biurem",
|
||||
"suggestion.mention.all": "OSTRZEŻENIE: wspomina wszystkich na kanale",
|
||||
"suggestion.mention.channel": "Powiadamia wszystkich na kanale",
|
||||
"suggestion.mention.all": "Powiadamia wszystkich na tym kanale",
|
||||
"suggestion.mention.channel": "Powiadamia wszystkich na tym kanale",
|
||||
"suggestion.mention.channels": "Moje kanały",
|
||||
"suggestion.mention.here": "Powiadamia wszystkich na kanale i on-line",
|
||||
"suggestion.mention.here": "Powiadamia wszystkich obecnie dostępnych na kanale",
|
||||
"suggestion.mention.members": "Członkowie kanału",
|
||||
"suggestion.mention.morechannels": "Inne kanały",
|
||||
"suggestion.mention.nonmembers": "Nie na kanale",
|
||||
"suggestion.mention.special": "Specjalne wzmianki",
|
||||
"suggestion.mention.you": "(you)",
|
||||
"suggestion.search.direct": "Wiadomości bezpośrednie",
|
||||
"suggestion.search.private": "Kanały prywatne",
|
||||
"suggestion.search.public": "Kanały publiczne",
|
||||
"terms_of_service.agreeButton": "Zgadzam się",
|
||||
"terms_of_service.api_error": "Nie można ukończyć żądania. Jeśli ten problem będzie się powtarzał, skontaktuj się z Administratorem Systemu.",
|
||||
"user.settings.display.clockDisplay": "Wyświetlanie czasu",
|
||||
"user.settings.display.custom_theme": "Niestandardowy motyw",
|
||||
"user.settings.display.militaryClock": "24-godzinny (przykład: 16:00)",
|
||||
"user.settings.display.normalClock": "12-godzinny (przykład: 4:00 pm)",
|
||||
"user.settings.display.preferTime": "Wybierz, jak wyświetlany jest czas.",
|
||||
@@ -538,7 +606,7 @@
|
||||
"user.settings.notifications.email.immediately": "Natychmiastowo",
|
||||
"user.settings.notifications.email.never": "Nigdy",
|
||||
"user.settings.notifications.email.send": "Wysyłanie powiadomień e-mail",
|
||||
"user.settings.notifications.emailInfo": "Wysyłane są powiadomienia o wzmiankach i wiadomościach bezpośrednich, gdy jesteś w trybie offline lub z dala od {siteName} przez ponad 5 minut.",
|
||||
"user.settings.notifications.emailInfo": "Powiadomienia E-Mail dla wzmianek i wiadomości, są wysyłane gry jesteś offline lub zaraz wracasz dłużej niż 5 minut.",
|
||||
"user.settings.notifications.never": "Nigdy",
|
||||
"user.settings.notifications.onlyMentions": "Tylko dla wzmianek i bezpośrednich wiadomości",
|
||||
"user.settings.push_notification.away": "Zaraz wracam lub offline",
|
||||
@@ -547,4 +615,4 @@
|
||||
"user.settings.push_notification.offline": "Offline",
|
||||
"user.settings.push_notification.online": "Tryb online, offline lub zaraz wracam",
|
||||
"web.root.signup_info": "Cała komunikacja Twojego zespołu w jednym miejscu, z natychmiastowym przeszukiwaniem i dostępna z każdego miejsca."
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user