linglong/DEVELOPER_GUIDE.md

238 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

docs: update build guide and manifest example 1. Replaced the BUILD.md and BUILD.zh_CN.md files with a new DEVELOPER_GUIDE.md file and its Chinese translation. This centralizes the build and development instructions into a single location. 2. Updated the manifest example in docs/pages/en/guide/ll-builder/ manifests.md and docs/pages/guide/ll-builder/manifests.md to use `x86_64` instead of `amd64` for architecture. This reflects a more standardized naming convention for the architecture. 3. Updated app quantity in docs/pages/en/guide/start/whatis.md and docs/ pages/guide/start/whatis.md to 4700+. This reflects the current app quantity. 4. Updated development tools in docs/pages/en/guide/start/whatis.md and docs/pages/guide/start/whatis.md to linglong-builder. 5. Adjusted wording in README.md and README.zh_CN.md to reference the new DEVELOPER_GUIDE.md. Log: Updated documentation with developer guide, manifest example and app quantity. Influence: 1. Verify that the new DEVELOPER_GUIDE.md accurately reflects the current build process. 2. Check that the links in README.md and README.zh_CN.md point to the correct file. 3. Ensure manifest examples in documentation are up-to-date with accepted architecture types. 4. Confirm the app quantity is accurately reflected in the documentation. 5. Verify that the new DEVELOPER_GUIDE.md covers all the necessary topics from the previous BUILD.md files, including dependencies, build instructions, packaging and i18n Management. 6. Test i18n management section by performing the steps described in the documentation. 文档: 更新构建指南和清单示例 1. 使用新的 DEVELOPER_GUIDE.md 文件及其中文翻译替换了 BUILD.md 和 BUILD.zh_CN.md 文件。 这将构建和开发说明集中到一个位置。 2. 更新了 docs/pages/en/guide/ll-builder/manifests.md 和 docs/pages/ guide/ll-builder/manifests.md 中的清单示例,使用 `x86_64` 而不是 `amd64` 作为架构。 这反映了架构的更标准化命名约定。 3. 更新了 docs/pages/en/guide/start/whatis.md 和 docs/pages/guide/start/ whatis.md 中的应用程序数量,达到 4700+。 这反映了当前的应用程序数量。 4. 更新了 docs/pages/en/guide/start/whatis.md 和 docs/pages/guide/start/ whatis.md 中的开发工具到 linglong-builder。 5. 调整了 README.md 和 README.zh_CN.md 中的措辞,以引用新的 DEVELOPER_GUIDE.md。 Log: 使用开发者指南、清单示例和应用程序数量更新了文档。 Influence: 1. 验证新的 DEVELOPER_GUIDE.md 是否准确反映了当前的构建过程。 2. 检查 README.md 和 README.zh_CN.md 中的链接是否指向正确的文件。 3. 确保文档中的清单示例是最新的,并包含可接受的架构类型。 4. 确认应用程序数量准确地反映在文档中。 5. 验证新的 DEVELOPER_GUIDE.md 是否涵盖了先前 BUILD.md 文件中的所有必要 主题,包括依赖项、构建说明、打包和 i18n 管理。 6. 按照文档中描述的步骤测试 i18n 管理部分。
2025-09-12 17:05:51 +08:00
# Build Guide
## Build Dependencies
Before building Linglong, ensure the following dependencies are installed:
- cmake
- debhelper-compat (= 12)
- intltool
- libcli11-dev (>= 2.4.1) | hello
- libcurl4-openssl-dev
- libdeflate-dev
- libelf-dev
- libexpected-dev (>= 1.0.0~dfsg-2~bpo10+1) | hello
- libfuse3-dev
- libglib2.0-dev
- libgmock-dev
- libgtest-dev
- liblz4-dev
- liblzma-dev
- libostree-dev
- libpcre2-dev
- libselinux1-dev
- libssl-dev
- libsystemd-dev
- libyaml-cpp-dev (>= 0.6.2)
- libzstd-dev
- nlohmann-json3-dev (>= 3.5.0)
- pkg-config
- qt6-base-dev | qtbase5-dev
- qt6-base-private-dev | qtbase5-private-dev
- systemd
- zlib1g-dev
Linglong uses [cmake presets]. To build and install:
```bash
cmake --workflow --preset release
sudo cmake --install build-release
```
For development/debugging:
```bash
export CMAKE_CXX_COMPILER_LAUNCHER="$(command -v ccache)"
# Configure, build and test
cmake --workflow --preset debug
# Configure only
cmake --preset debug
# Build only
cmake --build --preset debug
# Test only
ctest --preset debug
```
[cmake presets]: https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html
## Packaging
Linglong uses [CPM.cmake] to download missing dependencies locally.
To disable this feature:
```bash
export CPM_USE_LOCAL_PACKAGES=1
```
See [CPM.cmake] README for more information.
[CPM.cmake]: https://github.com/cpm-cmake/CPM.cmake
## Internationalization (i18n) Management
Linglong uses GNU gettext toolchain and Transifex platform for internationalization.
### Translation Workflow
```mermaid
graph TD
A[Mark Source Code] --> B[Generate POT Template]
B --> C[Create/Update PO Files]
C --> D[Translate PO Files]
D --> E[Compile MO Files]
E --> F[Runtime Usage]
C --> G[Upload to Transifex]
G --> H[Translator Collaboration]
H --> C
```
### 1. Environment Setup
#### 1.1 Install Transifex CLI
```bash
wget https://github.com/transifex/cli/releases/download/v1.6.17/tx-linux-amd64.tar.gz
tar -xzf tx-linux-amd64.tar.gz -C $HOME/.local/bin/
tx -v # Verify version
```
#### 1.2 Configure Transifex
1. Create ~/.transifexrc:
```plaintext
[https://www.transifex.com]
rest_hostname = https://rest.api.transifex.com
api_hostname = https://api.transifex.com
hostname = https://www.transifex.com
token = <your-transifex-token>
```
2. Configure project .tx/config:
```plaintext
[main]
host = https://www.transifex.com
[o:linuxdeepin:p:linyaps:r:6e861fdc8edf8f03ac6f0b629a022f2f]
file_filter = po/<lang>.po
source_file = po/en_US.po
source_lang = en_US
type = PO
```
### 2. Translation File Management
#### 2.1 Generate POT Template
```bash
# In build directory
make pot # Generates po/linyaps.pot
```
#### 2.2 Update PO Files
```bash
make po # Update all PO files
make linyaps_zh_CN.po # Update specific language
```
#### 2.3 Translation Collaboration
1. Push translation files to git repository:
```bash
git add po/linyaps.pot po/en_US.po
git push $(REMOTE) $(BRANCH)
```
2. Upload translation files to Transifex:
```bash
tx push -a # Push all languages
tx push --translation -f --languages zh_CN # Push specific language
```
**TIPS:** Typically we only push translations for the current system language, while translators will collaborate on other languages in Transifex.
3. Download translations:
```bash
tx pull -a # All languages
tx pull -l zh_CN # Specific language
```
### 3. Compilation & Testing
1. Compile PO to MO:
```bash
msgfmt po/zh_CN.po -o share/locale/zh_CN/LC_MESSAGES/linyaps.mo
```
2. Test translations:
```bash
LANG=zh_CN.UTF-8 ll-cli --help
```
### Best Practices
1. String Marking:
```cpp
// Use gettext macros
#include <libintl.h>
#define _(str) gettext(str)
printf(_("Hello World"));
```
2. Translation Context:
```cpp
/// TRANSLATORS: System username, max 20 chars
printf(_("User"));
// Plural forms
printf(ngettext("%d file", "%d files", count), count);
```
3. Quality Checks:
```bash
# Check untranslated strings
msgfmt --statistics po/zh_CN.po
# Validate format
msgfmt -cv po/zh_CN.po
```
4. Collaboration Standards:
- Preserve source context
- Avoid variable placeholders (e.g. %s)
- Maintain terminology consistency
- Use full-width punctuation for Chinese
5. Regular Sync:
- Weekly POT updates to Transifex
- Monthly full translation pulls
- Pre-release testing:
```bash
for lang in $(cat po/LINGUAS); do
LANG=$lang.UTF-8 ll-cli --help > /dev/null || echo "$lang test failed"
done
```
6. Common Issues:
- Outdated translations: Use `msgmerge`
- Format errors: Check quotes/special chars
- Variable order: Use positional params (%1$s)
- Length constraints: Chinese is typically shorter