Thật không may, tự trả lời của bạn không phải là phổ quát. Ngôn ngữ trường và ngôn ngữ nút không giống nhau.
Ngôn ngữ trường chỉ cần thiết nếu bạn đang sử dụng API dịch trường (ví dụ: Dịch thực thể ). Khi bạn bắt đầu sử dụng nó, một số trường được chuyển đổi thành có thể dịch.
Các lĩnh vực có thể dịch có mã ngôn ngữ, mà thực sự có ý nghĩa. Nhưng nếu trường không thể dịch được, mã ngôn ngữ sẽ luôn là (và cho tất cả các loại nội dung, thực thể, v.v.) - LANGUAGE_NONE
(tốt nhất nên sử dụng hằng LANGUAGE_NONE
và không phải chuỗi 'und'
).
Vì vậy, với giải pháp của bạn, bạn có thể gặp tình huống khi một nút là tiếng Nga, nhưng một trường của nút sử dụng LANGUAGE_NONE
.
Hạnh phúc, các trường được gắn vào biểu mẫu bằng '#language'
khóa, luôn chứa mã ngôn ngữ chính xác.
$lang = $form['FIELDNAME']['#language'];
$form['FIELDNAME'][$lang][0]['value']['#value'] = $value;
Nếu bạn không có quyền truy cập vào biểu mẫu đính kèm, các hàm API của Ngôn ngữ trường có thể hữu ích.
foreach
vòng lặp. Nếu đó chỉ là LANGUAGE_NONE, thì đó là một lần chạy. Theo nghĩa form_alter, nó nên thay đổi về mặt kỹ thuật bất cứ ngôn ngữ nào mà biểu mẫu có.