mirror of
https://github.com/zulip/zulip.git
synced 2025-10-24 16:43:57 +00:00
Compare commits
56 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4174047f64 | ||
|
|
adbee935f7 | ||
|
|
ebed224395 | ||
|
|
738429cf77 | ||
|
|
2f91471e98 | ||
|
|
8f9807176e | ||
|
|
217f5731fe | ||
|
|
ca0fd7f797 | ||
|
|
da4c4f74f2 | ||
|
|
b2068222e0 | ||
|
|
2dfc0463bd | ||
|
|
92c538c862 | ||
|
|
2e03e1b6ee | ||
|
|
0ac81a1b77 | ||
|
|
92e840efd1 | ||
|
|
f1a8c402d1 | ||
|
|
8878fee6d6 | ||
|
|
783f3fac3b | ||
|
|
5f397e5fa8 | ||
|
|
8ff2684d61 | ||
|
|
016f53711d | ||
|
|
e921c7dafe | ||
|
|
9b950f9c6a | ||
|
|
aab515feb9 | ||
|
|
b178bb7c59 | ||
|
|
8a783c448f | ||
|
|
f4f8d091a9 | ||
|
|
67157ec2b8 | ||
|
|
4bf4c8a040 | ||
|
|
08a844153c | ||
|
|
69e04c20f9 | ||
|
|
ec8d341cae | ||
|
|
3ee59df091 | ||
|
|
dd940d2eac | ||
|
|
e3f0c28528 | ||
|
|
b44ee89245 | ||
|
|
ee2654c4ee | ||
|
|
c12f8de80b | ||
|
|
94437ab5be | ||
|
|
a9a30ad5b4 | ||
|
|
e9f0ef4c15 | ||
|
|
2e16e27265 | ||
|
|
f5e2a2a38f | ||
|
|
5a177bff3a | ||
|
|
fabb5ffe94 | ||
|
|
5b4a673bbd | ||
|
|
afeb73e12a | ||
|
|
d5a39a6564 | ||
|
|
a4b5ee41ea | ||
|
|
884a8d5628 | ||
|
|
8c9e521f57 | ||
|
|
2f04875ad3 | ||
|
|
9dcf1944ad | ||
|
|
6b895d1622 | ||
|
|
1a65e8a538 | ||
|
|
3240a513f1 |
10
.github/ISSUE_TEMPLATE/1_discussed_on_czo.md
vendored
Normal file
10
.github/ISSUE_TEMPLATE/1_discussed_on_czo.md
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
---
|
||||
name: Issue discussed in the Zulip development community
|
||||
about: Bug report, feature or improvement already discussed on chat.zulip.org.
|
||||
---
|
||||
|
||||
<!-- Issue description -->
|
||||
|
||||
<!-- Link to a message in the chat.zulip.org discussion. Message links will still work even if the topic is renamed or resolved. Link back to this issue from the chat.zulip.org thread. -->
|
||||
|
||||
CZO thread
|
||||
17
.github/ISSUE_TEMPLATE/2_bug_report.md
vendored
Normal file
17
.github/ISSUE_TEMPLATE/2_bug_report.md
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: A concrete bug report with steps to reproduce the behavior. (See also "Possible bug" below.)
|
||||
labels: ["bug"]
|
||||
---
|
||||
|
||||
<!-- Describe what you were expecting to see, what you saw instead, and steps to take in order to reproduce the buggy behavior. Screenshots can be helpful. -->
|
||||
|
||||
<!-- Check the box for the version of Zulip you are using (see https://zulip.com/help/view-zulip-version).-->
|
||||
|
||||
**Zulip Server and web app version:**
|
||||
|
||||
- [ ] Zulip Cloud (`*.zulipchat.com`)
|
||||
- [ ] Zulip Server 7.0+
|
||||
- [ ] Zulip Server 6.0+
|
||||
- [ ] Zulip Server 5.0 or older
|
||||
- [ ] Other or not sure
|
||||
6
.github/ISSUE_TEMPLATE/3_feature_request.md
vendored
Normal file
6
.github/ISSUE_TEMPLATE/3_feature_request.md
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
---
|
||||
name: Feature or improvement request
|
||||
about: A specific proposal for a new feature of improvement. (See also "Feature suggestion or feedback" below.)
|
||||
---
|
||||
|
||||
<!-- Describe the proposal, including how it would help you or your organization. -->
|
||||
14
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
14
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Possible bug
|
||||
url: https://zulip.readthedocs.io/en/latest/contributing/reporting-bugs.html
|
||||
about: Report unexpected behavior that may be a bug.
|
||||
- name: Feature suggestion or feedback
|
||||
url: https://zulip.readthedocs.io/en/latest/contributing/suggesting-features.html
|
||||
about: Start a discussion about your idea for improving Zulip.
|
||||
- name: Issue with running or upgrading a Zulip server
|
||||
url: https://zulip.readthedocs.io/en/latest/production/troubleshooting.html
|
||||
about: We provide free, interactive support for the vast majority of questions about running a Zulip server.
|
||||
- name: Other support requests and sales questions
|
||||
url: https://zulip.com/help/contact-support
|
||||
about: Contact us — we're happy to help!
|
||||
@@ -55,8 +55,10 @@ needs doing:
|
||||
**Non-code contributions**: Some of the most valuable ways to contribute
|
||||
don't require touching the codebase at all. For example, you can:
|
||||
|
||||
- [Report issues](#reporting-issues), including both feature requests and
|
||||
bug reports.
|
||||
- Report issues, including both [feature
|
||||
requests](https://zulip.readthedocs.io/en/latest/contributing/suggesting-features.html)
|
||||
and [bug
|
||||
reports](https://zulip.readthedocs.io/en/latest/contributing/reporting-bugs.html).
|
||||
- [Give feedback](#user-feedback) if you are evaluating or using Zulip.
|
||||
- [Participate
|
||||
thoughtfully](https://zulip.readthedocs.io/en/latest/contributing/design-discussions.html)
|
||||
@@ -314,29 +316,6 @@ experience, these are the best predictors of success:
|
||||
|
||||
[great-questions]: https://zulip.readthedocs.io/en/latest/contributing/asking-great-questions.html
|
||||
|
||||
## Reporting issues
|
||||
|
||||
If you find an easily reproducible bug and/or are experienced in reporting
|
||||
bugs, feel free to just open an issue on the relevant project on GitHub.
|
||||
|
||||
If you have a feature request or are not yet sure what the underlying bug
|
||||
is, the best place to post issues is
|
||||
[#issues](https://chat.zulip.org/#narrow/stream/9-issues) (or
|
||||
[#mobile](https://chat.zulip.org/#narrow/stream/48-mobile) or
|
||||
[#desktop](https://chat.zulip.org/#narrow/stream/16-desktop)) on the
|
||||
[Zulip community server](https://zulip.com/development-community/).
|
||||
This allows us to interactively figure out what is going on, let you know if
|
||||
a similar issue has already been opened, and collect any other information
|
||||
we need. Choose a 2-4 word topic that describes the issue, explain the issue
|
||||
and how to reproduce it if known, your browser/OS if relevant, and a
|
||||
[screenshot or screenGIF](https://zulip.readthedocs.io/en/latest/tutorials/screenshot-and-gif-software.html)
|
||||
if appropriate.
|
||||
|
||||
**Reporting security issues**. Please do not report security issues
|
||||
publicly, including on public streams on chat.zulip.org. You can
|
||||
email [security@zulip.com](mailto:security@zulip.com). We create a CVE for every
|
||||
security issue in our released software.
|
||||
|
||||
## User feedback
|
||||
|
||||
Nearly every feature we develop starts with a user request. If you are part
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
# Bug report guidelines
|
||||
|
||||
Please include these elements in your bug report to make it easier for us to help you.
|
||||
|
||||
- A brief title
|
||||
|
||||
- An explanation of what you were expecting vs. the actual result
|
||||
|
||||
- Steps to take in order to reproduce the buggy behavior
|
||||
|
||||
- Whether you are using Zulip in production or in the development
|
||||
environment, and whether these are old versions
|
||||
|
||||
- Whether you are using the web app, a desktop app or a mobile device
|
||||
to access Zulip
|
||||
|
||||
- Any additional information that would help: screenshots, GIFs, a
|
||||
pastebin of the error log
|
||||
|
||||
Further reading:
|
||||
|
||||
- [How to write a bug report that will make your engineers love you](https://testlio.com/blog/the-ideal-bug-report/)
|
||||
- [How to Report Bugs Effectively](https://www.chiark.greenend.org.uk/~sgtatham/bugs.html)
|
||||
@@ -16,6 +16,7 @@ reviewable-prs
|
||||
code-reviewing
|
||||
review-process
|
||||
zulipbot-usage
|
||||
bug-reports
|
||||
reporting-bugs
|
||||
suggesting-features
|
||||
licensing
|
||||
```
|
||||
|
||||
155
docs/contributing/reporting-bugs.md
Normal file
155
docs/contributing/reporting-bugs.md
Normal file
@@ -0,0 +1,155 @@
|
||||
# Reporting bugs
|
||||
|
||||
The are several ways to report bugs (or possible bugs) you encounter in Zulip.
|
||||
|
||||
- If you have a concrete bug report with steps to reproduce the behavior, [file an
|
||||
issue](#filing-a-github-issue) in the appropriate GitHub repository.
|
||||
- If you are not sure whether the issue you encountered is a bug, or how to
|
||||
reproduce it, [start a
|
||||
conversation](#starting-a-conversation-about-a-possible-bug) in the Zulip
|
||||
development community.
|
||||
- To report a possible security issue, contact Zulip's security team at
|
||||
[security@zulip.com](mailto:security@zulip.com). _Do not_ report security issues
|
||||
publicly (in GitHub or in the Zulip development community). We create a CVE for
|
||||
every security issue in our released software.
|
||||
- If reporting a bug requires sharing private details about your
|
||||
organization, email [support@zulip.com](mailto:support@zulip.com).
|
||||
|
||||
No matter where you report the bug, please follow the instructions below for
|
||||
what to include in a bug report.
|
||||
|
||||
## What to include in a bug report
|
||||
|
||||
1. **Describe** what you were expecting to see, what you saw instead, and steps
|
||||
that may help others reproduce the surprising behavior you experienced.
|
||||
Include screenshots and/or screen captures (see [recommended
|
||||
tools](../tutorials/screenshot-and-gif-software.md)) if they help
|
||||
communicate what you are describing, but avoid posting long videos.
|
||||
1. Indicate the **[version](https://zulip.com/help/view-zulip-version)** of the
|
||||
Zulip app where you encountered the bug. It may also be helpful to note your
|
||||
operating system, whether you are using the web app or the desktop app, and
|
||||
your browser if using the web app.
|
||||
|
||||
## Filing a GitHub issue
|
||||
|
||||
Filing a GitHub issue works best when:
|
||||
|
||||
- You are confident that the behavior you encountered is a bug, not some quirk
|
||||
of how a feature works that may turn out to be intentional.
|
||||
- You can describe clearly what you were expecting to see, and what you saw instead.
|
||||
- You can provide steps for someone else to reproduce the issue you encountered.
|
||||
This is important for developers to be able to fix the bug, and test that
|
||||
their fix worked.
|
||||
|
||||
If all of the above accurately describe your situation, please file an issue!
|
||||
Otherwise, we recommend [starting a
|
||||
conversation](#starting-a-conversation-about-a-possible-bug) in the Zulip
|
||||
development community, so that the problem you encountered can be discussed
|
||||
interactively.
|
||||
|
||||
Steps and best practices for filing an issue:
|
||||
|
||||
1. Report the issue in the **appropriate [Zulip
|
||||
repository](https://github.com/zulip)**. The most commonly used repositories
|
||||
are:
|
||||
- [zulip/zulip](https://github.com/zulip/zulip/issues) for issues with the
|
||||
Zulip web app or server. A good default if you aren't sure which repository
|
||||
to use.
|
||||
- [zulip/zulip-mobile](https://github.com/zulip/zulip-mobile/issues) for
|
||||
issues with the mobile apps.
|
||||
- [zulip/zulip-desktop](https://github.com/zulip/zulip-desktop/issues) for
|
||||
issues that are specific to the Zulip desktop app, and _do not_ occur in
|
||||
the web app.
|
||||
- [zulip/zulip-terminal](https://github.com/zulip/zulip-terminal/issues) for
|
||||
issues with the terminal app.
|
||||
2. Do a **quick search** of the repository to see if your issue has already
|
||||
been filed. If it has, you can add a comment if that seems helpful.
|
||||
3. If you are aware of a related discussion in the Zulip development community,
|
||||
please **cross-link** between the issue and the discussion thread. [Link to a
|
||||
specific
|
||||
message](https://zulip.com/help/link-to-a-message-or-conversation#get-a-link-to-a-specific-message)
|
||||
in the discussion thread, as message links will still work even if the topic is
|
||||
renamed or resolved.
|
||||
|
||||
To encourage prompt attention and discussion for a bug report you have filed,
|
||||
you can send a message in the Zulip development community with the key points
|
||||
from your report. Be sure to [link to the GitHub
|
||||
issue](https://zulip.com/development-community/#linking-to-github-issues-and-pull-requests).
|
||||
See the following section for advice on where and how to start the conversation.
|
||||
|
||||
## Starting a conversation about a possible bug
|
||||
|
||||
If you are not sure whether the issue you encountered is a bug, or how to
|
||||
reproduce it, we highly recommend reporting it in the [Zulip development
|
||||
community](https://zulip.com/development-community/). It's the best place to
|
||||
interactively discuss your problem.
|
||||
|
||||
Steps and best practices for starting a conversation:
|
||||
|
||||
1. [**Join** the Zulip development
|
||||
community](https://zulip.com/development-community/) if you don't already
|
||||
have an account.
|
||||
2. Pick an **appropriate stream** to report your issue:
|
||||
- [#issues](https://chat.zulip.org/#narrow/stream/9-issues) for issues with
|
||||
the Zulip web app or server. A good default if you aren't sure which stream
|
||||
to use.
|
||||
- [#mobile](https://chat.zulip.org/#narrow/stream/48-mobile) for issues with
|
||||
the mobile apps.
|
||||
- [#desktop](https://chat.zulip.org/#narrow/stream/16-desktop) for issues
|
||||
that are specific to the Zulip desktop app, and _do not_ occur in the web
|
||||
app.
|
||||
- [#zulip-terminal](https://chat.zulip.org/#narrow/stream/206-zulip-terminal)
|
||||
for issues with the terminal app.
|
||||
- [#production
|
||||
help](https://chat.zulip.org/#narrow/stream/31-production-help) for issues
|
||||
related to self-hosting Zulip. See the [troubleshooting
|
||||
guide](../production/troubleshooting.md) for additional details.
|
||||
3. **[Start a new topic](https://zulip.com/help/starting-a-new-topic)** for
|
||||
discussing your issue, using a brief summary of the issue as the name of the topic.
|
||||
|
||||
If you aren't sure where to post or how to name your topic, don't worry!
|
||||
Moderators can always rename the topic, or move the thread to another stream.
|
||||
|
||||
Once a possible bug is reported, members of the development community will jump
|
||||
in to discuss whether the report constitutes a bug, how to reproduce it, and how
|
||||
it can be resolved. The initial reporter can help by monitoring the discussion,
|
||||
and replying to any follow-up questions. If the report is determined to be a
|
||||
reproducible bug, a GitHub issue will be filed to keep track of it (see below).
|
||||
|
||||
## Managing bug reports
|
||||
|
||||
This section describes our bug management process. All community members are
|
||||
encouraged to help make sure things run smoothly, whether or not they originally
|
||||
reported the bug.
|
||||
|
||||
Whenever a bug is tracked in GitHub and also discussed in the development
|
||||
community, be sure to cross-link between the issue and the conversation. [Link
|
||||
to a specific
|
||||
message](https://zulip.com/help/link-to-a-message-or-conversation#get-a-link-to-a-specific-message)
|
||||
in the discussion thread, as message links will still work even if the topic is
|
||||
renamed or resolved.
|
||||
|
||||
- If you encounter a definite bug with a clear reproducer and significant user
|
||||
impact, it is best to both file a GitHub issue, and immediately start a
|
||||
discussion in the development community. This helps us address important
|
||||
issues as quickly as possible.
|
||||
- For minor bugs (e.g., a visual glitch in a settings menu for very long stream
|
||||
names), filing a GitHub issue is sufficient.
|
||||
- If a potential bug discussed in the development community is confirmed to be
|
||||
an actual, reproducible bug, anyone can help out by filing a GitHub issue to
|
||||
track it:
|
||||
- In some cases, especially if we're planning to fix the issue right away, the
|
||||
issue description can be a quote from a message with a link to the
|
||||
discussion -- no need to stress over making it perfect.
|
||||
- [Use Zulipbot](../contributing/zulipbot-usage.md) to add the appropriate
|
||||
labels, including “bug” and at least one area label; leave a comment if you
|
||||
don't know what area labels to use.
|
||||
- You can add the “help wanted” label (and claim the issue if you like) if
|
||||
that is appropriate based on the discussion. Note that sometimes we won't
|
||||
mark a reproducible bug as “help wanted”, e.g., if we want a core
|
||||
contributor to take it on, if the fix will happen as part of a larger
|
||||
project, etc.
|
||||
- Don't forget to cross-link between the issue and the discussion.
|
||||
- If a bug report in GitHub is not sufficiently clear, Zulip maintainers will
|
||||
often encourage the reporter to discuss it interactively in the development
|
||||
community.
|
||||
87
docs/contributing/suggesting-features.md
Normal file
87
docs/contributing/suggesting-features.md
Normal file
@@ -0,0 +1,87 @@
|
||||
# Suggesting features and improvements
|
||||
|
||||
If you have ideas for how to make Zulip better, we'd love to hear from you! Many
|
||||
improvements start with a user's suggestion. The best way to suggest a feature
|
||||
or an improvement is by starting a conversation in the [Zulip development
|
||||
community](https://zulip.com/development-community/). It's a great way to engage
|
||||
interactively with members of the community, and explore how best to improve
|
||||
Zulip for you and other users.
|
||||
|
||||
Usually, if the discussion leads to a concrete proposal, Zulip's product team
|
||||
will follow up by filing a GitHub issue to track the idea. Many conversations do
|
||||
not immediately lead to a GitHub issue, and that's OK! Sometimes the time is not
|
||||
right to pin down a plan, or more ideas need to come in before a great proposal
|
||||
emerges. Regardless of whether a discussion results in immediate action, we
|
||||
appreciate the time everyone takes to make suggestions and brainstorm ideas.
|
||||
|
||||
## What to include in your proposal
|
||||
|
||||
- Describe your idea. It's absolutely fine to bring up a problem without
|
||||
suggesting a concrete solution.
|
||||
- Provide context on how the change you are proposing would help you or your
|
||||
organization. It is often helpful to describe how you are using Zulip (e.g.,
|
||||
"I work at a small startup", or "I'm teaching a class"). This lets us combine
|
||||
our Zulip expertise with your requirements to come up with a great design for
|
||||
a feature.
|
||||
- If you are aware of a related issue in GitHub or a prior conversation in the
|
||||
development community, please include a link.
|
||||
|
||||
## Starting a conversation about a suggested feature or improvement
|
||||
|
||||
Steps and best practices for starting a conversation:
|
||||
|
||||
1. [**Join** the Zulip development
|
||||
community](https://zulip.com/development-community/) if you don't already
|
||||
have an account.
|
||||
2. Pick an **appropriate stream** to report your issue:
|
||||
- [#feedback](https://chat.zulip.org/#narrow/stream/137-feedback) for suggestions for
|
||||
the Zulip web app or server. A good default if you aren't sure which stream
|
||||
to use.
|
||||
- [#mobile](https://chat.zulip.org/#narrow/stream/48-mobile) for suggestions
|
||||
for the mobile apps.
|
||||
- [#desktop](https://chat.zulip.org/#narrow/stream/16-desktop) for suggestions
|
||||
that are specific to the Zulip desktop app.
|
||||
- [#zulip-terminal](https://chat.zulip.org/#narrow/stream/206-zulip-terminal)
|
||||
for suggestions for the terminal app.
|
||||
- [#production
|
||||
help](https://chat.zulip.org/#narrow/stream/31-production-help) for suggestions
|
||||
related to self-hosting Zulip.
|
||||
3. **[Start a new topic](https://zulip.com/help/starting-a-new-topic)** for
|
||||
discussing your suggestions, using a brief summary of the proposal as the
|
||||
name of the topic.
|
||||
|
||||
If you aren't sure where to post or how to name your topic, don't worry!
|
||||
Moderators can always rename the topic, or move the thread to another stream.
|
||||
|
||||
Members of the development community will jump in to discuss your idea. You can
|
||||
help by participating in the discussion, including replying to any follow-up
|
||||
questions, and helping develop the proposal. The discussion may conclude with an
|
||||
issue being filed in GitHub to track the plan that was developed.
|
||||
|
||||
## Filing a GitHub issue
|
||||
|
||||
Filing a GitHub issue can be effective when you have a very specific proposal
|
||||
for a feature or improvement. Steps and best practices for filing an issue:
|
||||
|
||||
1. File the issue in the **appropriate [Zulip
|
||||
repository](https://github.com/zulip)**. The most commonly used repositories
|
||||
are:
|
||||
- [zulip/zulip](https://github.com/zulip/zulip/issues) for suggestions for the
|
||||
Zulip web app or server. A good default if you aren't sure which repository
|
||||
to use.
|
||||
- [zulip/zulip-mobile](https://github.com/zulip/zulip-mobile/issues) for
|
||||
suggestions for the mobile apps.
|
||||
- [zulip/zulip-desktop](https://github.com/zulip/zulip-desktop/issues) for
|
||||
suggestions that are specific to the Zulip desktop app.
|
||||
- [zulip/zulip-terminal](https://github.com/zulip/zulip-terminal/issues) for
|
||||
suggestions for the terminal app.
|
||||
2. Do a **quick search** of the repository to see if there is already a similar
|
||||
request. If there is, add a comment explaining why you would also appreciate
|
||||
the proposed change, and making any additional suggestions. Do not file a new
|
||||
issue.
|
||||
3. If you are aware of a related discussion in the Zulip development community,
|
||||
please **cross-link** between the issue and the discussion thread. [Link to a
|
||||
specific
|
||||
message](https://zulip.com/help/link-to-a-message-or-conversation#get-a-link-to-a-specific-message)
|
||||
in the discussion thread, as message links will still work even if the topic is
|
||||
renamed or resolved.
|
||||
@@ -7,6 +7,62 @@ up-to-date list of all changes.
|
||||
|
||||
## Zulip 7.x series
|
||||
|
||||
### 7.2 -- 2023-07-05
|
||||
|
||||
- Started logging a more accurate, detailed, and actionable error messages when
|
||||
[common reverse proxy mis-configurations][proxies] are detected.
|
||||
|
||||
- Improved [reverse proxy documentation][proxies] to clarify that trust of
|
||||
`X-Fowarded-Proto` is also necessary.
|
||||
|
||||
- Removed [reverse proxy][proxies] nginx configuration files when the
|
||||
[`loadbalancer.ips`](../production/deployment.md#ips)
|
||||
setting has been unset.
|
||||
- Improved error-handling of scheduled emails, so they cannot attempt infinite
|
||||
deliveries of a message with no recipients.
|
||||
- Fixed a bug with the
|
||||
[PGroonga integration](../subsystems/full-text-search.md#multi-language-full-text-search)
|
||||
that would cause the PostgreSQL server to crash when a search was run.
|
||||
- Fixed a bug that would cause some messages not to be marked as read.
|
||||
- Fixed a bug that still shoed file-upload banners after re-opening the compose
|
||||
box.
|
||||
- Fixed a bug that prevented file uploads with very unusual file names.
|
||||
- Adjusted the bot icon to make it more visible on the light theme.
|
||||
- Fixed minor rendering issues on the “press enter to send” indicator.
|
||||
- Fixed the scrollbar behavior on the stream settings page.
|
||||
- Improved error reporting when a Slack token fails to validate during
|
||||
[import](https://zulip.com/help/import-from-slack#export-your-slack-data),
|
||||
such as a token having too few permissions.
|
||||
- Added support for IPv6
|
||||
[nameservers in the nginx configuration](../production/deployment.md#nameserver).
|
||||
- Updated translations.
|
||||
|
||||
[proxies]: ../production/deployment.md#configuring-zulip-to-trust-proxies
|
||||
|
||||
### 7.1 -- 2023-06-13
|
||||
|
||||
- Added checks to check that Zulip is being installed on a
|
||||
[supported CPU and OS architecture](../production/requirements.md).
|
||||
- Improved error-handling around the
|
||||
[`upgrade-postgresql`](../production/upgrade.md#upgrading-postgresql)
|
||||
tool.
|
||||
- Fixed a couple bugs in database migrations as part of the upgrade that could
|
||||
cause the upgrade to fail to complete.
|
||||
- Fixed a bug where
|
||||
[scheduled messages](https://zulip.com/help/schedule-a-message) with `@all`
|
||||
would fail to send.
|
||||
- Fixed a bug which would sometimes cause the `j` and `k` keys to not be able to
|
||||
be typed in the compose box.
|
||||
- Fixed anonymous access to the “download” link on images in
|
||||
[public-access streams](https://zulip.com/help/public-access-option).
|
||||
- Changed the default DNS resolver in nginx’s configuration to match the
|
||||
system’s; this fixes deployments which use the
|
||||
[S3 storage backend](../production/upload-backends.md)
|
||||
and did not run `systemd-resolved`, like Docker and some versions of Debian.
|
||||
- Updated several pieces of documentation.
|
||||
- Updated translations, including new translations for Luri (Bakhtiari),
|
||||
Brazilian Portuguese, and Tagalog.
|
||||
|
||||
### 7.0 -- 2023-05-31
|
||||
|
||||
#### Highlights
|
||||
@@ -158,14 +214,15 @@ up-to-date list of all changes.
|
||||
- PostgreSQL 11 is no longer supported; if you are currently using it, you will
|
||||
need to [upgrade PostgreSQL](../production/upgrade.md#upgrading-postgresql)
|
||||
before upgrading Zulip.
|
||||
- Installations that deploy Zulip behind a [reverse
|
||||
proxy][reverse-proxy-docs] should make sure the proxy is configured
|
||||
to set the `X-Forwarded-Proto` HTTP header; the documentation has
|
||||
updated example configuration.
|
||||
- Installations that deploy Zulip behind a [reverse proxy][reverse-proxy-docs]
|
||||
should make sure the proxy is configured to set the `X-Forwarded-Proto` HTTP
|
||||
header, and that [`loadbalancer.ips` is accurate][loadbalancer-ips] for the
|
||||
reverse proxy's IP; the documentation has updated its example configurations.
|
||||
- Zulip's Twitter preview integration has been disabled due to Twitter
|
||||
desupporting the API that it relied on.
|
||||
|
||||
[reverse-proxy-docs]: ../production/deployment.md#putting-the-zulip-application-behind-a-reverse-proxy
|
||||
[loadbalancer-ips]: ../production/deployment.md#configuring-zulip-to-trust-proxies
|
||||
|
||||
## Zulip 6.x series
|
||||
|
||||
|
||||
@@ -176,15 +176,15 @@ The Zulip community feels strongly that all the little issues are, in
|
||||
aggregate, just as important as the big things. Most resolved issues
|
||||
do not have any of these priority labels.
|
||||
|
||||
We welcome participation from our user community in influencing the
|
||||
Zulip roadmap. If a bug or missing feature is causing significant
|
||||
pain for you, we'd love to hear from you, either in
|
||||
We welcome participation from our user community in influencing the Zulip
|
||||
roadmap. If a bug or missing feature is causing significant pain for you, we'd
|
||||
love to hear from you, either in
|
||||
[chat.zulip.org](https://zulip.com/development-community/) or on the relevant
|
||||
GitHub issue. Please an include an explanation of your use case: such
|
||||
details can be extremely helpful in designing appropriately general
|
||||
solutions, and also helps us identify cases where an existing solution
|
||||
can solve your problem. See [Reporting
|
||||
issues](../contributing/contributing.md#reporting-issues) for more details.
|
||||
GitHub issue. Please an include an explanation of your use case: such details
|
||||
can be extremely helpful in designing appropriately general solutions, and also
|
||||
helps us identify cases where an existing solution can solve your problem. See
|
||||
our guides for [reporting bugs](../contributing/reporting-bugs.md) and [giving
|
||||
feedback](../contributing/contributing.md#user-feedback) for more details.
|
||||
|
||||
## Client apps
|
||||
|
||||
|
||||
@@ -407,17 +407,22 @@ requests from a reverse proxy as follows:
|
||||
1. Finally, restart the Zulip server, using
|
||||
`/home/zulip/deployments/current/scripts/restart-server`.
|
||||
|
||||
Note that Zulip must be able to accurately determine if its connection to the
|
||||
client was over HTTPS or not; if you enable `http_only`, it is very important
|
||||
that you correctly configure Zulip to trust the `X-Forwarded-Proto` header from
|
||||
its proxy (see the next section), or clients may see infinite redirects.
|
||||
|
||||
#### Configuring Zulip to trust proxies
|
||||
|
||||
Before placing Zulip behind a reverse proxy, it needs to be configured
|
||||
to trust the client IP addresses that the proxy reports via the
|
||||
`X-Forwarded-For` header. This is important to have accurate IP
|
||||
addresses in server logs, as well as in notification emails which are
|
||||
sent to end users. Zulip doesn't default to trusting all
|
||||
`X-Forwarded-For` headers, because doing so would allow clients to
|
||||
spoof any IP address; we specify which IP addresses are the Zulip
|
||||
server's incoming proxies, so we know how much of the
|
||||
`X-Forwarded-For` header to trust.
|
||||
Before placing Zulip behind a reverse proxy, it needs to be configured to trust
|
||||
the client IP addresses that the proxy reports via the `X-Forwarded-For` header,
|
||||
and the protocol reported by the `X-Forwarded-Proto` header. This is important
|
||||
to have accurate IP addresses in server logs, as well as in notification emails
|
||||
which are sent to end users. Zulip doesn't default to trusting all
|
||||
`X-Forwarded-*` headers, because doing so would allow clients to spoof any IP
|
||||
address, and claim connections were over a secure connection when they were not;
|
||||
we specify which IP addresses are the Zulip server's incoming proxies, so we
|
||||
know which `X-Forwarded-*` headers to trust.
|
||||
|
||||
1. Determine the IP addresses of all reverse proxies you are setting up, as seen
|
||||
from the Zulip host. Depending on your network setup, these may not be the
|
||||
@@ -824,6 +829,14 @@ immutable, this serves only as a potential additional limit on the
|
||||
size of the contents on disk; `s3_disk_cache_size` is expected to be
|
||||
the primary control for cache sizing.
|
||||
|
||||
#### `nameserver`
|
||||
|
||||
When the [S3 storage backend][s3-backend] is in use, downloads from S3 are
|
||||
proxied from nginx, whose configuration requires an explicit value of a DNS
|
||||
nameserver to resolve the S3 server's hostname. Zulip defaults to using the
|
||||
resolver found in `/etc/resolv.conf`; this setting overrides any value found
|
||||
there.
|
||||
|
||||
[s3-backend]: upload-backends.md
|
||||
|
||||
#### `uwsgi_listen_backlog_limit`
|
||||
@@ -948,8 +961,8 @@ which have more than 20k users.
|
||||
#### `ips`
|
||||
|
||||
Comma-separated list of IP addresses or netmasks of external load balancers
|
||||
whose `X-Forwarded-For` should be respected. These can be individual IP
|
||||
addresses, or CIDR IP address ranges.
|
||||
whose `X-Forwarded-For` and `X-Forwarded-Proto` should be respected. These can
|
||||
be individual IP addresses, or CIDR IP address ranges.
|
||||
|
||||
### `[http_proxy]`
|
||||
|
||||
|
||||
@@ -26,8 +26,8 @@ There are two ways to configure Zulip's email gateway:
|
||||
The local delivery configuration is preferred for production because
|
||||
it supports nicer looking email addresses and has no cron delay. The
|
||||
polling option is convenient for testing/developing this feature
|
||||
because it doesn't require a public IP address or setting up MX
|
||||
records in DNS.
|
||||
because it doesn't require a public IP address, setting up MX
|
||||
records in DNS, or adjusting firewalls.
|
||||
|
||||
:::{note}
|
||||
Incoming emails are rate-limited, with the following limits:
|
||||
@@ -62,6 +62,10 @@ using an [HTTP reverse proxy][reverse-proxy]).
|
||||
1 hostname.example.com
|
||||
```
|
||||
|
||||
1. If you have a network firewall enabled, configure it to allow incoming access
|
||||
to port 25 on the Zulip server from the public internet. Other mail servers
|
||||
will need to use it to deliver emails to Zulip.
|
||||
|
||||
1. Log in to your Zulip server; the remaining steps all happen there.
|
||||
|
||||
1. Add `, zulip::postfix_localmail` to `puppet_classes` in
|
||||
|
||||
@@ -188,13 +188,7 @@ the bottom of `/var/log/zulip/errors.log` for a traceback, and consult
|
||||
the [troubleshooting section](troubleshooting.md) for advice on
|
||||
how to debug.
|
||||
|
||||
**Community.** If the tips above don't help, please visit [#production
|
||||
help][production-help] in the [Zulip development community
|
||||
server][chat-zulip-org] for realtime help, and we'll try to help you
|
||||
out! Please provide details like the full traceback from the bottom
|
||||
of `/var/log/zulip/errors.log` in your report (ideally in a [code
|
||||
block][code-block]).
|
||||
|
||||
[chat-zulip-org]: https://zulip.com/development-community/
|
||||
[production-help]: https://chat.zulip.org/#narrow/stream/31-production-help
|
||||
[code-block]: https://zulip.com/help/code-blocks
|
||||
**Still having trouble?**
|
||||
Please see the [troubleshooting and monitoring
|
||||
guide](../production/troubleshooting.md) for additional advice and ways to get
|
||||
help.
|
||||
|
||||
@@ -1,5 +1,43 @@
|
||||
# Troubleshooting and monitoring
|
||||
|
||||
This page offers detailed guidance for troubleshooting and monitoring your Zulip
|
||||
installation. If you suspect that you have encountered a bug, or are otherwise
|
||||
unable to resolve an issue with your Zulip installation, best-effort community
|
||||
support is available in the [Zulip development community ][chat-zulip-org]. We
|
||||
provide free, interactive support for the vast majority of questions about
|
||||
running a Zulip server.
|
||||
|
||||
To report a problem or ask a question, please start a new topic in the
|
||||
[#production help][production-help] stream in the [Zulip development community
|
||||
][chat-zulip-org]:
|
||||
|
||||
- Describe what you are trying to do and any problems you've encountered.
|
||||
- Provide the relevant logs, such as the full traceback from the bottom
|
||||
of `/var/log/zulip/errors.log`, or the installation script logs at
|
||||
`/var/log/zulip/install.log`. Please post logging output using [code
|
||||
blocks][code-block], not screenshots.
|
||||
- Be sure to include what version of Zulip Server you are running, or between
|
||||
which versions you are upgrading.
|
||||
|
||||
[chat-zulip-org]: https://zulip.com/development-community/
|
||||
[production-help]: https://chat.zulip.org/#narrow/stream/31-production-help
|
||||
[code-block]: https://zulip.com/help/code-blocks
|
||||
|
||||
Contact [sales@zulip.com](mailto:sales@zulip.com) if you'd like to
|
||||
learn about paid support options, including phone support from Zulip's
|
||||
core engineering team.
|
||||
|
||||
## Overview and resources
|
||||
|
||||
If you encounter issues while self-hosting Zulip, the first thing to
|
||||
do is look at Zulip's logs, which are located in `/var/log/zulip/`.
|
||||
|
||||
That directory contains one log file for each service, plus
|
||||
`errors.log` (has all errors and the first place you should check),
|
||||
`server.log` (has logs from the Django and Tornado servers), and
|
||||
`workers.log` (has combined logs from the queue workers). Zulip also
|
||||
provides a [tool to search through `server.log`][log-search].
|
||||
|
||||
Zulip uses [Supervisor](http://supervisord.org/index.html) to monitor
|
||||
and control its many Python services. Read the next section, [Using
|
||||
supervisorctl](#using-supervisorctl), to learn how to use the
|
||||
@@ -10,23 +48,10 @@ overview](../overview/architecture-overview.md), particularly the
|
||||
[Components](../overview/architecture-overview.md#components) section. This will help you
|
||||
understand the many services Zulip uses.
|
||||
|
||||
If you encounter issues while running Zulip, take a look at Zulip's
|
||||
logs, which are located in `/var/log/zulip/`. That directory contains
|
||||
one log file for each service, plus `errors.log` (has all errors),
|
||||
`server.log` (has logs from the Django and Tornado servers), and
|
||||
`workers.log` (has combined logs from the queue workers). Zulip also
|
||||
provides a [tool to search through `server.log`][log-search].
|
||||
|
||||
[log-search]: ../subsystems/logging.md#searching-backend-log-files
|
||||
|
||||
The section [troubleshooting services](#troubleshooting-services)
|
||||
on this page includes details about how to fix common issues with Zulip services.
|
||||
|
||||
If you run into additional problems, [please report
|
||||
them](https://github.com/zulip/zulip/issues) so that we can update
|
||||
this page! The Zulip installation scripts logs its full output to
|
||||
`/var/log/zulip/install.log`, so please include the context for any
|
||||
tracebacks from that log.
|
||||
[log-search]: ../subsystems/logging.md#searching-backend-log-files
|
||||
|
||||
## Using supervisorctl
|
||||
|
||||
|
||||
@@ -694,6 +694,16 @@ the version of PostgreSQL are no longer linked to upgrades of the
|
||||
distribution; that is, you may opt to upgrade to PostgreSQL 15 while
|
||||
running Ubuntu 20.04.
|
||||
|
||||
Not all versions of Zulip Server support all versions of PostgreSQL, however:
|
||||
|
||||
| Zulip Server version | Supported versions of PostgreSQL |
|
||||
| -------------------- | -------------------------------- |
|
||||
| 3.x | 9.3, 9.5, 9.6, 10, 11, 12 |
|
||||
| 4.x | 9.3, 9.5, 9.6, 10, 11, 12, 13 |
|
||||
| 5.x | 10, 11, 12, 13, 14 |
|
||||
| 6.x | 11, 12, 13, 14 |
|
||||
| 7.x | 12, 13, 14, 15 |
|
||||
|
||||
To upgrade the version of PostgreSQL on the Zulip server:
|
||||
|
||||
1. Upgrade your server to the latest Zulip release (at least 3.0).
|
||||
|
||||
@@ -85,6 +85,18 @@ You may also wish to increase the cache sizes if the S3 storage (or
|
||||
S3-compatible equivalent) is not closely located to your Zulip server,
|
||||
as cache misses will be more expensive.
|
||||
|
||||
## nginx DNS nameserver configuration
|
||||
|
||||
The S3 cache described above is maintained by nginx. nginx's configuration
|
||||
requires an explicitly-set DNS nameserver to resolve the hostname of the S3
|
||||
servers; Zulip defaults this value to the first nameserver found in
|
||||
`/etc/resolv.conf`, but this resolver can be [adjusted in
|
||||
`/etc/zulip/zulip.conf`][s3-resolver] if needed. If you adjust this value, you
|
||||
will need to run `/home/zulip/deployments/current/scripts/zulip-puppet-apply` to
|
||||
update the nginx configuration for the new value.
|
||||
|
||||
[s3-resolver]: deployment.md#nameserver
|
||||
|
||||
## S3 bucket policy
|
||||
|
||||
The best way to do the S3 integration with Amazon is to create a new IAM user
|
||||
|
||||
@@ -66,10 +66,11 @@ Collective](https://opencollective.com/zulip).
|
||||
|
||||
## Help improve Zulip
|
||||
|
||||
* [**Report
|
||||
issues**](https://zulip.readthedocs.io/en/stable/contributing/contributing.html#reporting-issues),
|
||||
including both feature requests and bug reports. Many improvements to the
|
||||
Zulip app start with a user's suggestion.
|
||||
* **Report issues**, including both [feature
|
||||
requests](https://zulip.readthedocs.io/en/latest/contributing/suggesting-features.html)
|
||||
and [bug
|
||||
reports](https://zulip.readthedocs.io/en/latest/contributing/reporting-bugs.html).
|
||||
Many improvements to the Zulip app start with a user's suggestion.
|
||||
|
||||
* [**Give
|
||||
feedback**](https://zulip.readthedocs.io/en/stable/contributing/contributing.html#user-feedback)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -123,7 +123,7 @@
|
||||
"Alert words allow you to be notified as if you were @-mentioned when certain words or phrases are used in Zulip. Alert words are not case sensitive.": "تتيح لك كلمات التنبيه أن يتم إشعارك كما لو تمت الإشارة إليك @ عند استخدام كلمات أو عبارات معينة في \"زوليب\". كلمات التنبيه ليست حساسة لحالة الأحرف.",
|
||||
"Alerted messages": "",
|
||||
"All": "الجميع",
|
||||
"All direct messages": "",
|
||||
"All direct messages": "كل الرسائل المباشرة",
|
||||
"All messages": "جميع الرسائل",
|
||||
"All messages including muted streams": "جميع الرسائل بما في ذلك الغرف الصامتة",
|
||||
"All streams": "كل التيارات",
|
||||
@@ -201,7 +201,7 @@
|
||||
"Card": "",
|
||||
"Center the view around message ID <z-value></z-value>.": "قم بتوسيط العرض حول الـ ID الخاص بالرسالة<z-value></z-value> .",
|
||||
"Change": "تغيير",
|
||||
"Change avatar": "",
|
||||
"Change avatar": "تغيير الصورة الرمزية",
|
||||
"Change color": "غير اللون",
|
||||
"Change email": "تغيير البريد الالكتروني",
|
||||
"Change group info": "تغيير معلومات المجموعة",
|
||||
@@ -225,7 +225,7 @@
|
||||
"Code playgrounds": "مكان تجربة الشِفرة",
|
||||
"Code playgrounds are interactive in-browser development environments, such as <z-link-repl>replit</z-link-repl>, that are designed to make it convenient to edit and debug code. Zulip <z-link-code-blocks>code blocks</z-link-code-blocks> that are tagged with a programming language will have a button visible on hover that allows users to open the code block on the code playground site.": "",
|
||||
"Collapse compose": "طي التأليف",
|
||||
"Collapse direct messages": "",
|
||||
"Collapse direct messages": "تصغير الرسائل المباشرة",
|
||||
"Collapse message": "طي الرسالة",
|
||||
"Collapse/show selected message": "طي/ إظهار الرسالة المحددة ",
|
||||
"Community": "مجتمع",
|
||||
@@ -280,12 +280,12 @@
|
||||
"Custom profile fields": "حقول الملف الشخصي المخصصة",
|
||||
"Custom time": "وقت مخصص",
|
||||
"Cycle between stream narrows": "حلقة بين تضييقات العرض في الغرفة ",
|
||||
"DIRECT MESSAGES": "",
|
||||
"DIRECT MESSAGES": "الرسائل المباشرة",
|
||||
"DM": "",
|
||||
"DMs, mentions, and alerts": "",
|
||||
"Dark": "",
|
||||
"Dark": "المضلم",
|
||||
"Dark theme": "الوضع المظلم",
|
||||
"Dark theme logo": "",
|
||||
"Dark theme logo": "شعار الوضع المضلم",
|
||||
"Data exports": "تصدير البيانات",
|
||||
"Date muted": "تاريخ الوضع الصامت",
|
||||
"Date updated": "",
|
||||
@@ -347,8 +347,8 @@
|
||||
"Detailed keyboard shortcuts documentation": "توثيق مفصل لاختصارات لوحة المفاتيح",
|
||||
"Detailed message formatting documentation": "توثيق مفصل لتنسيق الرسالة",
|
||||
"Detailed search filters documentation": "",
|
||||
"Direct message": "",
|
||||
"Direct messages": "",
|
||||
"Direct message": "رسالة مباشرة",
|
||||
"Direct messages": "الرسائل المباشرة",
|
||||
"Direct messages and mentions": "",
|
||||
"Direct messages are disabled in this organization.": "",
|
||||
"Direct messages disabled": "",
|
||||
@@ -503,7 +503,7 @@
|
||||
"For example, to configure a code playground for code blocks tagged as Python, you can set:": "",
|
||||
"For more examples and technical details, see the <z-link>help center documentation</z-link> on adding code playgrounds.": "",
|
||||
"For more examples, see the <z-link>help center documentation</z-link> on adding linkifiers.": "",
|
||||
"Forgot it?": "",
|
||||
"Forgot it?": "نسيت؟",
|
||||
"Forked from upstream at {zulip_merge_base}": "متشعب من المنبع في {zulip_merge_base}",
|
||||
"Friday": "الجمعة",
|
||||
"Full name": "الاسم الكامل",
|
||||
@@ -563,7 +563,7 @@
|
||||
"Invalid URL": "عنوان URL غير صالح",
|
||||
"Invalid stream ID": "مُعرف غرفة غير صالح",
|
||||
"Invalid time format: {timestamp}": "تنسيق الوقت غير صالح: {timestamp}",
|
||||
"Invalid user": "",
|
||||
"Invalid user": "مستخدم غير صالح",
|
||||
"Invalid users": "",
|
||||
"Invitation expires after": "تنتهي الدعوة بعد",
|
||||
"Invitations": "الدعوات",
|
||||
@@ -616,7 +616,7 @@
|
||||
"Link:": "رابط:",
|
||||
"Linkifiers": "الروابط",
|
||||
"Linkifiers make it easy to refer to issues or tickets in third party issue trackers, like GitHub, Salesforce, Zendesk, and others. For instance, you can add a linkifier that automatically turns #2468 into a link to the GitHub issue in the Zulip repository with:": "",
|
||||
"Loading…": "",
|
||||
"Loading…": "جار التحميل...",
|
||||
"Local time": "الوقت المحلي",
|
||||
"Log in": "تسجيل الدخول",
|
||||
"Log in to browse more streams": "",
|
||||
@@ -700,8 +700,8 @@
|
||||
"Narrow to all unmuted messages": "تضييق العرض لجميع الرسائل غير المكتومة",
|
||||
"Narrow to current compose box recipient": "تضييق العرض لمستلم مربع التأليف الحالي",
|
||||
"Narrow to direct messages that include <z-value></z-value>.": "",
|
||||
"Narrow to direct messages with <z-value></z-value>.": "",
|
||||
"Narrow to direct messages.": "",
|
||||
"Narrow to direct messages with <z-value></z-value>.": "تضييق العرض إلى الرسائل المباشرة مع <z-value></z-value>.",
|
||||
"Narrow to direct messages.": "ضييق إلى الرسائل المباشرة.",
|
||||
"Narrow to just message ID <z-value></z-value>.": "تضييق العرض لـ ID الرسالة فقط<z-value></z-value>.",
|
||||
"Narrow to messages containing images.": "تضييق العرض على الرسائل التي تحتوي على صور.",
|
||||
"Narrow to messages containing links.": "تضييق العرض للرسائل التي تحتوي على روابط.",
|
||||
@@ -713,7 +713,7 @@
|
||||
"Narrow to messages that mention you.": "تضييق العرض للرسائل التي تشير إليك.",
|
||||
"Narrow to messages with alert words.": "تضييق العرض للرسائل مع كلمات التنبيه.",
|
||||
"Narrow to messages with topic <z-value></z-value>.": "تضييق العرض على رسائل موضوع <z-value></z-value>.",
|
||||
"Narrow to next unread direct message": "",
|
||||
"Narrow to next unread direct message": "ضيق إلى الرسالة المباشرة الغير المقروءة التالية",
|
||||
"Narrow to next unread topic": "تضييق العرض على المواضيع غير المقروءة التالية",
|
||||
"Narrow to starred messages.": "تضييق العرض إلى الرسائل المميزة بنجمة.",
|
||||
"Narrow to stream from topic view": "",
|
||||
@@ -726,7 +726,7 @@
|
||||
"Never ask on this computer": "لا تسأل أبدًا على هذا الكمبيوتر",
|
||||
"Never expires": "لا تنتهي أبدًا",
|
||||
"New": "جديد",
|
||||
"New direct message": "",
|
||||
"New direct message": "رسائلة مباشرة جديدة",
|
||||
"New email": "بريد إلكتروني جديد",
|
||||
"New message": "رسالة جديدة",
|
||||
"New option": "خيار جديد",
|
||||
@@ -738,7 +738,7 @@
|
||||
"New topic": "موضوع جديد",
|
||||
"New user announcements": "إعلانات المستخدم الجديد",
|
||||
"Next message": "الرسالة التالية",
|
||||
"Next unread direct message": "",
|
||||
"Next unread direct message": "الرسالة المباشرة الغير مقروءة التالية",
|
||||
"Next unread topic": "الموضوع غير المقروء التالي",
|
||||
"Next week": "الاسبوع القادم",
|
||||
"No bots match your current filter.": "لا روبوتات تطابق تصفيتك الحالية.",
|
||||
@@ -895,7 +895,7 @@
|
||||
"Rename topic": "",
|
||||
"Rename topic to:": "",
|
||||
"Reply @-mentioning sender": "",
|
||||
"Reply directly to sender": "",
|
||||
"Reply directly to sender": "رد المباشر الي المرسل",
|
||||
"Reply mentioning bot": "الرد بذكر الروبوت",
|
||||
"Reply mentioning user": "الرد بذكر المستخدم",
|
||||
"Reply to message": "الرد على الرسالة",
|
||||
@@ -956,10 +956,10 @@
|
||||
"Send automated notice to old topic": "ارسال ملاحظة تلقائية لموضوع قديم",
|
||||
"Send digest emails when I'm away": "إرسال موجز رسائل البريد الإلكتروني عندما أكون بعيدًا",
|
||||
"Send digest emails when user is away": "إرسال موجز رسائل البريد الإلكتروني عندما يكون المستخدم بعيدًا",
|
||||
"Send direct message": "",
|
||||
"Send direct message": "بعث رسالة مباشرة",
|
||||
"Send email notifications for new logins to my account": "إرسال إشعارات البريد الإلكتروني لعمليات تسجيل الدخول الجديدة إلى حسابي",
|
||||
"Send emails introducing Zulip to new users": "إرسال رسائل البريد الإلكتروني التقديمية الخاصة بـ \"زوليب\" للمستخدمين الجدد",
|
||||
"Send later": "",
|
||||
"Send later": "ارسال لاحقا",
|
||||
"Send me Zulip's low-traffic newsletter (a few emails a year)": "أرسل لي نشرة \"زوليب\" الإخبارية منخفضة الحركة (بضع رسائل بريد إلكتروني في السنة)",
|
||||
"Send message": "أرسل رسالة",
|
||||
"Send mobile notifications even if I'm online": "إرسال إشعارات الجوال حتى وإن كُنت متصلًا.",
|
||||
@@ -1197,7 +1197,7 @@
|
||||
"Version {zulip_version}": "الإصدار {zulip_version}",
|
||||
"Video call provider": "مزود مكالمات الفيديو",
|
||||
"View all streams": "",
|
||||
"View direct messages": "",
|
||||
"View direct messages": "عرض الرسائل المباشرة",
|
||||
"View drafts": "عرض المسودات",
|
||||
"View edit history": "عرض سجل التعديل",
|
||||
"View file": "استعراض الملف",
|
||||
@@ -1257,11 +1257,11 @@
|
||||
"Working…": "يعمل…",
|
||||
"Write": "كتابة",
|
||||
"Yes, please!": "نعم من فضلك!",
|
||||
"Yes, save": "",
|
||||
"Yes, schedule": "",
|
||||
"Yes, save": "نعم , حفظ",
|
||||
"Yes, schedule": "نعم ,جدول",
|
||||
"Yes, send": "نعم أرسل",
|
||||
"Yesterday": "أمس",
|
||||
"You": "",
|
||||
"You": "انت",
|
||||
"You (click to remove) and {other_username} reacted with {emoji_name}": "أنت (انقر للإزالة) و {other_username} تفاعلت مع {emoji_name}",
|
||||
"You (click to remove) reacted with {emoji_name}": "أنت (انقر للإزالة) تفاعلت مع {emoji_name}",
|
||||
"You (click to remove), {comma_separated_usernames} and {last_username} reacted with {emoji_name}": "أنت (انقر للإزالة)، {comma_separated_usernames} و {last_username} تفاعلت مع {emoji_name}",
|
||||
@@ -1301,15 +1301,15 @@
|
||||
"You have muted <z-stream-topic></z-stream-topic>.": "لقد كتمت <z-stream-topic></z-stream-topic>.",
|
||||
"You have no active bots.": "ليس لديك روبوتات نشطة.",
|
||||
"You have no direct messages including {person} yet.": "",
|
||||
"You have no direct messages with these users yet.": "",
|
||||
"You have no direct messages with {person} yet.": "",
|
||||
"You have no direct messages yet!": "",
|
||||
"You have no direct messages with these users yet.": "ليس لديك اي رسائل مباشرة مع هذا الشخص حتي الان.",
|
||||
"You have no direct messages with {person} yet.": "ليس لديك اي رسائل مباشرة مع {person} حتي الان",
|
||||
"You have no direct messages yet!": "ليس لديك اي رسائل مباشرة حتي الان!",
|
||||
"You have no inactive bots.": "ليس لديك روبوتات غير نشطة.",
|
||||
"You have no starred messages.": "",
|
||||
"You have no unread messages!": "ليس لديك رسائل غير مقروءة!",
|
||||
"You have not configured any topics yet.": "",
|
||||
"You have not muted any users yet.": "لم تقم بكتم أي مستخدم حتى الآن.",
|
||||
"You have not sent any direct messages to yourself yet!": "",
|
||||
"You have not sent any direct messages to yourself yet!": "إنك لم ترسل أي رسائل مباشرة إلى نفسك حتى الآن!",
|
||||
"You have not uploaded any files.": "لم تقم برفع أي ملفات.",
|
||||
"You haven't been mentioned yet!": "لم يتم ذكرك بعد!",
|
||||
"You haven't received any messages sent by {person} yet.": "",
|
||||
@@ -1351,11 +1351,11 @@
|
||||
"clear": "مسح",
|
||||
"cookie": "ملف تعريف الارتباط",
|
||||
"deprecated": "ملغي",
|
||||
"direct messages with yourself": "",
|
||||
"direct messages with {recipient}": "",
|
||||
"direct messages with yourself": "رسائل مباشرة مع نفسك",
|
||||
"direct messages with {recipient}": "رسائل مباشرة مع {recipient}",
|
||||
"does not apply to administrators": "",
|
||||
"does not apply to moderators and administrators": "",
|
||||
"group direct messages with {recipient}": "",
|
||||
"group direct messages with {recipient}": "مجموعة الرسائل المباشرة مع {recipient}",
|
||||
"he/him": "هو/ ـه",
|
||||
"in 1 hour": "في ساعة واحدة",
|
||||
"in 20 minutes": "في 20 دقيقة",
|
||||
|
||||
5479
locale/be/LC_MESSAGES/django.po
Normal file
5479
locale/be/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
1390
locale/be/translations.json
Normal file
1390
locale/be/translations.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
5734
locale/bqi/LC_MESSAGES/django.po
Normal file
5734
locale/bqi/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
1390
locale/bqi/translations.json
Normal file
1390
locale/bqi/translations.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-31 15:33+0000\n"
|
||||
"POT-Creation-Date: 2023-07-03 20:21+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -3018,7 +3018,7 @@ msgid ""
|
||||
"invitation. We did send invitations to everyone else!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:59
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:61
|
||||
msgid "Nothing to change"
|
||||
msgstr ""
|
||||
|
||||
@@ -3218,7 +3218,7 @@ msgid "Scheduled message was already sent"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/scheduled_messages.py:166
|
||||
#: zerver/views/scheduled_messages.py:87 zerver/views/scheduled_messages.py:127
|
||||
#: zerver/views/scheduled_messages.py:89 zerver/views/scheduled_messages.py:129
|
||||
msgid "Scheduled delivery time must be in the future."
|
||||
msgstr ""
|
||||
|
||||
@@ -3330,7 +3330,7 @@ msgstr ""
|
||||
|
||||
#: zerver/decorator.py:662 zerver/lib/streams.py:699 zerver/lib/streams.py:725
|
||||
#: zerver/lib/streams.py:727 zerver/lib/streams.py:742
|
||||
#: zerver/lib/user_groups.py:34 zerver/lib/user_groups.py:41
|
||||
#: zerver/lib/user_groups.py:35 zerver/lib/user_groups.py:42
|
||||
#: zerver/lib/users.py:249 zerver/lib/users.py:278 zerver/views/invite.py:60
|
||||
#: zerver/views/realm_emoji.py:31 zerver/views/streams.py:336
|
||||
#: zerver/views/streams.py:630
|
||||
@@ -4256,27 +4256,27 @@ msgstr ""
|
||||
msgid "Unknown animated image format."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:43
|
||||
#: zerver/lib/user_groups.py:44
|
||||
msgid "Invalid user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:55
|
||||
#: zerver/lib/user_groups.py:56
|
||||
msgid "Invalid user group ID: {}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:73
|
||||
#: zerver/lib/user_groups.py:74
|
||||
msgid "'{}' must be a system user group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:77
|
||||
#: zerver/lib/user_groups.py:78
|
||||
msgid "'{}' setting cannot be set to '@role:internet' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:82
|
||||
#: zerver/lib/user_groups.py:83
|
||||
msgid "'{}' setting cannot be set to '@role:owners' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:87
|
||||
#: zerver/lib/user_groups.py:88
|
||||
msgid "'{}' setting cannot be set to '@role:nobody' group."
|
||||
msgstr ""
|
||||
|
||||
@@ -4511,6 +4511,11 @@ msgstr ""
|
||||
msgid "CSRF error: {reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/middleware.py:628
|
||||
#, python-brace-format
|
||||
msgid "Reverse proxy misconfiguration: {proxy_reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/models.py:500
|
||||
msgid "stream events"
|
||||
msgstr ""
|
||||
@@ -4979,7 +4984,7 @@ msgid "Only administrators can override default emoji."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/realm_emoji.py:46 zerver/views/realm_icon.py:27
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:275
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:278
|
||||
#: zerver/views/user_settings.py:352
|
||||
msgid "Uploaded file is larger than the allowed limit of {} MiB"
|
||||
msgstr ""
|
||||
@@ -5025,11 +5030,11 @@ msgstr ""
|
||||
msgid "Invalid playground"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/scheduled_messages.py:64
|
||||
#: zerver/views/scheduled_messages.py:66
|
||||
msgid "Recipient required when updating type of scheduled message."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/scheduled_messages.py:69
|
||||
#: zerver/views/scheduled_messages.py:71
|
||||
msgid "Topic required when updating scheduled message type to stream."
|
||||
msgstr ""
|
||||
|
||||
@@ -5066,8 +5071,8 @@ msgstr ""
|
||||
msgid "Stream already has that name!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:107
|
||||
#: zerver/views/user_groups.py:276
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:108
|
||||
#: zerver/views/user_groups.py:285
|
||||
msgid "Nothing to do. Specify at least one of \"add\" or \"delete\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -5121,7 +5126,7 @@ msgstr ""
|
||||
msgid "Invalid json for submessage"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:182
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:185
|
||||
msgid "<p>You are not authorized to view this file.</p>"
|
||||
msgstr ""
|
||||
|
||||
@@ -5137,56 +5142,63 @@ msgstr ""
|
||||
msgid "User has disabled typing notifications for direct messages"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:180
|
||||
#: zerver/views/upload.py:183
|
||||
msgid "<p>File not found.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:220
|
||||
#: zerver/views/upload.py:223
|
||||
msgid "Invalid token"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:222
|
||||
#: zerver/views/upload.py:225
|
||||
msgid "Invalid filename"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:265
|
||||
#: zerver/views/upload.py:268
|
||||
msgid "You must specify a file to upload"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:267 zerver/views/users.py:424
|
||||
#: zerver/views/upload.py:270 zerver/views/users.py:424
|
||||
#: zerver/views/users.py:526
|
||||
msgid "You may only upload one file at a time"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:73
|
||||
#: zerver/views/user_groups.py:74
|
||||
msgid "No new data supplied"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:148
|
||||
#: zerver/views/user_groups.py:149
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} added you to the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:153
|
||||
#: zerver/views/user_groups.py:154
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} removed you from the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:184
|
||||
#: zerver/views/user_groups.py:185
|
||||
#, python-brace-format
|
||||
msgid "User {user_id} is already a member of this group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:211
|
||||
#: zerver/views/user_groups.py:212
|
||||
msgid "There is no member '{}' in this user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:236
|
||||
#: zerver/views/user_groups.py:237
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is already a subgroup of this group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:257
|
||||
#: zerver/views/user_groups.py:246
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"User group {user_group_id} is already a subgroup of one of the passed "
|
||||
"subgroups."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:266
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is not a subgroup of this group."
|
||||
msgstr ""
|
||||
@@ -5449,18 +5461,18 @@ msgstr ""
|
||||
msgid "Invalid data."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:521
|
||||
#: zproject/backends.py:520
|
||||
msgid "You need to reset your password."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2203
|
||||
#: zproject/backends.py:2202
|
||||
msgid "Missing id_token parameter"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2904
|
||||
#: zproject/backends.py:2903
|
||||
msgid "Invalid OTP"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2907
|
||||
#: zproject/backends.py:2906
|
||||
msgid "Can't use both mobile_flow_otp and desktop_flow_otp together."
|
||||
msgstr ""
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -799,7 +799,7 @@
|
||||
"Only organization owners may deactivate an organization.": "Only organisation owners may deactivate an organisation.",
|
||||
"Only owners can change these settings.": "Only owners can change these settings.",
|
||||
"Only stream members can add users to a private stream": "Only stream members can add users to a private stream",
|
||||
"Only stream members can add users to a private stream.": "",
|
||||
"Only stream members can add users to a private stream.": "Only stream members can add users to a private stream.",
|
||||
"Only subscribers to this stream can edit stream permissions.": "Only subscribers to this stream can edit stream permissions.",
|
||||
"Open": "Open",
|
||||
"Open message menu": "Open message menu",
|
||||
@@ -894,8 +894,8 @@
|
||||
"Removed successfully.": "Removed successfully.",
|
||||
"Rename topic": "Rename topic",
|
||||
"Rename topic to:": "Rename topic to:",
|
||||
"Reply @-mentioning sender": "",
|
||||
"Reply directly to sender": "",
|
||||
"Reply @-mentioning sender": "Reply @-mentioning sender",
|
||||
"Reply directly to sender": "Reply directly to sender",
|
||||
"Reply mentioning bot": "Reply mentioning bot",
|
||||
"Reply mentioning user": "Reply mentioning user",
|
||||
"Reply to message": "Reply to message",
|
||||
@@ -1063,8 +1063,8 @@
|
||||
"This is a <z-link>demo organization</z-link> and will be automatically deleted in {days_remaining} days.": "This is a <z-link>demo organisation</z-link> and will be automatically deleted in {days_remaining} days.",
|
||||
"This is not a <z-link>publicly accessible</z-link> conversation.": "This is not a <z-link>publicly accessible</z-link> conversation.",
|
||||
"This is what a Zulip notification looks like.": "This is what a Zulip notification looks like.",
|
||||
"This message could not be sent at the scheduled time.": "",
|
||||
"This message is no longer scheduled for {deliver_at}.": "",
|
||||
"This message could not be sent at the scheduled time.": "This message could not be sent at the scheduled time.",
|
||||
"This message is no longer scheduled for {deliver_at}.": "This message is no longer scheduled for {deliver_at}.",
|
||||
"This message was hidden because you have muted the sender.": "This message was hidden because you have muted the sender.",
|
||||
"This organization is configured so that administrators and moderators can add custom emoji.": "This organisation is configured so that administrators and moderators can add custom emoji.",
|
||||
"This organization is configured so that administrators and moderators can modify user groups.": "This organisation is configured so that administrators and moderators can modify user groups.",
|
||||
@@ -1279,14 +1279,14 @@
|
||||
"You can also make <z-link>tables</z-link> with this <z-link>Markdown-ish table syntax</z-link>.": "You can also make <z-link>tables</z-link> with this <z-link>Markdown-ish table syntax</z-link>.",
|
||||
"You can combine search filters as needed.": "You can combine search filters as needed.",
|
||||
"You can fully access this community and participate in conversations by creating a Zulip account in this organization.": "You can fully access this community and participate in conversations by creating a Zulip account in this organisation.",
|
||||
"You can no longer save changes to this message.": "",
|
||||
"You can no longer save changes to this message.": "You can no longer save changes to this message.",
|
||||
"You can only view or manage invitations that you sent.": "You can only view or manage invitations that you sent.",
|
||||
"You can reactivate deactivated users from <z-link>organization settings</z-link>.": "You can reactivate deactivated users from <z-link>organisation settings</z-link>.",
|
||||
"You can use email to send messages to Zulip streams.": "You can use email to send messages to Zulip streams.",
|
||||
"You cannot create a stream with no subscribers!": "You cannot create a stream with no subscribers!",
|
||||
"You cannot create a user group with no members!": "You cannot create a user group with no members!",
|
||||
"You cannot send messages to deactivated users.": "You cannot send messages to deactivated users.",
|
||||
"You do not have permission to add other users to streams in this organization.": "",
|
||||
"You do not have permission to add other users to streams in this organization.": "You do not have permission to add other users to streams in this organisation.",
|
||||
"You do not have permission to move some of the messages in this topic. Contact a moderator to move all messages.": "You do not have permission to move some of the messages in this topic. Contact a moderator to move all messages.",
|
||||
"You do not have permission to post in this stream.": "You do not have permission to post in this stream.",
|
||||
"You do not have permission to resolve topics with messages older than {N, plural, one {# day} other {# days}} in this organization.": "You do not have permission to resolve topics with messages older than {N, plural, one {# day} other {# days}} in this organisation.",
|
||||
|
||||
5477
locale/eo/LC_MESSAGES/django.po
Normal file
5477
locale/eo/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
1390
locale/eo/translations.json
Normal file
1390
locale/eo/translations.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -348,7 +348,7 @@
|
||||
"Detailed message formatting documentation": "",
|
||||
"Detailed search filters documentation": "",
|
||||
"Direct message": "",
|
||||
"Direct messages": "",
|
||||
"Direct messages": "پیام خصوصی",
|
||||
"Direct messages and mentions": "",
|
||||
"Direct messages are disabled in this organization.": "",
|
||||
"Direct messages disabled": "",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -662,7 +662,7 @@
|
||||
"Message {recipient_names}": "Message {recipient_names}",
|
||||
"Message {recipient_name} ({recipient_status})": "Message {recipient_name} ({recipient_status})",
|
||||
"Messages in all public streams": "Messages dans tous les canaux publics",
|
||||
"Messages will not be automatically marked as read because this is not a conversation view. <z-link>Change setting</z-link>": "",
|
||||
"Messages will not be automatically marked as read because this is not a conversation view. <z-link>Change setting</z-link>": "Les messages ne seront pas automatiquement marqués comme lus car vous n'êtes pas dans une vue de conversation. <z-link>Modifier paramètre</z-link>",
|
||||
"Messages will not be automatically marked as read. <z-link>Change setting</z-link>": "Les messages ne seront pas automatiquement marqués comme lus. <z-link>Modifier paramètre</z-link>",
|
||||
"Mobile": "Mobile",
|
||||
"Mobile message notifications": "Notifications de messages mobiles",
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-31 15:33+0000\n"
|
||||
"POT-Creation-Date: 2023-07-03 20:21+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -3018,7 +3018,7 @@ msgid ""
|
||||
"invitation. We did send invitations to everyone else!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:59
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:61
|
||||
msgid "Nothing to change"
|
||||
msgstr ""
|
||||
|
||||
@@ -3218,7 +3218,7 @@ msgid "Scheduled message was already sent"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/scheduled_messages.py:166
|
||||
#: zerver/views/scheduled_messages.py:87 zerver/views/scheduled_messages.py:127
|
||||
#: zerver/views/scheduled_messages.py:89 zerver/views/scheduled_messages.py:129
|
||||
msgid "Scheduled delivery time must be in the future."
|
||||
msgstr ""
|
||||
|
||||
@@ -3330,7 +3330,7 @@ msgstr ""
|
||||
|
||||
#: zerver/decorator.py:662 zerver/lib/streams.py:699 zerver/lib/streams.py:725
|
||||
#: zerver/lib/streams.py:727 zerver/lib/streams.py:742
|
||||
#: zerver/lib/user_groups.py:34 zerver/lib/user_groups.py:41
|
||||
#: zerver/lib/user_groups.py:35 zerver/lib/user_groups.py:42
|
||||
#: zerver/lib/users.py:249 zerver/lib/users.py:278 zerver/views/invite.py:60
|
||||
#: zerver/views/realm_emoji.py:31 zerver/views/streams.py:336
|
||||
#: zerver/views/streams.py:630
|
||||
@@ -4256,27 +4256,27 @@ msgstr ""
|
||||
msgid "Unknown animated image format."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:43
|
||||
#: zerver/lib/user_groups.py:44
|
||||
msgid "Invalid user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:55
|
||||
#: zerver/lib/user_groups.py:56
|
||||
msgid "Invalid user group ID: {}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:73
|
||||
#: zerver/lib/user_groups.py:74
|
||||
msgid "'{}' must be a system user group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:77
|
||||
#: zerver/lib/user_groups.py:78
|
||||
msgid "'{}' setting cannot be set to '@role:internet' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:82
|
||||
#: zerver/lib/user_groups.py:83
|
||||
msgid "'{}' setting cannot be set to '@role:owners' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:87
|
||||
#: zerver/lib/user_groups.py:88
|
||||
msgid "'{}' setting cannot be set to '@role:nobody' group."
|
||||
msgstr ""
|
||||
|
||||
@@ -4511,6 +4511,11 @@ msgstr ""
|
||||
msgid "CSRF error: {reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/middleware.py:628
|
||||
#, python-brace-format
|
||||
msgid "Reverse proxy misconfiguration: {proxy_reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/models.py:500
|
||||
msgid "stream events"
|
||||
msgstr ""
|
||||
@@ -4979,7 +4984,7 @@ msgid "Only administrators can override default emoji."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/realm_emoji.py:46 zerver/views/realm_icon.py:27
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:275
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:278
|
||||
#: zerver/views/user_settings.py:352
|
||||
msgid "Uploaded file is larger than the allowed limit of {} MiB"
|
||||
msgstr ""
|
||||
@@ -5025,11 +5030,11 @@ msgstr ""
|
||||
msgid "Invalid playground"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/scheduled_messages.py:64
|
||||
#: zerver/views/scheduled_messages.py:66
|
||||
msgid "Recipient required when updating type of scheduled message."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/scheduled_messages.py:69
|
||||
#: zerver/views/scheduled_messages.py:71
|
||||
msgid "Topic required when updating scheduled message type to stream."
|
||||
msgstr ""
|
||||
|
||||
@@ -5066,8 +5071,8 @@ msgstr ""
|
||||
msgid "Stream already has that name!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:107
|
||||
#: zerver/views/user_groups.py:276
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:108
|
||||
#: zerver/views/user_groups.py:285
|
||||
msgid "Nothing to do. Specify at least one of \"add\" or \"delete\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -5121,7 +5126,7 @@ msgstr ""
|
||||
msgid "Invalid json for submessage"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:182
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:185
|
||||
msgid "<p>You are not authorized to view this file.</p>"
|
||||
msgstr ""
|
||||
|
||||
@@ -5137,56 +5142,63 @@ msgstr ""
|
||||
msgid "User has disabled typing notifications for direct messages"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:180
|
||||
#: zerver/views/upload.py:183
|
||||
msgid "<p>File not found.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:220
|
||||
#: zerver/views/upload.py:223
|
||||
msgid "Invalid token"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:222
|
||||
#: zerver/views/upload.py:225
|
||||
msgid "Invalid filename"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:265
|
||||
#: zerver/views/upload.py:268
|
||||
msgid "You must specify a file to upload"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:267 zerver/views/users.py:424
|
||||
#: zerver/views/upload.py:270 zerver/views/users.py:424
|
||||
#: zerver/views/users.py:526
|
||||
msgid "You may only upload one file at a time"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:73
|
||||
#: zerver/views/user_groups.py:74
|
||||
msgid "No new data supplied"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:148
|
||||
#: zerver/views/user_groups.py:149
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} added you to the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:153
|
||||
#: zerver/views/user_groups.py:154
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} removed you from the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:184
|
||||
#: zerver/views/user_groups.py:185
|
||||
#, python-brace-format
|
||||
msgid "User {user_id} is already a member of this group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:211
|
||||
#: zerver/views/user_groups.py:212
|
||||
msgid "There is no member '{}' in this user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:236
|
||||
#: zerver/views/user_groups.py:237
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is already a subgroup of this group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:257
|
||||
#: zerver/views/user_groups.py:246
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"User group {user_group_id} is already a subgroup of one of the passed "
|
||||
"subgroups."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:266
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is not a subgroup of this group."
|
||||
msgstr ""
|
||||
@@ -5449,18 +5461,18 @@ msgstr ""
|
||||
msgid "Invalid data."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:521
|
||||
#: zproject/backends.py:520
|
||||
msgid "You need to reset your password."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2203
|
||||
#: zproject/backends.py:2202
|
||||
msgid "Missing id_token parameter"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2904
|
||||
#: zproject/backends.py:2903
|
||||
msgid "Invalid OTP"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2907
|
||||
#: zproject/backends.py:2906
|
||||
msgid "Can't use both mobile_flow_otp and desktop_flow_otp together."
|
||||
msgstr ""
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -894,8 +894,8 @@
|
||||
"Removed successfully.": "Rimosso con successo.",
|
||||
"Rename topic": "Rinomina argomento",
|
||||
"Rename topic to:": "Rinomina argomento in:",
|
||||
"Reply @-mentioning sender": "",
|
||||
"Reply directly to sender": "",
|
||||
"Reply @-mentioning sender": "Rispondi @-menzionando il mittente",
|
||||
"Reply directly to sender": "Rispondi direttamente al mittente",
|
||||
"Reply mentioning bot": "Rispondi citando bot",
|
||||
"Reply mentioning user": "Rispondi menzionando l'utente",
|
||||
"Reply to message": "Rispondi al messaggio",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -91,7 +91,7 @@
|
||||
"Add members": "メンバーを追加",
|
||||
"Add member…": "メンバーを追加",
|
||||
"Add new default stream": "新しいデフォルトのストリームを追加",
|
||||
"Add new user group": "",
|
||||
"Add new user group": "新規ユーザーグループを追加",
|
||||
"Add one or more users": "ユーザーを追加",
|
||||
"Add option": "",
|
||||
"Add question": "質問追加",
|
||||
@@ -174,8 +174,8 @@
|
||||
"Author": "著者",
|
||||
"Automated messages and emails": "自動メッセージとメール",
|
||||
"Automatic": "自動",
|
||||
"Automatic (follows system settings)": "",
|
||||
"Automatically mark messages as read": "",
|
||||
"Automatic (follows system settings)": "自動 (システム設定に従い)",
|
||||
"Automatically mark messages as read": "メッセージを自動的に既読にする",
|
||||
"Available on Zulip Cloud Standard. <z-link-upgrade>Upgrade</z-link-upgrade> or <z-link-sponsorship>request sponsorship</z-link-sponsorship> to access.": "",
|
||||
"Avatar changes are disabled in this organization": "",
|
||||
"Avatar from Gravatar": "Gravatarのプロフィール画像",
|
||||
@@ -230,7 +230,7 @@
|
||||
"Collapse/show selected message": "選択したメッセージを折り畳む/表示",
|
||||
"Community": "コミュニティー",
|
||||
"Commuting": "通勤中",
|
||||
"Compact": "",
|
||||
"Compact": "最小",
|
||||
"Complete": "完了",
|
||||
"Complete the <z-link>organization profile</z-link> to brand and explain the purpose of this Zulip organization.": "",
|
||||
"Compose message": "メッセージを作成",
|
||||
@@ -283,7 +283,7 @@
|
||||
"DIRECT MESSAGES": "ダイレクトメッセージ",
|
||||
"DM": "",
|
||||
"DMs, mentions, and alerts": "",
|
||||
"Dark": "",
|
||||
"Dark": "ダーク",
|
||||
"Dark theme": "ダークテーマ",
|
||||
"Dark theme logo": "",
|
||||
"Data exports": "データのエクスポート",
|
||||
@@ -293,7 +293,7 @@
|
||||
"Day of the week to send digests": "ダイジェストを送信する曜日",
|
||||
"Deactivate": "無効",
|
||||
"Deactivate account": "アカウントを無効化",
|
||||
"Deactivate bot": "",
|
||||
"Deactivate bot": "ボットを無効",
|
||||
"Deactivate custom emoji?": "カスタム絵文字を無効にしますか?",
|
||||
"Deactivate organization": "組織を無効にする",
|
||||
"Deactivate user": "",
|
||||
@@ -347,7 +347,7 @@
|
||||
"Detailed keyboard shortcuts documentation": "キーボードショートカットの詳細なドキュメント",
|
||||
"Detailed message formatting documentation": "メッセージの記述方法の詳細ドキュメント",
|
||||
"Detailed search filters documentation": "検索フィルターの詳細なドキュメント",
|
||||
"Direct message": "",
|
||||
"Direct message": "ダイレクトメッセージ",
|
||||
"Direct messages": "ダイレクトメッセージ",
|
||||
"Direct messages and mentions": "ダイレクトメッセージとメンション",
|
||||
"Direct messages are disabled in this organization.": "この組織では、ダイレクトメッセージが無効化されています。",
|
||||
@@ -417,7 +417,7 @@
|
||||
"Emoji theme": "絵文字のテーマ",
|
||||
"Enable message edit history": "メッセージの編集履歴を有効にする",
|
||||
"Enable notifications": "通知を有効",
|
||||
"Enable read receipts": "",
|
||||
"Enable read receipts": "開封確認を有効する",
|
||||
"Enabled": "有効",
|
||||
"End of results from your <z-link>history</z-link>.": "あなたの<z-link>履歴</z-link>からの結果は以上です",
|
||||
"Endpoint URL": "エンドポイント URL",
|
||||
@@ -440,7 +440,7 @@
|
||||
"Error saving edit": "編集内容の保存に失敗しました",
|
||||
"Error: Cannot deactivate the only organization owner.": "Error:組織の所有者は最低1名存在している必要があります。",
|
||||
"Error: Cannot deactivate the only user. You can deactivate the whole organization though in your <z-link>organization profile settings</z-link>.": "",
|
||||
"Escape key navigates to default view": "",
|
||||
"Escape key navigates to default view": "Escキーでデフォルト表示に移動する ",
|
||||
"Estimated messages per week": "推定週間メッセージ数",
|
||||
"Event or conference": "イベント・会議",
|
||||
"Everyone": "全員",
|
||||
@@ -551,7 +551,7 @@
|
||||
"Inactive": "非アクティブ",
|
||||
"Inactive bots": "非アクティブなボット",
|
||||
"Include DMs": "ダイレクトメッセージを含める",
|
||||
"Include content of direct messages in desktop notifications": "",
|
||||
"Include content of direct messages in desktop notifications": "DM内容をデスクトップ通知に含む ",
|
||||
"Include message content in message notification emails": "通知メールにメッセージ内容を含める",
|
||||
"Include muted": "ミュート済みのメッセージを含める",
|
||||
"Include organization name in subject of message notification emails": "新規メッセージ受信を知らせる通知メールのタイトルに組織名を含める",
|
||||
@@ -608,7 +608,7 @@
|
||||
"Let others see when I've read messages": "",
|
||||
"Let recipients see when I'm typing direct messages": "",
|
||||
"Let subscribers see when I'm typing messages in streams": "入力中であることを、ストリームのフォロワーに表示する",
|
||||
"Light": "",
|
||||
"Light": "ライト",
|
||||
"Light theme": "ライトモード",
|
||||
"Light theme logo": "",
|
||||
"Link": "リンク",
|
||||
@@ -781,7 +781,7 @@
|
||||
"Notifications": "通知",
|
||||
"Notifications for @all/@everyone mentions": "@allと@everyoneの通知",
|
||||
"Notify recipients": "",
|
||||
"Notify stream": "",
|
||||
"Notify stream": "ストリームを通知する",
|
||||
"Notify this user by email?": "",
|
||||
"November": "11月",
|
||||
"October": "10月",
|
||||
@@ -884,7 +884,7 @@
|
||||
"Reactivate this bot": "このボットを再有効化",
|
||||
"Reactivate this user": "",
|
||||
"Reactivate {name}": "",
|
||||
"Read receipts": "",
|
||||
"Read receipts": "開封確認",
|
||||
"Read receipts are currently disabled in this organization.": "この組織では現在、既読表示が無効化されています。",
|
||||
"Read receipts are not available for Notification Bot messages.": "",
|
||||
"Receives new stream announcements": "",
|
||||
@@ -962,8 +962,8 @@
|
||||
"Send later": "",
|
||||
"Send me Zulip's low-traffic newsletter (a few emails a year)": "Zulip のニュースレターを受け取る(年に数回)",
|
||||
"Send message": "メッセージを送信",
|
||||
"Send mobile notifications even if I'm online": "",
|
||||
"Send mobile notifications even if user is online": "",
|
||||
"Send mobile notifications even if I'm online": "オンライン時でもモバイル通知を送信する",
|
||||
"Send mobile notifications even if user is online": "オンライン時でもモバイル通知を送信する",
|
||||
"Send weekly digest emails to inactive users": "活動していないユーザーに毎週ダイジェストのメールを送信する",
|
||||
"Sent!": "送信しました!",
|
||||
"Sent! Your message is outside your current narrow.": "送信しました。送信したメッセージは、現在の画面では表示されません。",
|
||||
@@ -1080,7 +1080,7 @@
|
||||
"This organization is configured so that nobody can invite users to this organization.": "",
|
||||
"This organization is configured so that only administrators can add bots.": "",
|
||||
"This organization is configured so that only administrators can add custom emoji.": "",
|
||||
"This organization is configured so that only administrators can add generic bots.": "",
|
||||
"This organization is configured so that only administrators can add generic bots.": "この組織は管理者のみが汎用ボットを追加できるように設定しています。",
|
||||
"This organization is configured so that only administrators can modify user groups.": "",
|
||||
"This organization is configured to restrict editing of message content to {minutes_to_edit} minutes after it is sent.": "この組織は、送信後{minutes_to_edit}分間メッセージの編集ができないように設定されています。",
|
||||
"This stream does not exist or is private.": "このストリームは存在しないか、非公開です。",
|
||||
@@ -1141,7 +1141,7 @@
|
||||
"Unmuted": "",
|
||||
"Unpin stream from top": "ストリームの固定を解除する",
|
||||
"Unread": "未読",
|
||||
"Unread count badge (appears in desktop sidebar and browser tab)": "",
|
||||
"Unread count badge (appears in desktop sidebar and browser tab)": "未読件数バッジ (デスクトップサイドバーとブラウザータブに表示)",
|
||||
"Unread messages": "",
|
||||
"Unresolve topic": "トピックを未解決にする",
|
||||
"Unstar": "スターを外す",
|
||||
@@ -1192,7 +1192,7 @@
|
||||
"User(s) invited successfully.": "ユーザーを招待しました。",
|
||||
"User(s) join as": "ユーザー(たち) の権限",
|
||||
"Users": "ユーザー",
|
||||
"Users can always disable their personal read receipts.": "",
|
||||
"Users can always disable their personal read receipts.": "ユーザーが自分の開封確認をいつでも無効にできます。",
|
||||
"Vacationing": "休暇中",
|
||||
"Version {zulip_version}": "バージョン {zulip_version}",
|
||||
"Video call provider": "ビデオ通話サービス",
|
||||
@@ -1208,7 +1208,7 @@
|
||||
"View messages sent": "送信済みメッセージを表示",
|
||||
"View messages with yourself": "",
|
||||
"View profile": "プロフィールを見る",
|
||||
"View read receipts": "",
|
||||
"View read receipts": "開封を確認",
|
||||
"View recent conversations": "",
|
||||
"View scheduled messages": "",
|
||||
"View stream": "ストリームを表示",
|
||||
@@ -1343,7 +1343,7 @@
|
||||
"[Configure]": "[設定]",
|
||||
"[Disable]": "[無効]",
|
||||
"[More…]": "[さらに表示]",
|
||||
"[Quoting…]": "",
|
||||
"[Quoting…]": "[引用中...]",
|
||||
"[Unset]": "[未設定]",
|
||||
"and {remaining_senders, plural, one {1 other} other {# others}}.": "",
|
||||
"back to streams": "",
|
||||
@@ -1385,6 +1385,6 @@
|
||||
"{num_of_people, plural, one {This message has been <z-link>read</z-link> by {num_of_people} person:} other {This message has been <z-link>read</z-link> by {num_of_people} people:}}": "{num_of_people, plural, other {{num_of_people} 人がこのメッセージを<z-link>読みました</z-link>:}}",
|
||||
"{seconds} sec to edit": "{seconds}秒前",
|
||||
"{user_time} local time": "",
|
||||
"{username} [said]({link_to_message}):": "",
|
||||
"{username} [said]({link_to_message}):": "{username} [said]({link_to_message}):",
|
||||
"{username} reacted with {emoji_name}": "{username} が {emoji_name} で反応しました"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
5478
locale/lv/LC_MESSAGES/django.po
Normal file
5478
locale/lv/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
1390
locale/lv/translations.json
Normal file
1390
locale/lv/translations.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Zulip\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-31 15:33+0000\n"
|
||||
"POT-Creation-Date: 2023-07-03 20:21+0000\n"
|
||||
"PO-Revision-Date: 2021-05-27 07:08+0000\n"
|
||||
"Last-Translator: Akash Nimare <svnitakash@gmail.com>\n"
|
||||
"Language-Team: Malayalam (http://www.transifex.com/zulip/zulip/language/"
|
||||
@@ -3099,7 +3099,7 @@ msgid ""
|
||||
"invitation. We did send invitations to everyone else!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:59
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:61
|
||||
msgid "Nothing to change"
|
||||
msgstr ""
|
||||
|
||||
@@ -3307,7 +3307,7 @@ msgid "Scheduled message was already sent"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/scheduled_messages.py:166
|
||||
#: zerver/views/scheduled_messages.py:87 zerver/views/scheduled_messages.py:127
|
||||
#: zerver/views/scheduled_messages.py:89 zerver/views/scheduled_messages.py:129
|
||||
msgid "Scheduled delivery time must be in the future."
|
||||
msgstr ""
|
||||
|
||||
@@ -3419,7 +3419,7 @@ msgstr ""
|
||||
|
||||
#: zerver/decorator.py:662 zerver/lib/streams.py:699 zerver/lib/streams.py:725
|
||||
#: zerver/lib/streams.py:727 zerver/lib/streams.py:742
|
||||
#: zerver/lib/user_groups.py:34 zerver/lib/user_groups.py:41
|
||||
#: zerver/lib/user_groups.py:35 zerver/lib/user_groups.py:42
|
||||
#: zerver/lib/users.py:249 zerver/lib/users.py:278 zerver/views/invite.py:60
|
||||
#: zerver/views/realm_emoji.py:31 zerver/views/streams.py:336
|
||||
#: zerver/views/streams.py:630
|
||||
@@ -4347,27 +4347,27 @@ msgstr ""
|
||||
msgid "Unknown animated image format."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:43
|
||||
#: zerver/lib/user_groups.py:44
|
||||
msgid "Invalid user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:55
|
||||
#: zerver/lib/user_groups.py:56
|
||||
msgid "Invalid user group ID: {}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:73
|
||||
#: zerver/lib/user_groups.py:74
|
||||
msgid "'{}' must be a system user group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:77
|
||||
#: zerver/lib/user_groups.py:78
|
||||
msgid "'{}' setting cannot be set to '@role:internet' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:82
|
||||
#: zerver/lib/user_groups.py:83
|
||||
msgid "'{}' setting cannot be set to '@role:owners' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:87
|
||||
#: zerver/lib/user_groups.py:88
|
||||
msgid "'{}' setting cannot be set to '@role:nobody' group."
|
||||
msgstr ""
|
||||
|
||||
@@ -4602,6 +4602,11 @@ msgstr ""
|
||||
msgid "CSRF error: {reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/middleware.py:628
|
||||
#, python-brace-format
|
||||
msgid "Reverse proxy misconfiguration: {proxy_reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/models.py:500
|
||||
msgid "stream events"
|
||||
msgstr ""
|
||||
@@ -5082,7 +5087,7 @@ msgid "Only administrators can override default emoji."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/realm_emoji.py:46 zerver/views/realm_icon.py:27
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:275
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:278
|
||||
#: zerver/views/user_settings.py:352
|
||||
msgid "Uploaded file is larger than the allowed limit of {} MiB"
|
||||
msgstr ""
|
||||
@@ -5128,11 +5133,11 @@ msgstr ""
|
||||
msgid "Invalid playground"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/scheduled_messages.py:64
|
||||
#: zerver/views/scheduled_messages.py:66
|
||||
msgid "Recipient required when updating type of scheduled message."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/scheduled_messages.py:69
|
||||
#: zerver/views/scheduled_messages.py:71
|
||||
msgid "Topic required when updating scheduled message type to stream."
|
||||
msgstr ""
|
||||
|
||||
@@ -5169,8 +5174,8 @@ msgstr ""
|
||||
msgid "Stream already has that name!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:107
|
||||
#: zerver/views/user_groups.py:276
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:108
|
||||
#: zerver/views/user_groups.py:285
|
||||
msgid "Nothing to do. Specify at least one of \"add\" or \"delete\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -5224,7 +5229,7 @@ msgstr ""
|
||||
msgid "Invalid json for submessage"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:182
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:185
|
||||
msgid "<p>You are not authorized to view this file.</p>"
|
||||
msgstr ""
|
||||
|
||||
@@ -5240,56 +5245,63 @@ msgstr ""
|
||||
msgid "User has disabled typing notifications for direct messages"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:180
|
||||
#: zerver/views/upload.py:183
|
||||
msgid "<p>File not found.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:220
|
||||
#: zerver/views/upload.py:223
|
||||
msgid "Invalid token"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:222
|
||||
#: zerver/views/upload.py:225
|
||||
msgid "Invalid filename"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:265
|
||||
#: zerver/views/upload.py:268
|
||||
msgid "You must specify a file to upload"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:267 zerver/views/users.py:424
|
||||
#: zerver/views/upload.py:270 zerver/views/users.py:424
|
||||
#: zerver/views/users.py:526
|
||||
msgid "You may only upload one file at a time"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:73
|
||||
#: zerver/views/user_groups.py:74
|
||||
msgid "No new data supplied"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:148
|
||||
#: zerver/views/user_groups.py:149
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} added you to the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:153
|
||||
#: zerver/views/user_groups.py:154
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} removed you from the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:184
|
||||
#: zerver/views/user_groups.py:185
|
||||
#, python-brace-format
|
||||
msgid "User {user_id} is already a member of this group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:211
|
||||
#: zerver/views/user_groups.py:212
|
||||
msgid "There is no member '{}' in this user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:236
|
||||
#: zerver/views/user_groups.py:237
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is already a subgroup of this group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:257
|
||||
#: zerver/views/user_groups.py:246
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"User group {user_group_id} is already a subgroup of one of the passed "
|
||||
"subgroups."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:266
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is not a subgroup of this group."
|
||||
msgstr ""
|
||||
@@ -5552,19 +5564,19 @@ msgstr ""
|
||||
msgid "Invalid data."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:521
|
||||
#: zproject/backends.py:520
|
||||
msgid "You need to reset your password."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2203
|
||||
#: zproject/backends.py:2202
|
||||
msgid "Missing id_token parameter"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2904
|
||||
#: zproject/backends.py:2903
|
||||
msgid "Invalid OTP"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2907
|
||||
#: zproject/backends.py:2906
|
||||
msgid "Can't use both mobile_flow_otp and desktop_flow_otp together."
|
||||
msgstr ""
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,16 @@
|
||||
{
|
||||
"ar": {
|
||||
"not_translated": 120,
|
||||
"not_translated": 102,
|
||||
"total": 388
|
||||
},
|
||||
"bg": {
|
||||
"not_translated": 283,
|
||||
"total": 388
|
||||
},
|
||||
"bqi": {
|
||||
"not_translated": 321,
|
||||
"total": 388
|
||||
},
|
||||
"ca": {
|
||||
"not_translated": 174,
|
||||
"total": 388
|
||||
@@ -36,7 +40,7 @@
|
||||
"total": 388
|
||||
},
|
||||
"fa": {
|
||||
"not_translated": 239,
|
||||
"not_translated": 238,
|
||||
"total": 388
|
||||
},
|
||||
"fi": {
|
||||
@@ -120,13 +124,17 @@
|
||||
"total": 388
|
||||
},
|
||||
"sv": {
|
||||
"not_translated": 334,
|
||||
"not_translated": 333,
|
||||
"total": 388
|
||||
},
|
||||
"ta": {
|
||||
"not_translated": 326,
|
||||
"total": 388
|
||||
},
|
||||
"tl": {
|
||||
"not_translated": 365,
|
||||
"total": 388
|
||||
},
|
||||
"tr": {
|
||||
"not_translated": 88,
|
||||
"total": 388
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-31 15:33+0000\n"
|
||||
"POT-Creation-Date: 2023-07-03 20:21+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -3017,7 +3017,7 @@ msgid ""
|
||||
"invitation. We did send invitations to everyone else!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:59
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:61
|
||||
msgid "Nothing to change"
|
||||
msgstr ""
|
||||
|
||||
@@ -3217,7 +3217,7 @@ msgid "Scheduled message was already sent"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/scheduled_messages.py:166
|
||||
#: zerver/views/scheduled_messages.py:87 zerver/views/scheduled_messages.py:127
|
||||
#: zerver/views/scheduled_messages.py:89 zerver/views/scheduled_messages.py:129
|
||||
msgid "Scheduled delivery time must be in the future."
|
||||
msgstr ""
|
||||
|
||||
@@ -3329,7 +3329,7 @@ msgstr ""
|
||||
|
||||
#: zerver/decorator.py:662 zerver/lib/streams.py:699 zerver/lib/streams.py:725
|
||||
#: zerver/lib/streams.py:727 zerver/lib/streams.py:742
|
||||
#: zerver/lib/user_groups.py:34 zerver/lib/user_groups.py:41
|
||||
#: zerver/lib/user_groups.py:35 zerver/lib/user_groups.py:42
|
||||
#: zerver/lib/users.py:249 zerver/lib/users.py:278 zerver/views/invite.py:60
|
||||
#: zerver/views/realm_emoji.py:31 zerver/views/streams.py:336
|
||||
#: zerver/views/streams.py:630
|
||||
@@ -4255,27 +4255,27 @@ msgstr ""
|
||||
msgid "Unknown animated image format."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:43
|
||||
#: zerver/lib/user_groups.py:44
|
||||
msgid "Invalid user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:55
|
||||
#: zerver/lib/user_groups.py:56
|
||||
msgid "Invalid user group ID: {}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:73
|
||||
#: zerver/lib/user_groups.py:74
|
||||
msgid "'{}' must be a system user group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:77
|
||||
#: zerver/lib/user_groups.py:78
|
||||
msgid "'{}' setting cannot be set to '@role:internet' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:82
|
||||
#: zerver/lib/user_groups.py:83
|
||||
msgid "'{}' setting cannot be set to '@role:owners' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:87
|
||||
#: zerver/lib/user_groups.py:88
|
||||
msgid "'{}' setting cannot be set to '@role:nobody' group."
|
||||
msgstr ""
|
||||
|
||||
@@ -4510,6 +4510,11 @@ msgstr ""
|
||||
msgid "CSRF error: {reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/middleware.py:628
|
||||
#, python-brace-format
|
||||
msgid "Reverse proxy misconfiguration: {proxy_reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/models.py:500
|
||||
msgid "stream events"
|
||||
msgstr ""
|
||||
@@ -4978,7 +4983,7 @@ msgid "Only administrators can override default emoji."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/realm_emoji.py:46 zerver/views/realm_icon.py:27
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:275
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:278
|
||||
#: zerver/views/user_settings.py:352
|
||||
msgid "Uploaded file is larger than the allowed limit of {} MiB"
|
||||
msgstr ""
|
||||
@@ -5024,11 +5029,11 @@ msgstr ""
|
||||
msgid "Invalid playground"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/scheduled_messages.py:64
|
||||
#: zerver/views/scheduled_messages.py:66
|
||||
msgid "Recipient required when updating type of scheduled message."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/scheduled_messages.py:69
|
||||
#: zerver/views/scheduled_messages.py:71
|
||||
msgid "Topic required when updating scheduled message type to stream."
|
||||
msgstr ""
|
||||
|
||||
@@ -5065,8 +5070,8 @@ msgstr ""
|
||||
msgid "Stream already has that name!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:107
|
||||
#: zerver/views/user_groups.py:276
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:108
|
||||
#: zerver/views/user_groups.py:285
|
||||
msgid "Nothing to do. Specify at least one of \"add\" or \"delete\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -5120,7 +5125,7 @@ msgstr ""
|
||||
msgid "Invalid json for submessage"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:182
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:185
|
||||
msgid "<p>You are not authorized to view this file.</p>"
|
||||
msgstr ""
|
||||
|
||||
@@ -5136,56 +5141,63 @@ msgstr ""
|
||||
msgid "User has disabled typing notifications for direct messages"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:180
|
||||
#: zerver/views/upload.py:183
|
||||
msgid "<p>File not found.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:220
|
||||
#: zerver/views/upload.py:223
|
||||
msgid "Invalid token"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:222
|
||||
#: zerver/views/upload.py:225
|
||||
msgid "Invalid filename"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:265
|
||||
#: zerver/views/upload.py:268
|
||||
msgid "You must specify a file to upload"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:267 zerver/views/users.py:424
|
||||
#: zerver/views/upload.py:270 zerver/views/users.py:424
|
||||
#: zerver/views/users.py:526
|
||||
msgid "You may only upload one file at a time"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:73
|
||||
#: zerver/views/user_groups.py:74
|
||||
msgid "No new data supplied"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:148
|
||||
#: zerver/views/user_groups.py:149
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} added you to the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:153
|
||||
#: zerver/views/user_groups.py:154
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} removed you from the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:184
|
||||
#: zerver/views/user_groups.py:185
|
||||
#, python-brace-format
|
||||
msgid "User {user_id} is already a member of this group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:211
|
||||
#: zerver/views/user_groups.py:212
|
||||
msgid "There is no member '{}' in this user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:236
|
||||
#: zerver/views/user_groups.py:237
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is already a subgroup of this group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:257
|
||||
#: zerver/views/user_groups.py:246
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"User group {user_group_id} is already a subgroup of one of the passed "
|
||||
"subgroups."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:266
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is not a subgroup of this group."
|
||||
msgstr ""
|
||||
@@ -5448,18 +5460,18 @@ msgstr ""
|
||||
msgid "Invalid data."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:521
|
||||
#: zproject/backends.py:520
|
||||
msgid "You need to reset your password."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2203
|
||||
#: zproject/backends.py:2202
|
||||
msgid "Missing id_token parameter"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2904
|
||||
#: zproject/backends.py:2903
|
||||
msgid "Invalid OTP"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2907
|
||||
#: zproject/backends.py:2906
|
||||
msgid "Can't use both mobile_flow_otp and desktop_flow_otp together."
|
||||
msgstr ""
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -348,7 +348,7 @@
|
||||
"Detailed message formatting documentation": "",
|
||||
"Detailed search filters documentation": "",
|
||||
"Direct message": "",
|
||||
"Direct messages": "",
|
||||
"Direct messages": "Direktmeddelanden",
|
||||
"Direct messages and mentions": "",
|
||||
"Direct messages are disabled in this organization.": "",
|
||||
"Direct messages disabled": "",
|
||||
|
||||
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Zulip\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-05-31 15:33+0000\n"
|
||||
"POT-Creation-Date: 2023-07-03 20:21+0000\n"
|
||||
"PO-Revision-Date: 2018-04-11 21:06+0000\n"
|
||||
"Last-Translator: Tim Abbott <tabbott@kandralabs.com>\n"
|
||||
"Language-Team: Tamil (http://www.transifex.com/zulip/zulip/language/ta/)\n"
|
||||
@@ -3101,7 +3101,7 @@ msgid ""
|
||||
"invitation. We did send invitations to everyone else!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:59
|
||||
#: zerver/actions/message_edit.py:92 zerver/views/scheduled_messages.py:61
|
||||
msgid "Nothing to change"
|
||||
msgstr ""
|
||||
|
||||
@@ -3313,7 +3313,7 @@ msgid "Scheduled message was already sent"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/actions/scheduled_messages.py:166
|
||||
#: zerver/views/scheduled_messages.py:87 zerver/views/scheduled_messages.py:127
|
||||
#: zerver/views/scheduled_messages.py:89 zerver/views/scheduled_messages.py:129
|
||||
msgid "Scheduled delivery time must be in the future."
|
||||
msgstr ""
|
||||
|
||||
@@ -3425,7 +3425,7 @@ msgstr ""
|
||||
|
||||
#: zerver/decorator.py:662 zerver/lib/streams.py:699 zerver/lib/streams.py:725
|
||||
#: zerver/lib/streams.py:727 zerver/lib/streams.py:742
|
||||
#: zerver/lib/user_groups.py:34 zerver/lib/user_groups.py:41
|
||||
#: zerver/lib/user_groups.py:35 zerver/lib/user_groups.py:42
|
||||
#: zerver/lib/users.py:249 zerver/lib/users.py:278 zerver/views/invite.py:60
|
||||
#: zerver/views/realm_emoji.py:31 zerver/views/streams.py:336
|
||||
#: zerver/views/streams.py:630
|
||||
@@ -4379,29 +4379,29 @@ msgstr ""
|
||||
msgid "Unknown animated image format."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:43
|
||||
#: zerver/lib/user_groups.py:44
|
||||
msgid "Invalid user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:55
|
||||
#: zerver/lib/user_groups.py:56
|
||||
#, fuzzy
|
||||
#| msgid "Enable notifications"
|
||||
msgid "Invalid user group ID: {}"
|
||||
msgstr "அறிவிப்புகளை இயக்கு"
|
||||
|
||||
#: zerver/lib/user_groups.py:73
|
||||
#: zerver/lib/user_groups.py:74
|
||||
msgid "'{}' must be a system user group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:77
|
||||
#: zerver/lib/user_groups.py:78
|
||||
msgid "'{}' setting cannot be set to '@role:internet' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:82
|
||||
#: zerver/lib/user_groups.py:83
|
||||
msgid "'{}' setting cannot be set to '@role:owners' group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/lib/user_groups.py:87
|
||||
#: zerver/lib/user_groups.py:88
|
||||
msgid "'{}' setting cannot be set to '@role:nobody' group."
|
||||
msgstr ""
|
||||
|
||||
@@ -4643,6 +4643,11 @@ msgstr ""
|
||||
msgid "CSRF error: {reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/middleware.py:628
|
||||
#, python-brace-format
|
||||
msgid "Reverse proxy misconfiguration: {proxy_reason}"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/models.py:500
|
||||
#, fuzzy
|
||||
#| msgid "Username"
|
||||
@@ -5147,7 +5152,7 @@ msgid "Only administrators can override default emoji."
|
||||
msgstr "நிர்வாகிகள்"
|
||||
|
||||
#: zerver/views/realm_emoji.py:46 zerver/views/realm_icon.py:27
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:275
|
||||
#: zerver/views/realm_logo.py:33 zerver/views/upload.py:278
|
||||
#: zerver/views/user_settings.py:352
|
||||
msgid "Uploaded file is larger than the allowed limit of {} MiB"
|
||||
msgstr ""
|
||||
@@ -5195,11 +5200,11 @@ msgstr ""
|
||||
msgid "Invalid playground"
|
||||
msgstr "அறிவிப்புகளை இயக்கு"
|
||||
|
||||
#: zerver/views/scheduled_messages.py:64
|
||||
#: zerver/views/scheduled_messages.py:66
|
||||
msgid "Recipient required when updating type of scheduled message."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/scheduled_messages.py:69
|
||||
#: zerver/views/scheduled_messages.py:71
|
||||
msgid "Topic required when updating scheduled message type to stream."
|
||||
msgstr ""
|
||||
|
||||
@@ -5240,8 +5245,8 @@ msgstr ""
|
||||
msgid "Stream already has that name!"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:107
|
||||
#: zerver/views/user_groups.py:276
|
||||
#: zerver/views/streams.py:452 zerver/views/user_groups.py:108
|
||||
#: zerver/views/user_groups.py:285
|
||||
msgid "Nothing to do. Specify at least one of \"add\" or \"delete\"."
|
||||
msgstr ""
|
||||
|
||||
@@ -5297,7 +5302,7 @@ msgstr ""
|
||||
msgid "Invalid json for submessage"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:182
|
||||
#: zerver/views/thumbnail.py:43 zerver/views/upload.py:185
|
||||
msgid "<p>You are not authorized to view this file.</p>"
|
||||
msgstr ""
|
||||
|
||||
@@ -5313,56 +5318,63 @@ msgstr ""
|
||||
msgid "User has disabled typing notifications for direct messages"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:180
|
||||
#: zerver/views/upload.py:183
|
||||
msgid "<p>File not found.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:220
|
||||
#: zerver/views/upload.py:223
|
||||
msgid "Invalid token"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:222
|
||||
#: zerver/views/upload.py:225
|
||||
msgid "Invalid filename"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:265
|
||||
#: zerver/views/upload.py:268
|
||||
msgid "You must specify a file to upload"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/upload.py:267 zerver/views/users.py:424
|
||||
#: zerver/views/upload.py:270 zerver/views/users.py:424
|
||||
#: zerver/views/users.py:526
|
||||
msgid "You may only upload one file at a time"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:73
|
||||
#: zerver/views/user_groups.py:74
|
||||
msgid "No new data supplied"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:148
|
||||
#: zerver/views/user_groups.py:149
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} added you to the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:153
|
||||
#: zerver/views/user_groups.py:154
|
||||
#, python-brace-format
|
||||
msgid "{user_full_name} removed you from the group {group_name}."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:184
|
||||
#: zerver/views/user_groups.py:185
|
||||
#, python-brace-format
|
||||
msgid "User {user_id} is already a member of this group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:211
|
||||
#: zerver/views/user_groups.py:212
|
||||
msgid "There is no member '{}' in this user group"
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:236
|
||||
#: zerver/views/user_groups.py:237
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is already a subgroup of this group."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:257
|
||||
#: zerver/views/user_groups.py:246
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"User group {user_group_id} is already a subgroup of one of the passed "
|
||||
"subgroups."
|
||||
msgstr ""
|
||||
|
||||
#: zerver/views/user_groups.py:266
|
||||
#, python-brace-format
|
||||
msgid "User group {group_id} is not a subgroup of this group."
|
||||
msgstr ""
|
||||
@@ -5633,19 +5645,19 @@ msgstr ""
|
||||
msgid "Invalid data."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:521
|
||||
#: zproject/backends.py:520
|
||||
msgid "You need to reset your password."
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2203
|
||||
#: zproject/backends.py:2202
|
||||
msgid "Missing id_token parameter"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2904
|
||||
#: zproject/backends.py:2903
|
||||
msgid "Invalid OTP"
|
||||
msgstr ""
|
||||
|
||||
#: zproject/backends.py:2907
|
||||
#: zproject/backends.py:2906
|
||||
msgid "Can't use both mobile_flow_otp and desktop_flow_otp together."
|
||||
msgstr ""
|
||||
|
||||
|
||||
5741
locale/tl/LC_MESSAGES/django.po
Normal file
5741
locale/tl/LC_MESSAGES/django.po
Normal file
File diff suppressed because it is too large
Load Diff
1390
locale/tl/translations.json
Normal file
1390
locale/tl/translations.json
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1382,7 +1382,7 @@
|
||||
"{minutes} min to edit": "Düzenlemek için {minutes} dakika",
|
||||
"{minutes} minutes ago": "{minutes} dakika önce",
|
||||
"{modal_heading_text}": "",
|
||||
"{num_of_people, plural, one {This message has been <z-link>read</z-link> by {num_of_people} person:} other {This message has been <z-link>read</z-link> by {num_of_people} people:}}": "{num_of_people, plural, one {} other {}}",
|
||||
"{num_of_people, plural, one {This message has been <z-link>read</z-link> by {num_of_people} person:} other {This message has been <z-link>read</z-link> by {num_of_people} people:}}": "{num_of_people, plural, one {Bu mesaj {num_of_people} kişi tarafından <z-link>okunmuştur</z-link> :} other {Bu mesaj {num_of_people} kişi tarafından <z-link>okunmuştur</z-link>:}}",
|
||||
"{seconds} sec to edit": "Düzenlemek için {seconds} saniye",
|
||||
"{user_time} local time": "",
|
||||
"{username} [said]({link_to_message}):": "{username} [dedi]({link_to_message}):",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1382,7 +1382,7 @@
|
||||
"{minutes} min to edit": "{minutes} tối thiểu để chỉnh sửa",
|
||||
"{minutes} minutes ago": "{minutes} một vài phút trước",
|
||||
"{modal_heading_text}": "",
|
||||
"{num_of_people, plural, one {This message has been <z-link>read</z-link> by {num_of_people} person:} other {This message has been <z-link>read</z-link> by {num_of_people} people:}}": "{num_of_people, plural, other {}}",
|
||||
"{num_of_people, plural, one {This message has been <z-link>read</z-link> by {num_of_people} person:} other {This message has been <z-link>read</z-link> by {num_of_people} people:}}": "{num_of_people, plural, other {Tin nhắn này đã được<z-link> đọc</z-link> bởi {num_of_people} người:}}",
|
||||
"{seconds} sec to edit": "{seconds} giây để chỉnh sửa",
|
||||
"{user_time} local time": "",
|
||||
"{username} [said]({link_to_message}):": "",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -650,7 +650,7 @@
|
||||
"Menus": "選單",
|
||||
"Message #{stream_name}": "",
|
||||
"Message #{stream_name} > {topic_name}": "",
|
||||
"Message actions": "",
|
||||
"Message actions": "訊息動作",
|
||||
"Message deletion": "",
|
||||
"Message edit history": "訊息編輯歷史",
|
||||
"Message editing": "訊息編輯",
|
||||
|
||||
@@ -16,5 +16,6 @@ uwsgi_param SERVER_NAME $server_name;
|
||||
uwsgi_param HTTP_X_REAL_IP $remote_addr;
|
||||
uwsgi_param HTTP_X_FORWARDED_PROTO $trusted_x_forwarded_proto;
|
||||
uwsgi_param HTTP_X_FORWARDED_SSL "";
|
||||
uwsgi_param HTTP_X_PROXY_MISCONFIGURATION $x_proxy_misconfiguration;
|
||||
|
||||
uwsgi_pass django;
|
||||
|
||||
@@ -6,5 +6,6 @@ proxy_set_header Host $host;
|
||||
proxy_set_header X-Forwarded-Proto $trusted_x_forwarded_proto;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Real-Ip $remote_addr;
|
||||
proxy_set_header X-Proxy-Misconfiguration $x_proxy_misconfiguration;
|
||||
proxy_next_upstream off;
|
||||
proxy_redirect off;
|
||||
|
||||
@@ -23,13 +23,6 @@ location ~ ^/internal/s3/(?<s3_hostname>[^/]+)/(?<s3_path>.*) {
|
||||
# the first response. Django explicitly unsets the first, and
|
||||
# does not set the latter two.
|
||||
|
||||
# nginx does its own DNS resolution, which is necessary here to
|
||||
# resolve the IP of the S3 server. Point it at the local caching
|
||||
# systemd resolved service. The validity duration is set to match
|
||||
# S3's DNS validity.
|
||||
resolver 127.0.0.53 valid=300s;
|
||||
resolver_timeout 10s;
|
||||
|
||||
proxy_pass $download_url$is_args$args;
|
||||
proxy_cache uploads;
|
||||
# If the S3 response doesn't contain Cache-Control headers (which
|
||||
|
||||
16
puppet/zulip/lib/puppet/functions/resolver_ip.rb
Normal file
16
puppet/zulip/lib/puppet/functions/resolver_ip.rb
Normal file
@@ -0,0 +1,16 @@
|
||||
require "resolv"
|
||||
|
||||
Puppet::Functions.create_function(:resolver_ip) do
|
||||
def resolver_ip()
|
||||
parsed = Resolv::DNS::Config.default_config_hash()
|
||||
if parsed[:nameserver].empty?
|
||||
raise 'No nameservers found in /etc/resolv.conf! Configure one by setting application_server.nameserver in /etc/zulip/zulip.conf'
|
||||
end
|
||||
resolver = parsed[:nameserver][0]
|
||||
if resolver.include?(':')
|
||||
'[' + resolver + ']'
|
||||
else
|
||||
resolver
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -59,6 +59,12 @@ class zulip::app_frontend_base {
|
||||
source => 'puppet:///modules/zulip/nginx/zulip-include-app.d/keepalive-loadbalancer.conf',
|
||||
notify => Service['nginx'],
|
||||
}
|
||||
} else {
|
||||
file { ['/etc/nginx/zulip-include/app.d/accept-loadbalancer.conf',
|
||||
'/etc/nginx/zulip-include/app.d/keepalive-loadbalancer.conf']:
|
||||
ensure => absent,
|
||||
notify => Service['nginx'],
|
||||
}
|
||||
}
|
||||
|
||||
file { '/etc/nginx/zulip-include/upstreams':
|
||||
@@ -73,8 +79,22 @@ class zulip::app_frontend_base {
|
||||
$s3_memory_cache_size = zulipconf('application_server', 's3_memory_cache_size', '1M')
|
||||
$s3_disk_cache_size = zulipconf('application_server', 's3_disk_cache_size', '200M')
|
||||
$s3_cache_inactive_time = zulipconf('application_server', 's3_cache_inactive_time', '30d')
|
||||
$configured_nginx_resolver = zulipconf('application_server', 'nameserver', '')
|
||||
if $configured_nginx_resolver == '' {
|
||||
# This may fail in the unlikely change that there is no configured
|
||||
# resolver in /etc/resolv.conf, so only call it is unset in zulip.conf
|
||||
$nginx_resolver_ip = resolver_ip()
|
||||
} elsif (':' in $configured_nginx_resolver) and ! ('.' in $configured_nginx_resolver) and ! ('[' in $configured_nginx_resolver) {
|
||||
# Assume this is IPv6, which needs square brackets.
|
||||
$nginx_resolver_ip = "[${configured_nginx_resolver}]"
|
||||
} else {
|
||||
$nginx_resolver_ip = $configured_nginx_resolver
|
||||
}
|
||||
file { '/etc/nginx/zulip-include/s3-cache':
|
||||
require => [Package[$zulip::common::nginx], File['/srv/zulip-uploaded-files-cache']],
|
||||
require => [
|
||||
Package[$zulip::common::nginx],
|
||||
File['/srv/zulip-uploaded-files-cache'],
|
||||
],
|
||||
owner => 'root',
|
||||
group => 'root',
|
||||
mode => '0644',
|
||||
|
||||
@@ -83,28 +83,20 @@ class zulip::postgresql_base {
|
||||
}
|
||||
|
||||
package{"${postgresql}-pgdg-pgroonga":
|
||||
ensure => installed,
|
||||
require => [Package[$postgresql],
|
||||
Exec[$setup_system_deps]],
|
||||
ensure => latest,
|
||||
require => [
|
||||
Package[$postgresql],
|
||||
Exec[$setup_system_deps]
|
||||
],
|
||||
}
|
||||
|
||||
$dbname = zulipconf('postgresql', 'database_name', 'zulip')
|
||||
$dbuser = zulipconf('postgresql', 'database_user', 'zulip')
|
||||
file { $pgroonga_setup_sql_path:
|
||||
ensure => file,
|
||||
exec { 'pgroonga-config':
|
||||
require => Package["${postgresql}-pgdg-pgroonga"],
|
||||
owner => 'postgres',
|
||||
group => 'postgres',
|
||||
mode => '0640',
|
||||
content => template('zulip/postgresql/pgroonga_setup.sql.template.erb'),
|
||||
}
|
||||
|
||||
exec{'create_pgroonga_extension':
|
||||
require => File[$pgroonga_setup_sql_path],
|
||||
# lint:ignore:140chars
|
||||
command => "bash -c 'cat ${pgroonga_setup_sql_path} | su postgres -c \"psql -v ON_ERROR_STOP=1 ${dbname}\" && touch ${pgroonga_setup_sql_path}.applied'",
|
||||
# lint:endignore
|
||||
creates => "${pgroonga_setup_sql_path}.applied",
|
||||
unless => @("EOT"/$),
|
||||
test -f ${pgroonga_setup_sql_path}.applied &&
|
||||
test "$(dpkg-query --show --showformat='\${Version}' "${postgresql}-pgdg-pgroonga")" \
|
||||
= "$(cat ${pgroonga_setup_sql_path}.applied)"
|
||||
| EOT
|
||||
command => "${::zulip_scripts_path}/setup/pgroonga-config ${postgresql_sharedir}",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
# nginx does its own DNS resolution, which is necessary here to
|
||||
# resolve the IP of the S3 server. Point it at whatever is configured
|
||||
# first in /etc/resolv.conf. The validity duration is set to match
|
||||
# S3's DNS validity.
|
||||
resolver <%= @nginx_resolver_ip %> valid=300s;
|
||||
resolver_timeout 10s;
|
||||
|
||||
# This cache is only used if S3 file storage is configured.
|
||||
proxy_cache_path /srv/zulip-uploaded-files-cache
|
||||
levels=1:2
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
map $remote_addr $trusted_x_forwarded_proto {
|
||||
default $scheme;
|
||||
}
|
||||
map $http_x_forwarded_for $x_proxy_misconfiguration {
|
||||
default "";
|
||||
"~." "No proxies configured in Zulip, but proxy headers detected from proxy at $remote_addr; see https://zulip.readthedocs.io/en/latest/production/deployment.html#putting-the-zulip-application-behind-a-reverse-proxy";
|
||||
}
|
||||
<% else %>
|
||||
# We do this in two steps because `geo` does not support variable
|
||||
# interpolation in the value, but does support CIDR notation,
|
||||
@@ -18,4 +22,9 @@ map $is_x_forwarded_proto_trusted $trusted_x_forwarded_proto {
|
||||
0 $scheme;
|
||||
1 $http_x_forwarded_proto;
|
||||
}
|
||||
map "$is_x_forwarded_proto_trusted:$http_x_forwarded_proto" $x_proxy_misconfiguration {
|
||||
"~^0:" "Incorrect reverse proxy IPs set in Zulip (try $remote_addr?); see https://zulip.readthedocs.io/en/latest/production/deployment.html#putting-the-zulip-application-behind-a-reverse-proxy";
|
||||
"~^1:$" "No X-Forwarded-Proto header sent from trusted proxy $realip_remote_addr; see example configurations in https://zulip.readthedocs.io/en/latest/production/deployment.html#putting-the-zulip-application-behind-a-reverse-proxy";
|
||||
default "";
|
||||
}
|
||||
<% end %>
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
CREATE EXTENSION PGROONGA;
|
||||
GRANT USAGE ON SCHEMA pgroonga TO <%= @dbuser %>;
|
||||
@@ -49,6 +49,18 @@ Options:
|
||||
EOF
|
||||
}
|
||||
|
||||
system_requirements_failure() {
|
||||
set +x
|
||||
echo >&2
|
||||
cat >&2
|
||||
cat <<EOF >&2
|
||||
|
||||
For more information, see:
|
||||
https://zulip.readthedocs.io/en/latest/production/requirements.html
|
||||
EOF
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Shell option parsing. Over time, we'll want to move some of the
|
||||
# environment variables below into this self-documenting system.
|
||||
args="$(getopt -o '' --long help,hostname:,email:,certbot,self-signed-cert,cacert:,postgresql-database-name:,postgresql-database-user:,postgresql-version:,postgresql-missing-dictionaries,no-init-db,no-overwrite-settings,no-dist-upgrade -n "$0" -- "$@")"
|
||||
@@ -221,9 +233,7 @@ fi
|
||||
case "$os_id $os_version_id" in
|
||||
'debian 11' | 'debian 12' | 'ubuntu 20.04' | 'ubuntu 22.04') ;;
|
||||
*)
|
||||
set +x
|
||||
cat <<EOF
|
||||
|
||||
system_requirements_failure <<EOF
|
||||
Unsupported OS release: $os_id $os_version_id
|
||||
|
||||
Zulip in production is supported only on:
|
||||
@@ -231,33 +241,37 @@ Zulip in production is supported only on:
|
||||
- Debian 12
|
||||
- Ubuntu 20.04 LTS
|
||||
- Ubuntu 22.04 LTS
|
||||
|
||||
For more information, see:
|
||||
https://zulip.readthedocs.io/en/latest/production/requirements.html
|
||||
EOF
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
machine="$(uname -m)"
|
||||
if [ "$machine" != x86_64 ] && [ "$machine" != aarch64 ]; then
|
||||
system_requirements_failure <<EOF
|
||||
Unsupported CPU architecture: $machine (expected x86_64 or aarch64).
|
||||
EOF
|
||||
fi
|
||||
|
||||
dpkg_architecture="$(dpkg --print-architecture)"
|
||||
if [ "$dpkg_architecture" != amd64 ] && [ "$dpkg_architecture" != arm64 ]; then
|
||||
system_requirements_failure <<EOF
|
||||
Unsupported OS architecture: $dpkg_architecture (expected amd64 or arm64).
|
||||
EOF
|
||||
fi
|
||||
|
||||
has_universe() {
|
||||
apt-cache policy \
|
||||
| grep -q "^ release v=$os_version_id,o=Ubuntu,a=$os_version_codename,n=$os_version_codename,l=Ubuntu,c=universe"
|
||||
}
|
||||
|
||||
if [ "$os_id" = ubuntu ] && ! has_universe && ! { apt-get update && has_universe; }; then
|
||||
set +x
|
||||
cat <<'EOF'
|
||||
|
||||
system_requirements_failure <<EOF
|
||||
You must enable the Ubuntu Universe repository before installing
|
||||
Zulip. You can do this with:
|
||||
|
||||
sudo add-apt-repository universe
|
||||
sudo apt update
|
||||
|
||||
For more information, see:
|
||||
https://zulip.readthedocs.io/en/latest/production/requirements.html
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case ",$PUPPET_CLASSES," in
|
||||
|
||||
@@ -28,6 +28,7 @@ from scripts.lib.zulip_tools import (
|
||||
DEPLOYMENTS_DIR,
|
||||
assert_running_as_root,
|
||||
get_config,
|
||||
get_config_bool,
|
||||
get_config_file,
|
||||
get_zulip_pwent,
|
||||
listening_publicly,
|
||||
@@ -205,20 +206,23 @@ def shutdown_server() -> None:
|
||||
|
||||
# postgresql.version is required for database servers, but wasn't
|
||||
# previously; fill it in based on what the OS provides.
|
||||
postgresql_version = None
|
||||
if os.path.exists("/etc/init.d/postgresql"):
|
||||
postgresql_version = get_config(config_file, "postgresql", "version")
|
||||
django_pg_version = subprocess.check_output(
|
||||
# We use the _current_ deploy's manage.py, since ours has not
|
||||
# yet had its virtualenv configured yet.
|
||||
[
|
||||
"../current/manage.py",
|
||||
"shell",
|
||||
"-c",
|
||||
"from django.db import connection; print(int(connection.cursor().connection.server_version/10000))",
|
||||
],
|
||||
preexec_fn=su_to_zulip,
|
||||
text=True,
|
||||
).strip()
|
||||
if not postgresql_version:
|
||||
default_postgresql_version = {
|
||||
("debian", "11"): "13",
|
||||
("debian", "12"): "15",
|
||||
("ubuntu", "20.04"): "12",
|
||||
("ubuntu", "22.04"): "14",
|
||||
("centos", "7"): "11",
|
||||
}
|
||||
if (vendor, os_version) in default_postgresql_version:
|
||||
postgresql_version = default_postgresql_version[(vendor, os_version)]
|
||||
else:
|
||||
error_desupported_os(vendor, os_version)
|
||||
postgresql_version = django_pg_version
|
||||
subprocess.check_call(
|
||||
[
|
||||
"crudini",
|
||||
@@ -229,8 +233,27 @@ if os.path.exists("/etc/init.d/postgresql"):
|
||||
postgresql_version,
|
||||
]
|
||||
)
|
||||
elif postgresql_version != django_pg_version:
|
||||
logging.critical(
|
||||
"PostgreSQL version mismatch: %s (running) vs %s (configured)",
|
||||
django_pg_version,
|
||||
postgresql_version,
|
||||
)
|
||||
logging.info(
|
||||
"/etc/zulip/zulip.conf claims that Zulip is running PostgreSQL\n"
|
||||
"%s, but the server is connected to a PostgreSQL running\n"
|
||||
"version %s. Check the output from pg_lsclusters to verify\n"
|
||||
"which clusters are running, and update /etc/zulip/zulip.conf to match.\n"
|
||||
"\n"
|
||||
"In general, this results from manually upgrading PostgreSQL; you\n"
|
||||
"should follow our instructions for using our tool to do so:\n"
|
||||
"https://zulip.readthedocs.io/en/latest/production/upgrade.html#upgrading-postgresql",
|
||||
postgresql_version,
|
||||
django_pg_version,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
if tuple(map(int, postgresql_version.split("."))) < (12,):
|
||||
if int(postgresql_version) < 12:
|
||||
logging.critical("Unsupported PostgreSQL version: %s", postgresql_version)
|
||||
logging.info(
|
||||
"Please upgrade to PostgreSQL 12 or newer first.\n"
|
||||
@@ -248,9 +271,20 @@ if glob.glob("/usr/share/postgresql/*/extension/tsearch_extras.control"):
|
||||
subprocess.check_call(["apt-get", "remove", "-y", "postgresql-*-tsearch-extras"])
|
||||
|
||||
if not (minimal_change or args.skip_puppet):
|
||||
# We need to temporarily hold pgroonga, if installed -- upgrading
|
||||
# it without running the appropriate upgrade SQL can cause
|
||||
# PostgreSQL to crash
|
||||
if postgresql_version is not None and get_config_bool(config_file, "machine", "pgroonga"):
|
||||
subprocess.check_call(
|
||||
["apt-mark", "hold", f"postgresql-{postgresql_version}-pgdg-pgroonga"]
|
||||
)
|
||||
logging.info("Upgrading system packages...")
|
||||
subprocess.check_call(["apt-get", "update"])
|
||||
subprocess.check_call(["apt-get", "-y", "--with-new-pkgs", "upgrade"])
|
||||
if postgresql_version is not None and get_config_bool(config_file, "machine", "pgroonga"):
|
||||
subprocess.check_call(
|
||||
["apt-mark", "unhold", f"postgresql-{postgresql_version}-pgdg-pgroonga"]
|
||||
)
|
||||
|
||||
# To bootstrap zulip-puppet-apply, we need to install the system yaml
|
||||
# package; new installs get this, but old installs may not have it.
|
||||
|
||||
@@ -1,3 +1,2 @@
|
||||
\connect zulip
|
||||
CREATE EXTENSION pgroonga;
|
||||
GRANT USAGE ON SCHEMA pgroonga TO zulip;
|
||||
|
||||
20
scripts/setup/pgroonga-config
Executable file
20
scripts/setup/pgroonga-config
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eux
|
||||
|
||||
dbversion=$(crudini --get /etc/zulip/zulip.conf postgresql version)
|
||||
dbname=$(crudini --get /etc/zulip/zulip.conf postgresql database_name 2>/dev/null || echo zulip)
|
||||
|
||||
sharedir="${1:-/usr/share/postgresql/$dbversion}"
|
||||
applied_file="$sharedir/pgroonga_setup.sql.applied"
|
||||
|
||||
installed_version=$(dpkg-query --show --showformat='${Version}' "postgresql-$dbversion-pgdg-pgroonga")
|
||||
|
||||
if [ ! -f "$applied_file" ]; then
|
||||
sql="CREATE EXTENSION PGROONGA"
|
||||
else
|
||||
sql="ALTER EXTENSION pgroonga UPDATE"
|
||||
fi
|
||||
|
||||
echo "$sql" | su postgres -c "psql -v ON_ERROR_STOP=1 $dbname"
|
||||
|
||||
echo "$installed_version" >"$applied_file"
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
set -eo pipefail
|
||||
set -euo pipefail
|
||||
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Error: This script must be run as root" >&2
|
||||
@@ -12,7 +12,8 @@ export LC_ALL=C.UTF-8
|
||||
export LANG=C.UTF-8
|
||||
export LANGUAGE=C.UTF-8
|
||||
|
||||
UPGRADE_TO=${1:-15}
|
||||
LATEST_SUPPORTED_VERSION=15
|
||||
UPGRADE_TO=${1:-$LATEST_SUPPORTED_VERSION}
|
||||
UPGRADE_FROM=$(crudini --get /etc/zulip/zulip.conf postgresql version)
|
||||
ZULIP_PATH="$(dirname "$0")/../.."
|
||||
|
||||
@@ -21,6 +22,38 @@ if [ "$UPGRADE_TO" = "$UPGRADE_FROM" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$UPGRADE_TO" -lt "$UPGRADE_FROM" ]]; then
|
||||
echo "Refusing to downgrade PostgreSQL $UPGRADE_FROM to $UPGRADE_TO!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$UPGRADE_TO" -gt "$LATEST_SUPPORTED_VERSION" ]]; then
|
||||
echo "This version of Zulip does not support PostgreSQL $UPGRADE_TO."
|
||||
echo "You may need to upgrade Zulip before you can upgrade to PostgreSQL $UPGRADE_TO."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verify that the version in /etc/zulip/zulip.conf is the version that
|
||||
# Django actually stores its data in. We can only do that if the
|
||||
# database server is on the same host as the application server.
|
||||
if [ -d /home/zulip/deployments/current ]; then
|
||||
DATA_IS_IN=$(su zulip -c '/home/zulip/deployments/current/manage.py shell -c "from django.db import connection; print(int(connection.cursor().connection.server_version/10000))"')
|
||||
|
||||
if [ "$UPGRADE_FROM" != "$DATA_IS_IN" ]; then
|
||||
cat <<EOF
|
||||
|
||||
/etc/zulip/zulip.conf claims that Zulip is running PostgreSQL
|
||||
$UPGRADE_FROM, but the server is connected to a PostgreSQL running
|
||||
version $DATA_IS_IN. Check the output from pg_lsclusters to verify
|
||||
which clusters are running, and update /etc/zulip/zulip.conf to match.
|
||||
|
||||
In general, this results from manually upgrading PostgreSQL; you
|
||||
should use this tool for all PostgreSQL upgrades.
|
||||
EOF
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
set -x
|
||||
|
||||
"$ZULIP_PATH"/scripts/lib/setup-apt-repo
|
||||
|
||||
@@ -116,8 +116,6 @@ SELECT unnest(
|
||||
ARRAY['ALTER SYSTEM SET pgroonga.enable_wal = ''on''', 'SELECT pg_reload_conf()']
|
||||
END
|
||||
) \gexec
|
||||
|
||||
GRANT USAGE ON SCHEMA pgroonga TO $USERNAME;
|
||||
EOF
|
||||
|
||||
psql -v ON_ERROR_STOP=1 -e -h localhost postgres "$USERNAME" <<EOF
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import os
|
||||
|
||||
ZULIP_VERSION = "7.0"
|
||||
ZULIP_VERSION = "7.2"
|
||||
|
||||
# Add information on number of commits and commit hash to version, if available
|
||||
zulip_git_version_file = os.path.join(
|
||||
@@ -14,8 +14,8 @@ ZULIP_VERSION = lines.pop(0).strip()
|
||||
ZULIP_MERGE_BASE = lines.pop(0).strip()
|
||||
|
||||
LATEST_MAJOR_VERSION = "7.0"
|
||||
LATEST_RELEASE_VERSION = "7.0"
|
||||
LATEST_RELEASE_ANNOUNCEMENT = "https://blog.zulip.com/2022/11/17/zulip-6-0-released/"
|
||||
LATEST_RELEASE_VERSION = "7.2"
|
||||
LATEST_RELEASE_ANNOUNCEMENT = "https://blog.zulip.com/2023/05/31/zulip-7-0-released/"
|
||||
|
||||
# Versions of the desktop app below DESKTOP_MINIMUM_VERSION will be
|
||||
# prevented from connecting to the Zulip server. Versions above
|
||||
|
||||
@@ -186,6 +186,7 @@ export function clear_compose_box() {
|
||||
compose_ui.autosize_textarea($("#compose-textarea"));
|
||||
compose_banner.clear_errors();
|
||||
compose_banner.clear_warnings();
|
||||
compose_banner.clear_uploads();
|
||||
compose_ui.hide_compose_spinner();
|
||||
popover_menus.reset_selected_schedule_timestamp();
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ function clear_box() {
|
||||
compose_ui.autosize_textarea($("#compose-textarea"));
|
||||
compose_banner.clear_errors();
|
||||
compose_banner.clear_warnings();
|
||||
compose_banner.clear_uploads();
|
||||
}
|
||||
|
||||
export function autosize_message_content() {
|
||||
|
||||
@@ -106,6 +106,10 @@ export function clear_warnings(): void {
|
||||
$(`#compose_banners .${CSS.escape(WARNING)}`).remove();
|
||||
}
|
||||
|
||||
export function clear_uploads(): void {
|
||||
$("#compose_banners .upload_banner").remove();
|
||||
}
|
||||
|
||||
export function clear_unmute_topic_notifications(): void {
|
||||
$(`#compose_banners .${CLASSNAMES.unmute_topic_notification.replaceAll(" ", ".")}`).remove();
|
||||
}
|
||||
|
||||
@@ -199,6 +199,7 @@ export function update_compose_for_message_type(message_type, opts) {
|
||||
}
|
||||
compose_banner.clear_errors();
|
||||
compose_banner.clear_warnings();
|
||||
compose_banner.clear_uploads();
|
||||
}
|
||||
|
||||
export function on_compose_select_recipient_update() {
|
||||
|
||||
@@ -928,23 +928,32 @@ export function by_recipient(target_id, opts) {
|
||||
// don't use message_lists.current as it won't work for muted messages or for out-of-narrow links
|
||||
const message = message_store.get(target_id);
|
||||
|
||||
if (
|
||||
user_settings.web_mark_read_on_scroll_policy !==
|
||||
web_mark_read_on_scroll_policy_values.never.code
|
||||
) {
|
||||
// We don't check message_list.can_mark_messages_read
|
||||
// here because the target message_list isn't initialized;
|
||||
// but the targeted message is about to be marked read
|
||||
// in the new view.
|
||||
unread_ops.notify_server_message_read(message);
|
||||
}
|
||||
|
||||
switch (message.type) {
|
||||
case "private":
|
||||
if (
|
||||
user_settings.web_mark_read_on_scroll_policy !==
|
||||
web_mark_read_on_scroll_policy_values.never.code
|
||||
) {
|
||||
// We don't check message_list.can_mark_messages_read
|
||||
// here because the target message_list isn't initialized;
|
||||
// but the targeted message is about to be marked read
|
||||
// in the new view.
|
||||
unread_ops.notify_server_message_read(message);
|
||||
}
|
||||
by("dm", message.reply_to, opts);
|
||||
break;
|
||||
|
||||
case "stream":
|
||||
if (
|
||||
user_settings.web_mark_read_on_scroll_policy ===
|
||||
web_mark_read_on_scroll_policy_values.always.code
|
||||
) {
|
||||
// We don't check message_list.can_mark_messages_read
|
||||
// here because the target message_list isn't initialized;
|
||||
// but the targeted message is about to be marked read
|
||||
// in the new view.
|
||||
unread_ops.notify_server_message_read(message);
|
||||
}
|
||||
by("stream", message.stream, opts);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -239,7 +239,7 @@ function set_compose_box_schedule(element) {
|
||||
return selected_send_at_time;
|
||||
}
|
||||
|
||||
export function open_send_later_menu(instance) {
|
||||
export function open_send_later_menu() {
|
||||
if (!compose_validate.validate(true)) {
|
||||
return;
|
||||
}
|
||||
@@ -248,11 +248,12 @@ export function open_send_later_menu(instance) {
|
||||
const date = new Date();
|
||||
const filtered_send_opts = scheduled_messages.get_filtered_send_opts(date);
|
||||
$("body").append(render_send_later_modal(filtered_send_opts));
|
||||
let interval;
|
||||
|
||||
overlays.open_modal("send_later_modal", {
|
||||
autoremove: true,
|
||||
on_show() {
|
||||
instance._interval = setInterval(
|
||||
interval = setInterval(
|
||||
scheduled_messages.update_send_later_options,
|
||||
scheduled_messages.SCHEDULING_MODAL_UPDATE_INTERVAL_IN_MILLISECONDS,
|
||||
);
|
||||
@@ -312,7 +313,7 @@ export function open_send_later_menu(instance) {
|
||||
$send_later_modal_overlay.trigger("focus");
|
||||
},
|
||||
on_hide() {
|
||||
clearInterval(instance._interval);
|
||||
clearInterval(interval);
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -331,12 +332,10 @@ export function do_schedule_message(send_at_time) {
|
||||
export function initialize() {
|
||||
register_popover_menu("#streams_inline_icon", {
|
||||
onShow(instance) {
|
||||
popover_instances.stream_settings = instance;
|
||||
const can_create_streams =
|
||||
settings_data.user_can_create_private_streams() ||
|
||||
settings_data.user_can_create_public_streams() ||
|
||||
settings_data.user_can_create_web_public_streams();
|
||||
on_show_prep(instance);
|
||||
|
||||
if (!can_create_streams) {
|
||||
// If the user can't create streams, we directly
|
||||
@@ -346,7 +345,12 @@ export function initialize() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Assuming that the instance can be shown, track and
|
||||
// prep the instance for showing
|
||||
popover_instances.stream_settings = instance;
|
||||
instance.setContent(parse_html(render_left_sidebar_stream_setting_popover()));
|
||||
on_show_prep(instance);
|
||||
|
||||
// When showing the popover menu, we want the
|
||||
// "Add streams" and the "Filter streams" tooltip
|
||||
// to appear below the "Add streams" icon.
|
||||
@@ -360,6 +364,8 @@ export function initialize() {
|
||||
filter_streams_tooltip._tippy?.setProps({
|
||||
placement: "bottom",
|
||||
});
|
||||
|
||||
// The linter complains about unbalanced returns
|
||||
return true;
|
||||
},
|
||||
onHidden(instance) {
|
||||
@@ -905,7 +911,7 @@ export function initialize() {
|
||||
const send_at_timestamp = get_selected_send_later_timestamp();
|
||||
do_schedule_message(send_at_timestamp);
|
||||
});
|
||||
$popper.one("click", ".open_send_later_modal", () => open_send_later_menu(instance));
|
||||
$popper.one("click", ".open_send_later_modal", open_send_later_menu);
|
||||
},
|
||||
onHidden(instance) {
|
||||
instance.destroy();
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user