WordPressのプラグイン「Site Kit by Google」を更新すると表記が英語になってしまいます。
これを日本語に戻す方法を説明します。後半に自動化するスクリプトがあります。
一般の人はファイルマネージャーかFTPクライアントを利用する方法でやってください。分かる人はシェルで。
ファイルマネージャーかFTPクライアントを利用
-
翻訳ファイルをダウンロード
ブラウザで言語パックの一覧ページを開き、Japaneseのzipファイルをダウンロードします。 -
ダウンロードしたzipファイルを展開
ダウンロードしたzipファイルを任意のフォルダに展開します。 -
レンタルサーバーのファイルマネージャーかFTPクライアントで
(WordPressディレクトリ)/wp-content/languages/plugins/
を開きます。 -
展開したファイルをアップロードします。
-
完了
Site Kitの表記は日本語に戻っています。気になる人は、
google-site-kit-ja-07ec685b783960660a163bf261d52602.json
といった旧いファイルを削除してもよいでしょう。
シェルを利用
- 翻訳プラグインのディレクトリに移動
cd (WordPressディレクトリ)/wp-content/languages/plugins
- 翻訳ファイルをダウンロード
wget -qO- "https://translate.wordpress.org/projects/wp-plugins/google-site-kit/language-packs/" | \ grep -o 'https://downloads.wordpress.org/[^"]*/ja.zip' | \ xargs wget
- ファイルを展開
unzip -o ja.zip
- ダウンロードしたファイルを削除
rm -f ja.zip
- 古い翻訳ファイルを削除する(任意)
# 対象のファイルを確認(1日以前) find . -name "google-site-kit-ja-*.json" -mtime +2 -print | xargs ls -lh # 対象のファイルを削除 find . -name "google-site-kit-ja-*.json" -mtime +2 -exec rm {} \;
- 完了
Site Kitの表記は日本語に戻っています。
Google Site Kit 翻訳ファイルの自動更新スクリプト
ここまで、手動で更新する方法について書きました。
その過程を自動化する PowerShell スクリプトを作成しました。
更新の背景
- 複数のサイトを管理している場合、手動更新は時間がかかる
- 自動化により、更新作業の効率化と人為的ミスの削減が可能に
スクリプトの概要
このスクリプトは以下の機能を提供します:
- WordPress.org から最新の Google Site Kit 日本語翻訳ファイルをダウンロード
- FTP または SSH を使用して、指定された複数のサイトに接続
- 各サイトの既存の翻訳ファイルを削除
- 新しい翻訳ファイルをアップロード
使用上の注意
- このスクリプトは PowerShell で書かれています。Windows 10 以降または PowerShell Core がインストールされている環境で動作します。(PowerShell Core は Windows、macOS、Linux で利用可能です。)
- FTP と SSH の両方の接続方法に対応しているため、さまざまなホスティング環境で使用可能です。
非 Windows 環境でのスクリプト実行
System.Net.FtpClient
を利用するか、lftp
や scp
を利用するようにスクリプトを書き換える必要があります。
System.Net.FtpClient
のインストール:
Install-Module -Name System.Net.FtpClient -Scope CurrentUser
lftp
をインストール:
sudo apt-get install lftp
スクリプトの使い方
- スクリプト内の接続情報を自分の環境に合わせて変更します。
- FTP ホスト、ユーザー名、パスワード
- SSH ホスト、ユーザー名、秘密鍵のパス
-
$sites
配列内のサイト情報を自分が管理するサイトの情報に更新します。 - PowerShell を開き、スクリプトを実行します。
最後に
このスクリプトにより、Google Site Kit の翻訳ファイル更新作業が大幅に効率化されます。皆さんの管理作業の助けになれば幸いです。
質問やフィードバックがありましたら、コメント欄でお知らせください。
Site Kit 自動更新スクリプト
# Google Site Kit翻訳ファイル 複数サイト順次更新スクリプト
# FTP接続情報
$ftpHost1 = "your_host.example.com"
$ftpUser1 = "your_username"
$ftpPass1 = "your_password"
# SSH接続情報
$sshHost1 = "your_host.example.com"
$sshUser1 = "your_username"
$sshKeyPath1 = "C:\Path\To\Your\SSH\Key"
# サイト情報
$sites = @(
@{
Name = "site1"
Type = "FTP"
HostName = $ftpHost1
User = $ftpUser1
Pass = $ftpPass1
Path = "www/site1/wp-content/languages/plugins/"
},
@{
Name = "site2"
Type = "SSH"
HostName = $sshHost1
User = $sshUser1
KeyPath = $sshKeyPath1
Path = "/home/username/site2/wp-content/languages/plugins"
}
)
# FTP接続の準備
function Get-FtpWebClient {
param (
[string]$user,
[string]$pass
)
$webclient = New-Object System.Net.WebClient
$webclient.Credentials = New-Object System.Net.NetworkCredential($user, $pass)
return $webclient
}
# 既存のGoogle Site Kit翻訳ファイルを削除する関数 (FTP)
function Remove-ExistingTranslationFilesFTP {
param (
[string]$hostName,
[string]$user,
[string]$pass,
[string]$path
)
$ftpUrl = "ftp://${hostName}/${path}"
$webclient = Get-FtpWebClient -user $user -pass $pass
try {
$listRequest = [System.Net.FtpWebRequest]::Create($ftpUrl)
$listRequest.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectory
$listRequest.Credentials = $webclient.Credentials
$listResponse = $listRequest.GetResponse()
$streamReader = New-Object System.IO.StreamReader($listResponse.GetResponseStream())
$directoryList = $streamReader.ReadToEnd()
$files = $directoryList -split "`r`n"
foreach ($file in $files) {
if ($file -like "google-site-kit-ja*") {
try {
$deleteRequest = [System.Net.FtpWebRequest]::Create($ftpUrl + $file)
$deleteRequest.Method = [System.Net.WebRequestMethods+Ftp]::DeleteFile
$deleteRequest.Credentials = $webclient.Credentials
$deleteResponse = $deleteRequest.GetResponse()
Write-Host "削除成功 (FTP $path): $file"
$deleteResponse.Close()
}
catch {
Write-Host "エラー (FTP $path): $file の削除中にエラーが発生しました: $($_.Exception.Message)"
}
}
}
}
catch {
Write-Host "エラー (FTP $path): ファイル一覧の取得中にエラーが発生しました。"
Write-Host $_.Exception.Message
}
}
# 既存のGoogle Site Kit翻訳ファイルを削除する関数 (SSH)
function Remove-ExistingTranslationFilesSSH {
param (
[string]$hostName,
[string]$user,
[string]$keyPath,
[string]$path
)
$sshCommand = "find $path -name 'google-site-kit-ja*' -type f -delete"
$result = ssh -i $keyPath "${user}@${hostName}" $sshCommand 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Host "削除成功 (SSH $path): 既存の翻訳ファイルを削除しました。"
} else {
Write-Host "エラー (SSH $path): 既存の翻訳ファイルの削除中にエラーが発生しました。"
Write-Host $result
}
}
# 新しい翻訳ファイルをアップロードする関数 (FTP)
function Send-TranslationFilesFTP {
param (
[string]$hostName,
[string]$user,
[string]$pass,
[string]$path,
[string]$tempDir
)
$ftpUrl = "ftp://${hostName}/${path}"
$webclient = Get-FtpWebClient -user $user -pass $pass
Get-ChildItem -Path $tempDir -File | ForEach-Object {
try {
$uri = New-Object System.Uri($ftpUrl + $_.Name)
$webclient.UploadFile($uri, $_.FullName)
Write-Host "アップロード成功 (FTP $path): $($_.Name)"
}
catch {
Write-Host "エラー (FTP $path): $($_.Name) のアップロードに失敗しました。"
Write-Host $_.Exception.Message
}
}
}
# 新しい翻訳ファイルをアップロードする関数 (SSH)
function Send-TranslationFilesSSH {
param (
[string]$hostName,
[string]$user,
[string]$keyPath,
[string]$path,
[string]$tempDir
)
$files = Get-ChildItem -Path $tempDir -File
foreach ($file in $files) {
$result = scp -i $keyPath $file.FullName "${user}@${hostName}:$path" 2>&1
if ($LASTEXITCODE -eq 0) {
Write-Host "アップロード成功 (SSH $path): $($file.Name)"
} else {
Write-Host "エラー (SSH $path): $($file.Name) のアップロードに失敗しました。"
Write-Host $result
}
}
}
# 翻訳ファイルをダウンロードする関数
function Get-TranslationFiles {
$tempDir = New-Item -ItemType Directory -Force -Path "$env:TEMP\google-site-kit-translation"
try {
$webPage = Invoke-WebRequest -Uri "https://translate.wordpress.org/projects/wp-plugins/google-site-kit/language-packs/"
$downloadUrl = $webPage.Links | Where-Object { $_.href -like "*ja.zip" } | Select-Object -First 1 -ExpandProperty href
$zipPath = Join-Path $tempDir "ja.zip"
Invoke-WebRequest -Uri $downloadUrl -OutFile $zipPath
Expand-Archive -Path $zipPath -DestinationPath $tempDir -Force
Remove-Item -Path $zipPath -Force
return $tempDir
}
catch {
Write-Host "エラー: 翻訳ファイルのダウンロード中にエラーが発生しました。"
Write-Host $_.Exception.Message
return $null
}
}
# メイン処理
$tempDir = Get-TranslationFiles
if ($null -ne $tempDir) {
foreach ($site in $sites) {
Write-Host "サイト $($site.Name) の処理を開始します..."
Write-Host "既存の翻訳ファイルを削除しています..."
if ($site.Type -eq "FTP") {
Remove-ExistingTranslationFilesFTP -hostName $site.HostName -user $site.User -pass $site.Pass -path $site.Path
} else {
Remove-ExistingTranslationFilesSSH -hostName $site.HostName -user $site.User -keyPath $site.KeyPath -path $site.Path
}
Write-Host "新しい翻訳ファイルをアップロードしています..."
if ($site.Type -eq "FTP") {
Send-TranslationFilesFTP -hostName $site.HostName -user $site.User -pass $site.Pass -path $site.Path -tempDir $tempDir
} else {
Send-TranslationFilesSSH -hostName $site.HostName -user $site.User -keyPath $site.KeyPath -path $site.Path -tempDir $tempDir
}
Write-Host "サイト $($site.Name) の処理が完了しました。"
Write-Host "----------------------------------------"
}
# 一時ディレクトリの削除
Remove-Item -Path $tempDir -Recurse -Force
Write-Host "すべての処理が完了しました。"
}
else {
Write-Host "翻訳ファイルのダウンロードに失敗したため、処理を中止します。"
}