• 使用 po4a 进行技术文档翻译:从入门到实践

    2026-01-23 19:23:47 398 0 技术文章

    在开源项目中,文档的多语言支持是提升项目影响力的重要环节。最近在为 Yii3 框架文档添加简体中文翻译时,我深入使用了 po4a 这个强大的翻译工具。本文将分享使用 po4a 进行技术文档翻译的完整流程和实践经验。

    什么是 po4a?

    po4a(PO for Anything)是一个基于 gettext 的文档翻译工具,最初为 Debian 项目开发,但现在已经广泛应用于各种文档翻译场景。它的核心优势在于:

    • 格式无关:支持 Markdown、POD、XML、HTML 等多种格式
    • 版本控制友好:翻译文件(.po)是纯文本,易于纳入 Git 管理
    • 增量更新:源文件更新时,自动合并已有翻译,避免重复工作
    • 团队协作:支持多人协作翻译,便于分工

    项目结构

    在开始之前,先了解典型的 po4a 项目结构:

    docs/
    ├── _translations/        # 翻译配置和 PO 文件
    │   ├── po4a.conf         # 主配置文件
    │   ├── pot/              # 模板文件(.pot)
    │   └── po/               # 翻译文件(.po)
    │       └── zh-CN/        # 简体中文翻译
    ├── src/                  # 源文件和翻译输出
    │   ├── en/               # 英文源文件
    │   └── zh-CN/            # 简体中文翻译输出
    

    这种结构将翻译工作与源文件分离,既保持了源文件的整洁,又便于管理翻译进度。

  • Docker 配置代理完整指南

    2026-01-21 17:18:48 364 0 技术文章

    背景

    在国内环境下使用 Docker 时,经常遇到拉取镜像缓慢或超时的问题。虽然可以配置镜像加速器,但随着国内镜像源的不稳定,使用代理成为了更可靠的解决方案。

    问题现象

    执行 docker builddocker pull 时出现以下错误:

    ERROR: failed to solve: DeadlineExceeded: failed to resolve source metadata for docker.io/xxx
    dial tcp xxx.xxx.xxx.xxx:443: i/o timeout
    

    核心原理

    Docker 架构分为两部分:

    • Docker Client: 命令行工具,接收用户命令
    • Docker Daemon: 后台服务,实际执行拉取镜像等操作 当我们在终端设置 export HTTP_PROXY=... 时,只影响 Docker Client,而真正需要网络访问的 Docker Daemon 并未使用代理。

    解决方案

    为 Docker Daemon 配置代理(推荐)

    1. 创建 systemd 配置目录
      sudo mkdir -p /etc/systemd/system/docker.service.d
      
    2. 创建代理配置文件
      sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
      
    3. 添加代理配置
      [Service]
      Environment="HTTP_PROXY=http://your-proxy-ip:port"
      Environment="HTTPS_PROXY=http://your-proxy-ip:port"
      Environment="NO_PROXY=localhost,127.0.0.1,*.local,registry.internal.com"
      

      配置说明:

    • HTTP_PROXY: HTTP 协议代理地址
    • HTTPS_PROXY: HTTPS 协议代理地址(Docker Hub 使用 HTTPS)
    • NO_PROXY: 不使用代理的地址列表,通常包括:
      • localhost, 127.0.0.1: 本地地址
      • *.local: 本地域名
      • 内网私有镜像仓库域名
    1. 重载配置并重启 Docker
      # 重载 systemd 配置
      sudo systemctl daemon-reload
      # 重启 Docker 服务
      sudo systemctl restart docker
      
    2. 验证配置
      # 查看 Docker 服务的环境变量
      sudo systemctl show --property=Environment docker
      

      预期输出:

      Environment=HTTP_PROXY=http://your-proxy-ip:port HTTPS_PROXY=http://your-proxy-ip:port NO_PROXY=localhost,127.0.0.1
      
    3. 测试代理连接
      # 测试是否能通过代理访问 Docker Hub
      curl -x http://your-proxy-ip:port -I https://registry-1.docker.io/v2/
      # 拉取测试镜像
      docker pull hello-world
      
  • 入职满 11 周年纪念日

    2026-01-20 10:19:14 290 0 生活随笔

    79EE5F71-BDDD.jpg

    IMG_7957.JPG

    • 在 macOS(Apple Silicon)根目录下创建目录的正确方式

      2025-10-29 17:30:05 932 0 技术文章

      在 macOS 上,我想在根目录(/)下创建一个目录,比如 /data1,用于放置项目数据。

      mkdir /data1
      

      结果系统提示:

      mkdir: /data1: Read-only file system
      

      一开始我以为是权限问题,于是又试了:

      sudo mkdir /data1
      

      但依然报错,说明即使 sudo 也不行。

      为什么会这样?

      从 macOS Big Sur(11) 开始,苹果对系统盘启用了 Signed System Volume(SSV)签名保护机制。

      这意味着:

      系统卷 / 是 只读的 APFS 快照;

      即使是 root 用户,也不能直接修改;

      mount -uw / 在 Apple Silicon(M1/M2/M3)上会报错:

      mount_apfs: volume could not be mounted: Permission denied
      mount: / failed with 66
      

      简单来说:根目录是锁死的。

    • 2025 海淀马拉松 3:39 安全完赛

      2025-10-14 17:28:41 845 0 跑步

      2025 海淀马拉松 3:39 安全完赛

      9c43b356be68a5.JPG
      IMG_0984.jpg
      • 西北旺第四届十公里竞速赛 PB 44:11

        2025-09-28 15:00:27 951 0 跑步

        西北旺第四届十公里竞速赛 PB,成绩 44:11,配速 4:25,排名 40(500 人参赛)

        西北旺十公里竞速赛.jpeg

        IMG_7516.PNG

        43c45a461d7f085af8ccf003bf824033.JPG

        IMG_7506.PNG

        • 2025北京亦庄半程马拉松暨人形机器人马拉松安全完赛

          2025-04-19 15:52:55 1873 0 跑步

          2025北京亦庄半程马拉松暨人形机器人马拉松安全完赛,第一次和机器人一起参加比赛,最近太忙训练太少,虽然没有 PB,但是今天的发挥也相当满意!

          aedd09da708030ae2501b73fe9b278.jpg

          IMG_6782.jpg

          IMG_6783.jpg

          • 入职满 10 周年纪念日

            2025-01-20 09:49:32 4235 0 生活随笔

            时光荏苒,岁月如梭,十年风雨,不负韶华。

            lALPDfJ6ffmvLUbNCMDNBNo_1242_2240.jpg

            WechatIMG324.jpg

            • 通过 pyenv 配合 venv 来创建项目专属的虚拟环境

              2024-12-03 17:37:48 4819 0 技术文章

              安装 pyenv

              curl https://pyenv.run | bash
              

              这条命令会自动安装以下工具:

              • pyenv
              • pyenv-doctor(检查 pyenv 安装的健康状况)
              • pyenv-virtualenv(用于创建 Python 虚拟环境)

              更新 Shell 配置

              vim ~/.bashrc
              
              echo -e 'export PATH="$HOME/.pyenv/bin:$PATH"\n' \
                  'eval "$(pyenv init --path)"\n' \
                  'eval "$(pyenv init -)"\n' \
                  'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
              
              source ~/.bashrc
              

              安装 Python 版本

              pyenv install 3.11.9
              

              设置全局或本地 Python 版本

              设置一个全局的 Python 版本(用于所有项目):

              pyenv global 3.11.9
              

              你还可以为特定目录设置本地版本,例如在某个项目目录下:

              pyenv local 3.8.12
              

              这会创建一个 .python-version 文件,记录该项目使用的 Python 版本。

              创建虚拟环境(使用 venv)

              python -m venv venv
              

              激活虚拟环境

              对于 Bash/Zsh(Linux/macOS):

              source venv/bin/activate
              

              对于 Windows(CMD):

              .\venv\Scripts\activate
              
            • 解决 Python 3.8+ 遇到的 OpenSSL 版本不兼容的问题

              2024-11-09 16:40:57 7708 0 技术文章

              在安装 Python3.8 时可能会遇到与系统自带 OpenSSL 版本不兼容的问题。Python3.8 需要的 OpenSSL 版本为 1.0.21.1.x。如果系统中默认的 OpenSSL 版本低于需求(通常是 OpenSSL 1.0.1),会导致如下错误:

              Could not build the ssl module!
              Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_host().
              
            • 2024 海淀马拉松 3:35 安全完赛

              2024-10-29 20:15:58 4589 0 跑步

              离家最近的一场马拉松,从家出发到起点仅 5 公里,整体的体验非常好,明年还会继续参加!

              05FCA2AA209C49F6FD703F278526C682.png

              • 2024 天津马拉松 PB 3:31

                2024-10-21 10:59:56 4319 0 跑步

                天津马拉松成功 PB,成绩 3:31,比上次最佳成绩快了 20 分钟,期待下周海淀马拉松取得更好成绩!

                IMG_6020.PNG

                • 怀柔长城半程马拉松安全完赛

                  2024-09-10 14:11:19 5328 0 跑步

                  IMG_5758.PNG

                  IMG_5767.JPG

                  • 秋高气爽,开始备赛

                    2024-09-09 10:33:54 5407 0 跑步
                    • 9月22日 怀柔长城马拉松(中签)
                    • 10月20日 天津马拉松(中签)
                    • 10月27日 海淀马拉松(中签)
                    • 11月3日 北京马拉松(未出签)

                    30公里LSD

                    IMG_5669.PNG

                    间歇跑

                    IMG_5675.PNG

                    IMG_5674.PNG

                    35公里LSD

                    IMG_5704.PNG

                    54321渐进跑

                    IMG_5718.PNG

                    IMG_5719.PNG

                    • Linux 创建 Swap 交换分区的三种方式

                      2024-07-24 14:27:19 7214 0 未分类

                      之前写过一篇 阿里云服务器添加 Swap 分区 的文章,最近发现了三种常用创建交换分区的方法,现在分享给大家,并对三种创建交换分区的优缺点做了简单对比。

                      创建 Swap 分区文件有三种常用方法:使用 dd、使用 fallocate 和使用 fdisk

                      • MySQL 容器异常 - mbind: Operation not permitted

                        2024-06-03 10:39:11 5656 0 技术文章
                        2024-06-03 09:23:25+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
                        2024-06-03 09:23:25+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
                        2024-06-03 09:23:25+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.27-1debian10 started.
                        2024-06-03T09:23:25.944402Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
                        2024-06-03T09:23:25.944530Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
                        2024-06-03T09:23:25.944549Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.27) starting as process 1
                        2024-06-03T09:23:25.970311Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
                        2024-06-03T09:23:26.546899Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
                        2024-06-03T09:23:26.881580Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
                        2024-06-03T09:23:26.881612Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
                        2024-06-03T09:23:26.899326Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
                        2024-06-03T09:23:26.899366Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
                        2024-06-03T09:23:26.989154Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
                        2024-06-03T09:23:27.078117Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.27'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server - GPL.
                        2024-06-03T09:23:27.078165Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
                        mbind: Operation not permitted
                        mbind: Operation not permitted
                        mbind: Operation not permitted
                        
                        • 2024年顺义后沙峪安全完赛

                          2024-04-21 12:38:22 4829 0 跑步

                          顺义后沙峪半马 1:40 安全完赛,本来今天有两场比赛,毕竟只长了两条腿,最终还是放弃了副中心马拉松,和我的同事和朋友们一起享受后沙峪的独特风光!

                          WechatIMG248.jpg

                          • macOS 终端使用 Solarized Dark xterm-256color 主题

                            2023-11-25 12:38:22 788 0 技术文章

                            1. 下载主题文件

                            Solarized 是一款经典的终端配色方案,护眼又高对比度。可以在官方仓库下载 macOS 终端主题:

                            git clone https://github.com/altercation/solarized.git
                            

                            主题路径位于:

                            solarized/osx-terminal.app-colors-solarized/
                            

                            其中包括两个文件:

                            • Solarized Dark xterm-256color.terminal
                            • Solarized Light xterm-256color.terminal

                            2. 导入主题

                            1. 打开 Terminal.app
                            2. 依次点击:偏好设置 (Preferences)Profiles
                            3. 点击左下角的 齿轮图标导入...
                            4. 选择 Solarized Dark xterm-256color.terminal
                            5. 设置为默认主题:在主题上右键 → 选择「设为默认」

                            完成后重新打开终端,就能看到舒适的 Solarized Dark 效果。

                            3. 优化选中文本配色

                            1. 打开 终端 → 设置 → 配置文件 → 文本 → 选中颜色
                            2. 点击右侧的小色块(打开颜色选取器)
                            3. 在弹出的窗口上方点 “滑块图标”(像三根小杠的那个),切换模式
                            4. 在上方的下拉菜单中选择:RGB 滑块
                            5. 在十六进制颜色编号框输入 284B5A

                            4. 设置字体

                            在 macOS 终端中,个人比较喜欢 SF Mono Terminal 11,苹果官方风格,简洁干净。 JetBrains Mono 字体也相当不错,专为开发设计,字符区分度高(比如 0/O, 1/l/I),自带连字(可以关闭),粗细分布合理,长时间看不累。

                            • 2024年石家庄半马安全完赛

                              2024-03-31 12:38:22 4162 0 跑步

                              石家庄半马安全完赛,最近因为感冒状态欠佳,不过今天已经尽力而为了。重回解放广场,这是我记忆中的火车站广场,我第一次独自离开家乡就是从这里出发,此时我发现我对石马的情感胜过北马,因为这里是我梦想开始的地方,今天我将要从这里再次出发!比赛中我一路欣赏熟悉的街道和风景,感慨石家庄这些年的巨大变化,如今我的家乡不再土里土气,而是扬眉吐气的国际庄!

                              WechatIMG231.jpg

                              • 入职满 9 周年纪念日

                                2024-01-20 12:38:22 3714 0 生活随笔

                                IMG_4613.png