Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,5 +20,8 @@ jobs:
- name: Set up Python dependencies
run: pip install -r requirements.txt

- name: Compile languages
run: pybabel compile --directory theme/translations/ --domain mixxxorg

- name: Check if website build is warning-free
run: pelican --extra-settings SITEURL='"https://example.com"' --fatal warnings
run: pelican --extra-settings SITEURL='"https://mixxx.org"' --fatal warnings
7 changes: 4 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# default destination for files rendered by pelican
/output
/output/
# python bytecode cache
__pycache__
.venv/
__pycache__/
/.venv/
*.mo
48 changes: 40 additions & 8 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,32 @@
# This is the configuration file for the pre-commit framework, a simple way
# to manage, install and run git hooks to catch common problems early on.
# See https://pre-commit.com/ for details.
#
# If you have Python >= 3.7 and python-pip installed, just run:
#
# $ pip install --user pre-commit
# $ git clone https://github.com/your-fork-of/mixxx.git
# $ cd mixxx
# $ pre-commit install
# $ pre-commit install -t pre-push
#
# It will now run relevant hooks automatically on every `git commit` or
# `git push` in the mixxx git repository.
#
# If you have a problems with a particular hook, you can use the `$SKIP`
# environment variable to disable hooks:
#
# $ SKIP=clang-format,end-of-file-fixer git commit
#
# This can also be used to separate logic changes and autoformatting into
# two subsequent commits.
#
# Using the `$SKIP` var is preferable to using `git commit --no-verify`
# because it won't prevent catching other, unrelated issues.

#
exclude: ^output/.*$
minimum_pre_commit_version: 2.21.0
default_language_version:
python: python3
repos:
Expand All @@ -8,22 +37,25 @@ repos:
files: ^(theme/static/images|content/images)/.*\.svg$
entry: tools/optimize_svg.py
language: python
additional_dependencies:
- scour==0.38.2
additional_dependencies: [
scour==0.38.2
]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v5.0.0
hooks:
- id: check-byte-order-marker
- id: fix-byte-order-marker
- id: check-case-conflict
- id: check-merge-conflict
- id: end-of-file-fixer
exclude: ^(.*\.po|.*\.pot)$
- id: mixed-line-ending
- id: trailing-whitespace
args: [--markdown-linebreak-ext=md]
exclude: ^(.*\.po|.*\.pot)$
- id: check-yaml
- id: check-json
- repo: https://github.com/codespell-project/codespell
rev: v2.2.2
rev: v2.3.0
hooks:
- id: codespell
name: "Check for spelling mistakes"
Expand All @@ -32,14 +64,14 @@ repos:
.codespellignore,
--write-changes,
]
exclude: ^(.*\.svg|locale/.*|pages/(?:contact|press)\.html)$
exclude: ^(.*\.svg|.*\.po|.*\.pot|pages/(?:contact|press)\.html)$
- repo: https://github.com/psf/black
rev: 22.12.0
rev: 24.10.0
hooks:
- id: black
name: "Reformat Python code"
- repo: https://github.com/pycqa/flake8
rev: '6.0.0'
rev: "7.1.1"
hooks:
- id: flake8
name: "Check for Python warnings"
Expand Down
6 changes: 3 additions & 3 deletions .tx/config
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
host = https://www.transifex.com
lang_map = af_ZA: af-ZA, am_ET: am-ET, ar_AE: ar-AE, ar_BH: ar-BH, ar_DZ: ar-DZ, ar_EG: ar-EG, ar_IQ: ar-IQ, ar_JO: ar-JO, ar_KW: ar-KW, ar_LB: ar-LB, ar_LY: ar-LY, ar_MA: ar-MA, ar_OM: ar-OM, ar_QA: ar-QA, ar_SA: ar-SA, ar_SY: ar-SY, ar_TN: ar-TN, ar_YE: ar-YE, arn_CL: arn-CL, as_IN: as-IN, az_AZ: az-AZ, ba_RU: ba-RU, be_BY: be-BY, bg_BG: bg-BG, bn_BD: bn-BD, bn_IN: bn-IN, bo_CN: bo-CN, br_FR: br-FR, bs_BA: bs-BA, ca_ES: ca-ES, co_FR: co-FR, cs_CZ: cs-CZ, cy_GB: cy-GB, da_DK: da-DK, de_AT: de-AT, de_CH: de-CH, de_DE: de-DE, de_LI: de-LI, de_LU: de-LU, dsb_DE: dsb-DE, dv_MV: dv-MV, el_GR: el-GR, en_AU: en-AU, en_BZ: en-BZ, en_CA: en-CA, en_GB: en-GB, en_IE: en-IE, en_IN: en-IN, en_JM: en-JM, en_MY: en-MY, en_NZ: en-NZ, en_PH: en-PH, en_SG: en-SG, en_TT: en-TT, en_US: en-US, en_ZA: en-ZA, en_ZW: en-ZW, es_AR: es-AR, es_BO: es-BO, es_CL: es-CL, es_CO: es-CO, es_CR: es-CR, es_DO: es-DO, es_EC: es-EC, es_ES: es-ES, es_GT: es-GT, es_HN: es-HN, es_MX: es-MX, es_NI: es-NI, es_PA: es-PA, es_PE: es-PE, es_PR: es-PR, es_PY: es-PY, es_SV: es-SV, es_US: es-US, es_UY: es-UY, es_VE: es-VE, et_EE: et-EE, eu_ES: eu-ES, fa_IR: fa-IR, fi_FI: fi-FI, fil_PH: fil-PH, fo_FO: fo-FO, fr_BE: fr-BE, fr_CA: fr-CA, fr_CH: fr-CH, fr_FR: fr-FR, fr_LU: fr-LU, fr_MC: fr-MC, fy_NL: fy-NL, ga_IE: ga-IE, gd_GB: gd-GB, gl_ES: gl-ES, gsw_FR: gsw-FR, gu_IN: gu-IN, ha_NG: ha-NG, he_IL: he-IL, hi_IN: hi-IN, hr_BA: hr-BA, hr_HR: hr-HR, hsb_DE: hsb-DE, hu_HU: hu-HU, hy_AM: hy-AM, id_ID: id-ID, ig_NG: ig-NG, ii_CN: ii-CN, is_IS: is-IS, it_CH: it-CH, it_IT: it-IT, iu_CA: iu-CA, ja_JP: ja-JP, ka_GE: ka-GE, kk_KZ: kk-KZ, kl_GL: kl-GL, km_KH: km-KH, kn_IN: kn-IN, ko_KR: ko-KR, kok_IN: kok-IN, ky_KG: ky-KG, lb_LU: lb-LU, lo_LA: lo-LA, lt_LT: lt-LT, lv_LV: lv-LV, mi_NZ: mi-NZ, mk_MK: mk-MK, ml_IN: ml-IN, mn_CN: mn-CN, mn_MN: mn-MN, moh_CA: moh-CA, mr_IN: mr-IN, ms_BN: ms-BN, ms_MY: ms-MY, mt_MT: mt-MT, nb_NO: nb-NO, ne_NP: ne-NP, nl_BE: nl-BE, nl_NL: nl-NL, nn_NO: nn-NO, nso_ZA: nso-ZA, oc_FR: oc-FR, or_IN: or-IN, pa_IN: pa-IN, pl_PL: pl-PL, prs_AF: prs-AF, ps_AF: ps-AF, pt_BR: pt-BR, pt_PT: pt-PT, qut_GT: qut-GT, quz_BO: quz-BO, quz_EC: quz-EC, quz_PE: quz-PE, rm_CH: rm-CH, ro_RO: ro-RO, ru_RU: ru-RU, rw_RW: rw-RW, sa_IN: sa-IN, sah_RU: sah-RU, se_FI: se-FI, se_NO: se-NO, se_SE: se-SE, si_LK: si-LK, sk_SK: sk-SK, sl_SI: sl-SI, sma_NO: sma-NO, sma_SE: sma-SE, smj_NO: smj-NO, smj_SE: smj-SE, smn_FI: smn-FI, sms_FI: sms-FI, sq_AL: sq-AL, sr_BA: sr-BA, sr_CS: sr-CS, sr_ME: sr-ME, sr_RS: sr-RS, sv_FI: sv-FI, sv_SE: sv-SE, sw_KE: sw-KE, syr_SY: syr-SY, ta_IN: ta-IN, te_IN: te-IN, tg_TJ: tg-TJ, th_TH: th-TH, tk_TM: tk-TM, tn_ZA: tn-ZA, tr_TR: tr-TR, tt_RU: tt-RU, tzm_DZ: tzm-DZ, ug_CN: ug-CN, uk_UA: uk-UA, ur_PK: ur-PK, uz_UZ: uz-UZ, vi_VN: vi-VN, wo_SN: wo-SN, xh_ZA: xh-ZA, yo_NG: yo-NG, zh_CN: zh-CN, zh_HK: zh-HK, zh_MO: zh-MO, zh_SG: zh-SG, zh_TW: zh-TW, zu_ZA: zu-ZA

[mixxxdj-website.djangopo]
file_filter = locale/<lang>/LC_MESSAGES/django.po
source_file = locale/en/LC_MESSAGES/django.po
[mixxxdj-website.pelican]
file_filter = theme/translations/<lang>/LC_MESSAGES/messages.po
source_file = theme/messages.pot
source_lang = en
minimum_perc = 0
type = PO
53 changes: 50 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,15 @@ dependencies.
$ pip install -r requirements.txt

Then build the site from its templates, run this in root directory of the git
repository:
repository (Note: don't forget to compile the translations first as explained below):

$ pelican

If all goes well, you should have the rendered HTML in your `output/`
directory. To stand up a development server to test out your change, type:
directory. To start up a development server to test out your change, type:

$ pelican --listen --autoreload
$ Linux: pelican --listen --autoreload --extra-settings SITEURL='"http://localhost:8000"'
$ Windows: pelican --listen --autoreload --extra-settings SITEURL=\"http://localhost:8000\"

You can then visit ```http://127.0.0.1:8000``` to see your development version
of the site.
Expand Down Expand Up @@ -82,6 +83,27 @@ stored in `theme/templates/pages/`. If there is a snippet of code you want to
use in multiple places on the site, place it in the `/theme/templates/` folder
-- for example [theme/templates/download_button.html][download_button.html].

To generate the site:
```
pelican
```

If there are problems, running in debug can help:
```
pelican -D
```

For interactive development, run it as an http server and will update the contents as you modify it.
```
pelican --listen --autoreload --extra-settings SITEURL='"http://localhost:8000"'
```
Note that on windows console, you need to write: SITEURL=\"http://localhost:8000\" instead

Then open this site on your browser:
*http://127.0.0.1:8000*



* [Jinja2 template language][jinja2_templates]
* [template internationalization][jinja2_template_i18n]
* [Pelican documentation][pelican_docs]
Expand All @@ -91,6 +113,31 @@ use in multiple places on the site, place it in the `/theme/templates/` folder
All strings wrapped with `{% trans %}Hello World {% endtrans %}` are flagged
for translation. Whenever adding new English strings to the website, please
wrap them in a `{% trans %}Hello World{% endtrans %}` block.
A more compact way is using gettext

```
{% trans %}translatable content{% endtrans %}
{{ gettext('translatable content') }}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both is printed in one line. I think you need to add a blank line. It is probably better to recommend only one translation method. I like { tr('translatable content') } to match the mixxx source. But it doesn't really matter.

Copy link
Author

@JosepMaJAZ JosepMaJAZ Jul 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I fixed the line break, but I am unsure about keeping just one.
Also note that I cannot randomly choose a name, although I could define a function in the pelicanconf.py file that calls to the real one.
Using "tr" would be confusing (the only thing in common would be that it is a translatable text)

Anyway, all the existing code uses {% trans %} {% endtrans %}, (except the site language text that I've added), but using the gettext syntax is problematic if one needs to escape text.
So, I am still in doubt of what we do. Maybe recommend the longer syntax, but that the shorter one can be used too?

```

To create new languages, or to update existing languages once there are new
translations, execute the following inside the //theme// subfolder.


In order to create a new language (replace LANG with locale):
```
pybabel extract --mapping babel.cfg --output mixxxorg.pot --msgid-bugs-address=https://github.com/mixxxdj/mixxx/issues/ --copyright-holder="Mixxx Development Team" --project=Mixxx --version="DJ website" ./
pybabel init --input-file mixxxorg.pot --output-dir translations/ --locale *LANG* --domain mixxxorg
pybabel compile --directory translations/ --domain mixxxorg
```

In order to update all existing languages when new content needs translation:
```
pybabel extract --mapping babel.cfg --output mixxxorg.pot --msgid-bugs-address=https://github.com/mixxxdj/mixxx/issues/ --copyright-holder="Mixxx Development Team" --project=Mixxx --version="DJ website" ./
pybabel update --input-file mixxxorg.pot --output-dir translations/ --domain mixxxorg
pybabel compile --directory translations/ --domain mixxxorg
```


[mixxx.org]: http://mixxx.org/
[pelican]: https://github.com/getpelican/pelican
Expand Down
2 changes: 1 addition & 1 deletion content/news/2008-01-31-progress-since-beta-1.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ date: 2008-01-31 22:12:00
tags: 1.6, 1.6.0, beta, development
comments: no

[![Sceenshot of Mixxx 1.6.0beta2]({static}/images/news/Screenshot-Mixxx-1.6.0beta2.png)]({static}/images/news/Screenshot-Mixxx-1.6.0beta2.png)
[![Screenshot of Mixxx 1.6.0beta2]({static}/images/news/Screenshot-Mixxx-1.6.0beta2.png)]({static}/images/news/Screenshot-Mixxx-1.6.0beta2.png)

Since the release of Mixxx 1.6.0 beta1, we've been busy busy busy getting new features and bug fixes ready for beta2.
The library has undergone substantial work including new playlist support, improvements to the file scanning, and several bug fixes that were causing stability issues in beta1.
Expand Down
2 changes: 1 addition & 1 deletion content/news/2020-06-11-Mixxx-2-2-4-released.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,4 @@ If you want to check out the new features of the upcoming 2.3 release, you can a
* Add controller mapping for Denon MC7000 #2546
* Add controller mapping for Stanton DJC.4 #2607
* Fix broadcasting via broadcast/recording input lp:1876222 #2743
* Only apply ducking gain in manual ducking mode when talkover is enabed lp:1394968 lp:1737113 lp:1662536 #2759
* Only apply ducking gain in manual ducking mode when talkover is enabled lp:1394968 lp:1737113 lp:1662536 #2759
2 changes: 1 addition & 1 deletion content/news/2021-01-24-internet-censorship.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ On the other hand, neither the ISPs nor the Uganda Communications Commission ope
The internet had been restored alright, but we still could not access social media.
Not with OTT, and definitely not with certain VPNs. But the election was over, was it not? Then why was social media still blocked?
This time, not only had social media been blocked, but all app stores, YouTube, and most VPN clients.
([This article by techjaja](https://techjaja.com/social-media-vpns-app-stores-and-youtube-indefinitely-banned-in-uganda/) provides more detail on the platorms that were banned in Uganda and when it happened.)
([This article by techjaja](https://techjaja.com/social-media-vpns-app-stores-and-youtube-indefinitely-banned-in-uganda/) provides more detail on the platforms that were banned in Uganda and when it happened.)

![email from Roke Telecom to customer]({static}/images/news/email.jpg) ![Email from UCC]({static}/images/news/email2.jpg)

Expand Down
2 changes: 1 addition & 1 deletion content/news/2021-02-08-new-in-2-3-serato-support.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ date: 2021-02-08 11:18:15
As all of you probably know, Mixxx is the best DJ software in the market.
However, we've recently been made aware that a minor competitor has emerged and tries to steal that title from us - [Serato DJ Pro](https://serato.com/dj/pro).
The hardware support is nice, but since Serato is neither open-source nor as customizable, we're not too concerned.
From the user's perpective, switching to the most popular open-source DJ software in world seems like the obvious choice.
From the user's perspective, switching to the most popular open-source DJ software in world seems like the obvious choice.

Unfortunately, migrating from Serato to Mixxx is a lot of work - apart from familiarizing yourself with a new tool, all the countless hours you spent to organize and prepare the tracks in your old library are lost, and you need to start from scratch.
At least until now - if you're a Serato user and cast an eye on Mixxx, we've got a nice surprise for you.
Expand Down
2 changes: 1 addition & 1 deletion content/news/2021-11-21-dvs-internals-pt1.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Since the dawn of DJing, spinning vinyl records has never really gone out of fas
Even when CDs became popular in 90s and most music listeners happily phased out their record players, the classical "two turntables and a mixer" setup stayed the epitome of DJing.
In recent years, digital DJ controllers became more popular, but there are still many DJs that stick with their notorious Technics SL-1210s turntables.

There's a reason for that: the tactile feeling of manipulating music with your hands is something that controllers have had trouble archieving.
There's a reason for that: the tactile feeling of manipulating music with your hands is something that controllers have had trouble achieving.
Motorized controllers like the Rane One try to provide a similar workflow, but it's still to be seen whether they will be able to take significant market share and replace vinyl setups or if they stay a niche product.

On the other hand, going digital has its benefits:
Expand Down
2 changes: 1 addition & 1 deletion content/news/2021-12-22-dvs-internals-pt2.md
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,7 @@ which results in the state (1, 0, 0), which is exactly the state we started with
From now on, the table rows would just repeat forever.

This means that this LFSR has a period of 7 (because it repeats after 7 steps).
That is the maximal period length you can archieve with a 3-bit LFSR.
That is the maximal period length you can achieve with a 3-bit LFSR.

Other 3-bit LFSRs that have a *shorter* period length exist, e.g. if you have an LFSR where the feedback bit is calculated as *x = s<sub>0</sub>* it will already repeats after 3 steps, no 3-bit LFSR will have a longer period.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Related Files:
* [Find On Web Menu Services Folder](https://github.com/mixxxdj/mixxx/tree/main/src/widget/findonwebmenuservices)

##### *Editable Track Menu*
While discussing *Find On Web* feature and where we could placed it on Mixxx. We have decided to place it on Track Menu. There was an idea on Zulip, that the Track Menu was gettin crowded, and we can consider to make it configurable.
While discussing *Find On Web* feature and where we could placed it on Mixxx. We have decided to place it on Track Menu. There was an idea on Zulip, that the Track Menu was getting crowded, and we can consider to make it configurable.

At first I thought the same and this feature would be nice to have and that can help me to get to know the code base for the preferences option.

Expand Down
2 changes: 1 addition & 1 deletion content/news/2023-05-11-mixxx-2-3-5-released.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Here is the full change log if you're interested:
[#11327](https://github.com/mixxxdj/mixxx/issues/11327)
* LateNight: brighter fx parameter buttons
[#11397](https://github.com/mixxxdj/mixxx/pull/11397)
* Fix drift in analyzis data after exporting metadata to MP3 files with ID3v1.1 tags
* Fix drift in analysis data after exporting metadata to MP3 files with ID3v1.1 tags
[#11168](https://github.com/mixxxdj/mixxx/pull/11168)
[#11159](https://github.com/mixxxdj/mixxx/issues/11159)
* Fix broadcasting using Opus encoding
Expand Down
2 changes: 1 addition & 1 deletion content/news/2024-02-23-improved-waveforms.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The new waveform types are marked "(GLSL)" in the Waveforms section in the setti

Visually, the new waveforms follow the design of the legacy waveforms, with some minor tweaks. Note for example the semi-transparently filled triangles pre- and post track. This also serves as a quick indication that you are using the new waveforms.

![RGB L/R (GLSL) Waveform type with pre-track trianges]({static}/images/news/glsl-rgb-lr-waveform.png)
![RGB L/R (GLSL) Waveform type with pre-track triangles]({static}/images/news/glsl-rgb-lr-waveform.png)

The newly implemented GLSL waveforms have been beta-tested for several months now and are considered stable and recommended. The old waveform types remain available, just in case, as an option in the Waveforms section of the settings dialog, marked with "(legacy)", and might be removed in future versions. If you experience issues with the new waveform types, you are encouraged to file a bug report!

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ date: 2024-04-01 11:32:09
The Mixxx Board of Directors in pleased to announce plans to acquire the AlphaTheta Corporation (formerly known as Pioneer DJ), Serato Audio Research Ltd. and Native Instruments.

*"This exciting [consolidation of brands](https://www.thepost.co.nz/a/business/350059653/us-firm-waves-prospect-legal-action-stop-100m-buy-out-nz-software-firm-serato) will reshape the DJ software market as we know it"*, Mixxx CEO Scrooge McScratch said after the decision was made.
Some trademarks such as Rekordbox®, Serato® and Traktor® will likely be dropped to archieve a lean portfolio and focus on the popular Mixxx brand.
Some trademarks such as Rekordbox®, Serato® and Traktor® will likely be dropped to achieve a lean portfolio and focus on the popular Mixxx brand.

The move will lead to new synergies and enables Mixxx to benefit from the know-how of its former competitors.
*"Our new subsidiaries have a track record in profitable partnerships with hardware manufacturers."*, McScratch commented.
Expand Down
3 changes: 0 additions & 3 deletions locale/README.md

This file was deleted.

Loading